KASLRを有効にすると、シンボルファイルと実際のシンボル位置の間にオフセットがあります。GDBはKASLRを有効にしてもカーネルシンボルを正しくロードできません
% cat /proc/kallsyms| grep '\<jiffies_64\>'
ffffffff86805000 D jiffies_64
% objdump -t /usr/lib/debug/boot/vmlinux-4.13.0-1-amd64 | grep '\<jiffies_64\>'
ffffffff81c05000 g O .data 0000000000000008 jiffies_64
.textセクションの場所を見つけたので、私は正しくシンボルファイルをロードすることができます。
% cat /proc/kallsyms | grep '\<_text\>'
ffffffff85c00000 T _text
しかし、私は補正場所でシンボルファイルロードされた場合でも:
% sudo gdb -c /proc/kcore
GNU gdb (Debian 8.0-1) 8.0
(gdb) add-symbol-file /usr/lib/debug/boot/vmlinux-4.13.0-1-amd64 0xffffffff85c00000
add symbol table from file "/usr/lib/debug/boot/vmlinux-4.13.0-1-amd64" at
.text_addr = 0xffffffff85c00000
(y or n) y
Reading symbols from /usr/lib/debug/boot/vmlinux-4.13.0-1-amd64...done.
GDBをまだ間違ったシンボル位置を与える:
(gdb) p &jiffies_64
$1 = (u64 *) 0xffffffff81c05000 <jiffies_64>
GDBに正しい位置にシンボルを読み込ませるにはどうしたらいいですか?
インターネットは最良の方法は、一時的にちょうど@ttsiodrasとして 'kaslr'を無効にすることであると述べています前記。 –