gpt4 book ai didi

elf - 在 DWARF 文件中,.debug_str 和 .strtab 有什么区别?

转载 作者:行者123 更新时间:2023-12-05 01:13:35 30 4
gpt4 key购买 nike

我正在与 DWARF parser 一起工作在 .debug_str 中查找字符串数据部分。在我解析的 ELF 文件中,字符串数据位于 .strtab部分。这两个部分有什么区别?两者都包含字符串,对吗?

最佳答案

What's the difference between these two sections?



他们彼此没有任何关系。

Both contain strings, right?



嗯,是。每个部分都包含字节,所以接下来你会问“ .text.data 之间有什么区别?”。
.debug_str部分包含调试字符串,这是调试所需的。 .strtab部分包含(静态)链接所需的符号名称。

运行时不需要任何部分(实际上不需要任何部分)。

why .strtab is present in final executable linked with -g (even though it won't be used for static linking anymore)?


  • .strtab通常存在于使用或不使用 -g 构建的最终可执行文件中和
  • 它的存在是为了帮助调试。考虑:
  • int foo() { abort(); }int bar() { return foo(); }int main() { return bar(); }gcc t.cstrip a.out -o a.strippedgdb -q ./a.stripped(gdb) runStarting program: /tmp/a.strippedProgram received signal SIGABRT, Aborted.0x00007ffff7a4bc37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:5656  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.(gdb) bt#0  0x00007ffff7a4bc37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56#1  0x00007ffff7a4f028 in __GI_abort () at abort.c:89#2  0x0000000000400536 in ?? ()#3  0x0000000000400544 in ?? ()#4  0x0000000000400554 in ?? ()#5  0x00007ffff7a36f45 in __libc_start_main (main=0x400546, argc=1, argv=0x7fffffffde58, init=, fini=, rtld_fini=, stack_end=0x7fffffffde48) at libc-start.c:287#6  0x0000000000400469 in ?? ()

    Not very useful, is it? Compare to unstripped binary:

    gdb -q ./a.out
    (gdb) r
    Starting program: /tmp/a.out

    Program received signal SIGABRT, Aborted.
    0x00007ffff7a4bc37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
    (gdb) bt
    #0 0x00007ffff7a4bc37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    #1 0x00007ffff7a4f028 in __GI_abort () at abort.c:89
    #2 0x0000000000400536 in foo ()
    #3 0x0000000000400544 in bar ()
    #4 0x0000000000400554 in main ()

    关于elf - 在 DWARF 文件中,.debug_str 和 .strtab 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41495151/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com