0
.debug_str
セクションの文字列データを検索するDWARF parserと一緒に作業しています。私が解析しているELFファイルでは、文字列データは.strtab
セクションにあります。これら2つのセクションの違いは何ですか?どちらも文字列を含んでいますよね?DWARFファイルでは、.debug_strと.strtabの違いは何ですか?
.debug_str
セクションの文字列データを検索するDWARF parserと一緒に作業しています。私が解析しているELFファイルでは、文字列データは.strtab
セクションにあります。これら2つのセクションの違いは何ですか?どちらも文字列を含んでいますよね?DWARFファイルでは、.debug_strと.strtabの違いは何ですか?
これら2つのセクションの違いは何ですか?
これらはお互いに関係ありません。
どちらも文字列を含んでいますか?
セクションにはすべてバイトが含まれているので、次に「.text
と.data
の違いは何ですか?」と尋ねられます。
.debug_str
セクションには、デバッグに必要なデバッグ文字列が含まれています。 .strtab
セクションには、(静的な)リンクに必要なシンボル名が含まれています。
実行時にどちらのセクション(実際にははセクション)も必要ありません。
なぜ.strtabは、最終的な実行ファイルに-gでリンクされているのですか(スタティックリンクにはもう使用されません)。
.strtab
それはデバッグに役立つために、本の最後で構築された実行可能ファイルまたは-g
なしとint foo() { abort(); } int bar() { return foo(); } int main() { return bar(); } gcc t.c strip a.out -o a.stripped gdb -q ./a.stripped (gdb) run Starting program: /tmp/a.stripped Program received signal SIGABRT, Aborted. 0x00007ffff7a4bc37 in __GI_raise ([email protected]=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 ([email protected]=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 ??()
ない非常に便利な、ありますか?
gdb -q ./a.out
(gdb) r
Starting program: /tmp/a.out
Program received signal SIGABRT, Aborted.
0x00007ffff7a4bc37 in __GI_raise ([email protected]=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 ([email protected]=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()
完全性のために、.strtabが '-g'でリンクされた最終実行ファイルに存在するのはなぜですか(静的リンクにはもう使用されません)。 – yugr
@yugr答えを更新しました。 –