我希望由于地址空间布局随机化(ALSR),从另一个进程派生的进程在调用mmap
. 但我发现,事实并非如此。为此,我制作了以下测试程序。返回的所有地址malloc
对于父母和孩子来说都是完全相同的。请注意malloc
for cl1 , cl2 , pl1 , pl2内部使用mmap
,因为它们是大块。
所以,我的问题是,为什么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;
}