결정론적 로더 및 공유 객체를 위한 LD 옵션이 있습니까?

결정론적 로더 및 공유 객체를 위한 LD 옵션이 있습니까?

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.

관련 정보