【发布时间】:2016-01-13 08:31:41
【问题描述】:
我有一个奇怪的问题。如果我使用 objdump -d 反汇编 ARM 二进制文件,它可以解析分支指令的函数(系统库)名称,例如:
8404: e581e000 str lr, [r1]
8408: e59f0028 ldr r0, [pc, #40] ; 8438 <address_of_message1>
840c: ebffffc1 bl 8318 <printf@plt>
8410: e59f0028 ldr r0, [pc, #40] ; 8440 <address_of_scan_pattern>
8414: e59f1028 ldr r1, [pc, #40] ; 8444 <address_of_read>
8418: ebffffc4 bl 8330 <scanf@plt>
841c: e59f0018 ldr r0, [pc, #24] ; 843c <address_of_message2>
所以我看到 bl 8318 会调用 printf。 当我使用 gdb 和 disas 命令时,我得到了没有函数名的反汇编(相同的代码示例),请参阅:
0x00008408 <+8>: ldr r0, [pc, #40] ; 0x8438 <address_of_message1>
0x0000840c <+12>: bl 0x8318
0x00008410 <+16>: ldr r0, [pc, #40] ; 0x8440 <address_of_scan_pattern>
0x00008414 <+20>: ldr r1, [pc, #40] ; 0x8444 <address_of_read>
0x00008418 <+24>: bl 0x8330
在 gdb 中,我只看到 0x8330 的分支。
是否也可以使用 gdb 解析函数名称?
谁能解释一下为什么 objdump 可以解析系统函数调用的名称而 gdb 不能?
【问题讨论】:
标签: gdb arm disassembly objdump