首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库函数objdump输出

库函数objdump输出
EN

Stack Overflow用户
提问于 2015-12-04 04:02:57
回答 1查看 1.7K关注 0票数 0

调试崩溃时,我有以下objdump输出。我可以将问题缩小到下面的函数LanManager::Interface()库函数,但由于我对对象代码的经验不多,我无法从objdump输出中获得更多的意义。

下面是该库功能的开始部分。我想知道:

  • 开始地址是否是函数本身的地址?
  • 该函数地址与使用该函数的主要可执行文件的地址之间的关系是什么?
  • 对此objdump输出中的三列的简要说明。
  • _init是什么?这是函数的开始吗?
  • 有没有任何方法可以计算出<_init+0x10e4>所指向的是什么?

我不会期待一个完整的答案,只要任何能让我明白的事情都会被感激。

代码语言:javascript
复制
0003629c <LanManager::Interface()>:
   3629c:   e1a0c00d    mov ip, sp
   362a0:   e92dd9f0    push    {r4, r5, r6, r7, r8, fp, ip, lr, pc}
   362a4:   e59f40b8    ldr r4, [pc, #184]  ; 36364 <LanManager::Interface()+0xc8>
   362a8:   e24cb004    sub fp, ip, #4  ; 0x4
   362ac:   e24dd004    sub sp, sp, #4  ; 0x4
   362b0:   e59f70b0    ldr r7, [pc, #176]  ; 36368 <LanManager::Interface()+0xcc>
   362b4:   e08f4004    add r4, pc, r4
   362b8:   e59f50ac    ldr r5, [pc, #172]  ; 3636c <LanManager::Interface()+0xd0>
   362bc:   e7940007    ldr r0, [r4, r7]
   362c0:   ebff6dc9    bl  119ec <_init+0x10e4>
   362c4:   e7942005    ldr r2, [r4, r5]
   362c8:   e5923000    ldr r3, [r2]
   362cc:   e3530000    cmp r3, #0  ; 0x0
   362d0:   0a000005    beq 362ec <LanManager::Interface()+0x50>
   362d4:   e7943005    ldr r3, [r4, r5]
   362d8:   e7940007    ldr r0, [r4, r7]
   362dc:   e5934000    ldr r4, [r3]
EN

回答 1

Stack Overflow用户

发布于 2015-12-04 04:58:09

我将在这里尝试一点启示,但为了更深入,您可能想看看ARM或逆向工程中的组装编程的文本。

您正在查看LanManager::Interface的反汇编。是的,0003629c是函数指针本身的值。你的三栏看起来像:

地址-操作码

_init是您解压缩的文件中的另一个符号。看起来有点奇怪的是,LanManager::Interface会分支到某个位置--从另一个函数开始到整个页面。

当二进制代码被删除,而objdump试图确定地址的符号名时,它会一直向后扫描,直到最终找到一个。很可能_init只是一个入口点,我忘记了编译器在我头上发出的名称。

您可以在gdb中穿插,并使用(gdb) disas *0x119ec分解特定地址。但是你从来没有说过你最初看到的是什么样的撞车.如果你写了一个在库调用中死去的程序,我会花更多的时间看你传入的论点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34080732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档