Я ожидаю, что из-за рандомизации адресного пространства (ALSR) процесс, разветвленный из другого процесса, будет иметь другие адреса, возвращаемые при вызове mmap
. Но, как я выяснил, это было не так. Для этого я сделал следующую тестовую программу. Все адреса, возвращаемые функцией malloc
, абсолютно одинаковы для родительского и дочернего элементов.
Обратите внимание, что malloc
для 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;
}