![결정론적 로더 및 공유 객체를 위한 LD 옵션이 있습니까?](https://linux55.com/image/116075/%EA%B2%B0%EC%A0%95%EB%A1%A0%EC%A0%81%20%EB%A1%9C%EB%8D%94%20%EB%B0%8F%20%EA%B3%B5%EC%9C%A0%20%EA%B0%9D%EC%B2%B4%EB%A5%BC%20%EC%9C%84%ED%95%9C%20LD%20%EC%98%B5%EC%85%98%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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
.