0
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 が無効になるのを妨げているコードの何が問題になっていますか?

4

1 に答える 1

1

親の (ASLR が有効な) アドレス空間の正確なコピーを作成するため、forkこれは機能しません。代わりにfork試してみてください。うまくいくはずです。exec

于 2016-08-12T03:28:56.043 に答える