Com um executável binário e um /proc/pid/maps de um processo que é gerado a partir dele, quero mapear um endereço de instrução de tempo de execução neste momento (pode ser recuperado pelo gdb ou qualquer depurador) para o endereço de instrução "estático" correspondente (pode ser recuperado pelo objdump, ida ou qualquer desmontador) no executável binário.
Por exemplo, para executáveis PIE ou bibliotecas compartilhadas, isso é fácil:
xxxx-yyyy r-xp 0000000 ... path/to/mysharedlibrary.so
Então, para o endereço de tempo de execução zzzz
, seu endereço estático correspondente pode ser calculado por
static-address = zzzz - xxxx
O endereço calculado pode ser verificado consultando objdump ou IDA.
Entretanto, para executáveis não PIE ou vinculados estaticamente, a regra acima não pode ser aplicada:
400000-yyyy r-xp 000000 ... path/to/executable
Não precisamos substituir o endereço base pelo endereço de tempo de execução; o endereço de tempo de execução é o mesmo que o endereço estático.
Gostaria de saber qual é a regra exata para calcular o endereço correto, já que as duas regras acima são baseadas completamente na experiência.