2017-10-13 13 views
0

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に正しい位置にシンボルを読み込ませるにはどうしたらいいですか?

+0

インターネットは最良の方法は、一時的にちょうど@ttsiodrasとして 'kaslr'を無効にすることであると述べています前記。 –

答えて

1

私の謙虚な意見では、リブートするたびにシンボルが "踊る"ことなく、デバッグ用のカーネルは十分に難しいです。それはあなたのカーネルにnokaslrを渡す検討するかもしれない価値がある、と言うことです

- あなたがデバッグしている、少なくともながら...

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューより](/レビュー/低品質の投稿/ 17802984) – Bart

+0

@Bart:私は謙虚に同意しません。この質問は、IMHOのXY問題のケースでした - ですから、根本的な問題を解決する答えを提供しました。 – ttsiodras

関連する問題