gdbでglibcのシンボルが読み込めない場合の対策
Temporary breakpoint 1, 0x0000555555555149 in main ()
(gdb) p &main_arena
No symbol table is loaded. Use the "file" command.
gdb使っててこんな感じになってモヤることが長く続いた。
調べたところ、使っているlibcに対応するデバッグ情報をインストールすればよいとのこと。
└──╼ $/lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Debian GLIBC 2.31-13+deb11u3) stable release version 2.31.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 10.2.1 20210110.
libc ABIs: UNIQUE IFUNC ABSOLUTE
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.
自分が使っているライブラリはlibc6のようなので、
sudo apt install libc6-dbg
で早速インストールを行う。これでmain_arenaやglobal_max_fastのオフセットが得られるぜとワクワクしていたが、やはりNo symbol table…のメッセージが出る。
ネットで検索したところ、デバッグ情報が位置するディレクトリをgdbにセットする必要があるらしい。
set debug-file-directory /usr/lib/debug
これを.gdbinitに書いておくことで、glibcのシンボル情報を得られるようになった。
Temporary breakpoint 1, 0x0000555555555149 in main ()
(gdb) p &global_max_fast
$1 = (size_t *) 0x7ffff7fa5ec8 <global_max_fast>
やったぜ。