私は単純なCプログラムを作成し、それをGDBにロードするたびにプログラム命令に割り当てられた同じメモリアドレスを見ます。たとえば、関数はwhat()
常にメモリ位置0x000055555555472dにロードされます。実際、スタックは毎回まったく同じです(スタックの内容だけでなく、rspが指すメモリアドレスも同じです)。
「/proc/sys/kernel/randomize_va_space」を0に設定してLinuxでASLRを無効にできることを知っていますが、私のDebianシステムでは値は2です。
root@Sierra ~ % cat /proc/sys/kernel/randomize_va_space
2
ASLRの私の理解によると、これらのアドレスは実行ごとにランダムに指定する必要があります。私の質問はなぜこれが起こるのですか?私は何が間違っていましたか?
ベストアンサー1
デフォルトでは、gdbはLinuxでアドレス空間のランダム化を無効にして、kernel.randomize_va_space
sysctl変数が持つことができるすべての値をオーバーライドします。
gdbコマンドset disable-randomization off
この機能はオフになり、gdbによって生成されたすべての後続のデバッグターゲットでは、値に応じてASLRがオンまたはオフになりますkernel.randomize_va_space
。