Address Space Layout Randomization (ALSR) により、別のプロセスから fork されたプロセスは、 を呼び出したときに異なるアドレスが返されると予想されますmmap
。しかし、私が知ったように、そうではありませんでした。そのために以下のテストプログラムを作成しました。によって返されるすべてのアドレスはmalloc
、親と子でまったく同じです。malloc
for cl1、cl2、pl1、pl2mmap
は大きなブロックであるため、内部で使用されることに注意してください。
それで、私の質問は、mmap
ALSR が存在する場合でも異なるアドレスを返さないのはなぜですか。おそらく、ここでのランダム化のシードは、元のプロセスとフォークされたプロセスで同じであるためです。それとも他に理由がありますか?
int main()
{
pid = fork();
if (pid == 0) // child
{
void * c1 = malloc( 4096 );
void * c2 = malloc( 4096 );
void * cl1 = malloc( (long)512e3 ); // internally uses mmap
void * cl2 = malloc( (long)512e3 ); // internally uses mmap
printf( "c1 = %p, c2 = %p, cl1 = %p, cl2 = %p!\n", c1, c2, cl1, cl2 );
}
else
{
void * p1 = malloc( 4096 );
void * p2 = malloc( 4096 );
void * pl1 = malloc( (long)512e3 ); // internally uses mmap
void * pl2 = malloc( (long)512e3 ); // internally uses mmap
printf( "p1 = %p, p2 = %p, pl1 = %p, pl2 = %p!\n", p1, p2, pl1, pl2 );
}
return 0;
}