【问题标题】:How to resolve function name in elf如何在elf中解析函数名
【发布时间】:2019-04-20 19:30:26
【问题描述】:

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

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

call 8048380

我检查了 .symtab 部分,但是像 printf 这样需要重定位的函数在表中的地址为 0,因为它们的地址在加载之前是未知的。

那我要怎么解决它的名字呢?

【问题讨论】:

    标签: elf relocation


    【解决方案1】:

    我检查了 .symtab 部分,但需要重新定位的函数,如 printf

    您感兴趣的函数(地址为0x8048380 的函数)不像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.
    

    【讨论】:

    • 我想写一个 elf 解析器并反汇编 .text 部分,所以我解析了 elf 文件并将 .text 部分交给 capstone 为我反汇编。不幸的是,capstone 不解析函数名称。
    • @Kavian 如果你将.text 喂给capstone,除了你自己之外没有其他人要为你的困难负责——它还需要.symtab.strtab 来解码符号.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多