LD opção para carregamento determinístico do programa e objetos compartilhados?

1

Estou trabalhando em um problema incomum em um BeagleBone Black. A parte "incomum" está pisando na depuração causa um SIGILL que não estava presente anteriormente.

Os endereços estão circulando entre execuções devido a PIC e PIE. Eu quero forçar o LD a realizar uma carga determinística. A ideia é fazer algo como:

LD_BASE_ADDRESS=0x1000 ./test.exe

Ou talvez:

LD_ADDRESS_SEED=0x0000 ./test.exe

E, em seguida, obtenha resultados reproduzíveis, como quando um gerador de números aleatórios é propagado com a mesma semente.

Eu verifiquei a página de manual ld.so(8) , mas não o fiz. t ver a opção. LD_USE_LOAD_BIAS parece próximo, mas não está claro para mim se ele fornece o comportamento determinístico.

Como eu digo ao LD para carregar deterministicamente os programas e todos os seus objetos compartilhados?

    
por jww 12.08.2017 / 14:53

1 resposta

2

Isso não é controlado pelo vinculador, é controlado pelo kernel. Você pode desativar o ASLR usando randomize_va_space :

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

Para reativá-lo:

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

Você também pode desativá-lo para um único processo usando setarch para aplicar a personalidade apropriada:

setarch $(uname -m) -R command

executará command sem ASLR.

    
por 12.08.2017 / 16:31

Tags