1

ASLRがIOSで役割を果たし、ヒープの開始アドレスをランダム化する場合、現在のプロセスと他のプロセスのヒープの開始アドレスをpidから取得するにはどうすればよいですか?

論文に付属のaslr.c:「iOSkernel Exploitation」では、現在のプロセスのヒープコードの開始アドレスを取得しようとしているようです。

void* heap = malloc(0);

コードをテストしたところ、戻り値がすべて同じではないことがわかりました。ISO / IEC 9899:TC2(つまり、C99標準)によると、§7.20.3は次のように述べています。

要求されたスペースのサイズがゼロの場合、動作は実装定義です。nullポインターが返されるか、返されたポインターがオブジェクトへのアクセスに使用されないことを除いて、サイズがゼロ以外の値であるかのように動作します。 。

4

1 に答える 1

1

ASLRがIOSで役割を果たし、ヒープの開始アドレスをランダム化する場合、

します。

次に、現在のプロセスと他のプロセスのヒープの開始アドレスをpidから取得する方法は?

できません(少なくとも簡単ではありません。GDBをアタッチしてglibc-internal変数を調べる以外の方法は考えられません__curbrk)。

コードをテストしましたが、戻り値がすべて同じではないことがわかりました

なぜそれらが同じであると期待したのですか?

ASLRが無効になっている単一のmalloc(0)実行可能ファイルでは、 insidemainは同じ値を返します。ASLRを有効にすると、異なる値が得られます。異なる実行可能ファイルを作成すると、異なる値が得られます。

于 2012-04-16T02:33:08.273 に答える