int main(int argc, char **argv)
{
personality(ADDR_NO_RANDOMIZE);
if (fork())
{
return 0;
}
printf("Hook me")
演習でこのコードに遭遇しました。私の推測に基づいて、これは子プロセスの ASLR を無効にするはずです。ただし、LD_PRELOAD を使用してバイナリを printf でスリープし、その時点で gdb にアタッチしました。この時点で、スタック アドレスの変化に基づいて、ASLR が有効になっているように見えることに気付きました。Aslr は、親プロセスで確実に有効になっています。
子プロセスで ASLR を無効にする必要がありますか? フォークされた子で ASLR が無効になるのを妨げているコードの何が問題になっていますか?