
BeagleBone Blackの珍しい問題を解決しています。 「異常な」部分はデバッグの理由で段階的に実行され、SIGILL
以前は存在しませんでした。
PIC と PIE により、アドレスは実行間で移動されます。 LDに決定的なロードを実行させるように強制したいと思います。アイデアは、次のことを行うことです。
LD_BASE_ADDRESS=0x1000 ./test.exe
または:
LD_ADDRESS_SEED=0x0000 ./test.exe
次に、乱数発生器に同じシードが適用されたかのように再現可能な結果を得る。
確認しましたld.so(8)
マニュアルページに対応するオプションは表示されません。LD_USE_LOAD_BIAS
似ているようですが、決定的な動作を提供するかどうかはわかりません。
プログラムとすべての共有オブジェクトを決定論的にロードするようにLDにどのように指示しますか?
答え1
これはリンカーではなくカーネルによって制御されます。以下を使用してASLRを無効にできます。randomize_va_space
:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
再度有効にするには:
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
setarch
適用された適切な属性を使用して、個々のプロセスに対してこれを無効にすることもできます。
setarch $(uname -m) -R command
ASLRなしで実行されますcommand
。