ASLRがオンになっているのに、__ libc_start_mainのアドレスがGDB内で常に同じであるのはなぜですか?


16
Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/firstlove/projects/org-ioslide/example/a.out 

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/firstlove/projects/org-ioslide/example/a.out 

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) Quit
(gdb) quit
A debugging session is active.

        Inferior 1 [process 16372] will be killed.

Quit anyway? (y or n) y
firstlove-pc% cat /proc/sys/kernel/randomize_va_space
2

IIUC、ASLRはのアドレスを含むすべてのアドレスをランダム化する必要libc.soがありますが、のアドレス__libc_start_main()は常に0x00007ffff7de8060私のLinuxマシン上にあることがわかりました。なぜですか?なにが問題ですか?


1
アドレス空間のランダム化は、関数アドレスまたは変数のアドレスのみをランダム化しますか?
rubenvb

同じgdbセッションでプログラムを再実行するのではなく、アドレスをチェックする新しいgdbセッションを開始した場合にも同じ結果が表示されますか?
ジョンボリンジャー

@JohnBollinger私は間違いなく試してみました
陳力

回答:


24

gdbでプログラムを実行すると、gdbアドレスのランダム化を無効にしてデバッグを支援します。次のコマンドを使用してそれを有効にできます(プログラムの次回の実行から有効になります)。

set disable-randomization off
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.