Я ожидаю, что из-за рандомизации структуры адресного пространства (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;
}