【问题标题】:How find find offset of a function using gdb?如何使用 gdb 查找函数的偏移量?
【发布时间】:2020-05-04 03:28:07
【问题描述】:

我有一个包含 DWARF 信息的共享对象文件。我想找到一个函数的偏移量。我的堆栈跟踪格式为mangledFuncName + 0x123。我想找到对应框架的代码行。理想情况下,我想在 .so 文件的所有偏移量与偏移量/偏移范围的文件名/行号之间建立某种映射。这可能与gdb有关吗?

【问题讨论】:

    标签: gdb dwarf


    【解决方案1】:

    我想找到一个函数的偏移量。

    readelf -Ws foo.so | egrep ' function\W'
    

    例如:

    readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | egrep ' open\W'
      1782: 00000000000eb430   294 FUNC    WEAK   DEFAULT   14 open@@GLIBC_2.2.5
    

    open 的值为0xeb430

    我的堆栈跟踪格式为 mangledFuncName + 0x123。我想找到对应框架的代码行

    最简单的解决方案是计算实际地址(将0x123添加到上面提取的mangledFuncName的地址),并使用addr2line -fe foo.so $addr

    例如,将open+0x123 映射到源文件/行会产生:

    addr2line -fe /lib/x86_64-linux-gnu/libc.so.6 0xeb483
    __libc_open64
    /build/glibc-oCLvUT/glibc-2.29/io/../sysdeps/unix/sysv/linux/open64.c:48 (discriminator 1)
    

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 2020-06-11
      • 2017-03-07
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多