2016-07-03 4 views
2

windbgを使用している私のWindows 10マシンでプログラムを実行し、最初のブレークポイントでブレークさせます。スタックの物理的な底部のアドレス(TEBのstackBase)を取得し、rspの値をntdll!LdrInitializeThunkから引きます。これは、スタックの「論理的な下」ことを示唆しているなど、あなたがntdll!RtlUserThreadStartと同じことを行う場合は、同様の結果を得るスタックの「論理ボトム」と「物理ボトム」のオフセットがランダムなのはなぜですか?

0x600 
0x9f0 
0xa40 
0x5d0 
0x570 

:私はちょうど同じプログラムで、この5回をした、と私は5つの異なる値を得ました多少無作為化されている。何故ですか?これはスタックの中に「ミニASLR」のようなものがありますか?これはどこに文書化されていますか?

+1

誰かが詳細な回答を期待していましたが、FWIWプロセスの起動は本質的に予測不可能なようです。 Process Monitorを使用して特定の実行可能ファイルが起動したときに何が起こるのかを見ると、それは時々、ランダムに見えることがあります。私はなぜそれが本当にわからない。 –

答えて

1

VistaのASLR(ASLRはVistaで導入されました)のためにグーグルが見つかった後、私はthis documentをSymantecから見つけました。 5ページで、それは私の質問は、約(強調鉱山)である現象に言及:

スタックが配置された後に、初期スタックポインタは、はさらにランダム漸減 量によってをランダム化しています。初期オフセットは

だから、それが(この方法は、それが難しくなって、セキュリティ上の理由から、意図的に行うのようだ[...]半ページ(2048バイト)までのように選択されていますが、自然に 整列アドレスに限定されていますスタックベースに相対的な固定オフセットにあるもののアドレスを把握することができます)。

私は誰かがより洞察的な答えを提供できることを願って、この質問をしばらく開いたままにしておきます。誰もがしなければ、私はこの答えを受け入れるだろう。

関連する問題