如何在elf中解析函数名称

时间:2019-04-20 19:30:26

标签: elf relocation

我想编写一个elf解析器并反汇编.text部分,所以我解析了elf文件,并将.text节交给了顶点,以便为我反汇编。不幸的是,capstone不能解析函数名称。

根据我的elf文件中的以下汇编代码,有一个我要解析其名称的函数的调用。

call 8048380

我检查了.symtab节,但需要重定位的函数(如printf)在表中的地址为0,因为直到加载时它们的地址都是未知的。

那我该如何解析它的名字?

1 个答案:

答案 0 :(得分:0)

  

我检查了.symtab节,但是需要重定位的函数(例如printf)

您感兴趣的功能(地址为0x8048380的功能)不是{em> ,而不是printf,并且不需要要求运行时重定位。

不清楚您的问题如何是如何获得此反汇编的。

call 8048380

您可能需要使用更好的工具,或者您将工具指向剥离的二进制文件(不要执行那个)。

以下是合理输出应如下所示的示例:

int foo() { return 42; }
int main() { return foo(); }

$ gcc t.c
$ gdb -q ./a.out
(gdb) disas main
Dump of assembler code for function main:
   0x08048410 <+0>: push   %ebp
   0x08048411 <+1>: mov    %esp,%ebp
   0x08048413 <+3>: call   0x8048406 <foo>  // GDB resolves the address
   0x08048418 <+8>: pop    %ebp
   0x08048419 <+9>: ret    
End of assembler dump.