Voltar do código de máquina para o idioma de origem é chamado de descompilação . A desmontagem (do código da máquina para a linguagem de montagem) pode ser feita com objdump -d
; objdump
faz parte do pacote padrão binutils de ferramentas de desenvolvimento. Embora um descompilador possa ser uma ferramenta útil no processo, descompilar o código com a intenção de modificá-lo e recompilá-lo raramente é uma maneira produtiva de modificar o comportamento de um programa. Você gastará muito tempo recuperando o código-fonte utilizável e esse código-fonte não estará em nenhuma forma sustentável.
O primeiro passo para entender como um programa funciona é ferramentas de depuração. Use ferramentas como strace
e ltrace
para ver quais chamadas de sistema e bibliotecas o programa faz. Use um depurador como o Gdb para percorrer as instruções do programa.
Se você tiver muita sorte, o comportamento que você procura pode ser alcançado com um arquivo de configuração ou uma variável de ambiente. O próximo passo é conectar-se ao programa e substituir algumas funções por sua própria versão, usando LD_PRELOAD
para linkar uma biblioteca que define sua própria versão dessas funções .
A descompilação é geralmente útil para entender os algoritmos usados por um programa, por exemplo, para escrever outro programa com um protocolo de rede ou formato de arquivo compatível. Muitas vezes, não é uma ferramenta muito útil quando seu objetivo é modificar o comportamento do programa.