OS X 10.9 (Mavericks) では、文書化されていない属性を呼び出して渡すことでプロセスを起動すると、単一プロセスのアドレス空間レイアウトのランダム化を無効にすることができます。このような:posix_spawn()
0x100
extern char **environ;
pid_t pid;
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
posix_spawnattr_setflags(&attr, 0x100);
posix_spawn(&pid, argv[0], NULL, &attr, argv, environ);
(これは、 Apple の GDB ソースからリバース エンジニアリングされたものです。)
このような文書化されていない機能の問題点は、予告なしに消えてしまう傾向があることです。このスタック オーバーフローの回答によると、動的リンカーdyld
は環境変数を参照するために使用されますDYLD_NO_PIE
が、これは 10.9 では機能しません。同様に、静的リンカは明らかに--no-pie
オプションを使用していましたが、これはもはや当てはまりません。
ASLRを無効にする文書化された方法はありますか?
(ASLR を無効にする必要があるのは、アドレス ベースのハッシュ テーブルやBIBOP ベースのメモリ マネージャーなど、動作がオブジェクトのアドレスに依存するコードのテストおよびデバッグ時に再現性を確保するためです。)