Existe alguma esperança de um decompiler que iria converter um programa executável em C / C + + código?

Este FAQ resposta é um trecho de Snippets por Bob Stout.

Não segure a respiração. Pense nisso ... Para um decompiler para funcionar correctamente, quer 1) cada compilador teria de gerar código substancialmente idênticos, mesmo com a plena otimização ligado, ou 2), teria de reconhecer a produção individual de cada compilador código do gerador.

Se o primeiro caso viesse a ser correto, não haveria mais necessidade de compilador de referência, uma vez que cada um teria o mesmo trabalho. Para o segundo caso a ser verdade implicaria em imensamente complexo programa que tinha de mudar com cada novo compilador libertação.

Então, o que cerca decompilers específicas para determinados compiladores - disse um decompiler concebido para funcionar apenas no código gerado por, digamos, BC + + 4.5? Isto fica-nos de volta para a otimização questão. Código escrito para a clareza e inteligibilidade é muitas vezes ineficiente. Código escrito para o máximo desempenho (velocidade ou tamanho), é muitas vezes críptica (na melhor das hipóteses!) Junte-se a isto o facto de todos os compiladores modernos têm uma multiplicidade de otimização de parâmetros de controlo que permitem a otimização técnicas e que a evitar. A questão de fundo é que, por um razoavelmente grande e complexo, fonte módulo, você pode obter o compilador para produzir um número de diferentes módulos objeto simplesmente alterando sua otimização interruptores, para que o seu decompiler terá também de ser um deoptimizer que podem automagicamente reconhecer que otimização estratégias foram ativados em compilar tempo.

Vamos simplificar mais e especificar que apenas pretende um apoio específico compilador e quiser descompilar o mais lógico para o código fonte sem tentar interpretar a otimização. E então? Um bom otimizador pode e será substancialmente internals de reescrever o seu código, assim que você sair do seu decompiler serão, não apenas críptica, mas em muitos casos, crivada de goto declarações e outros não, não é de boa prática codificação. Neste ponto, você tem decompiled fonte, mas o que é bom?

Também observe atentamente a minha referência à fonte módulos. Uma característica de C é que ela se torna em grande parte a não ser discriminado em ilegível facilmente sustentável fonte módulos (. C arquivos). Como será o decompiler lidar com isso? Ele poderia tentar descompilar o programa inteiro em alguns mamute função main (), perdendo todas as modularidade, ou pode tentar colocar cada um em sua própria função chamado arquivo. A primeira maneira seria inutilizável gerar o caos ea segunda seria executado em problemas quando a fonte original, inclinar-se arquivos com múltiplas funções utilizando dados estáticos e / ou uma ou mais funções chamar uma ou mais funções estáticas. Um decompiler poderia tornar os dados estáticos e / ou funções globais, mas apenas à custa ou legibilidade (o que já seria inaceitável).

Por último, lembre-se que as aplicações comerciais código muitas vezes o mais difícil ou tempo-críticos funções na montadora que pode revelar-se quase impossível para um descompilar em C equivalente.

Como eu disse, não segure a respiração. Como a tecnologia melhora a decompilers onde pode tornar-se mais viável, otimizadores e linguagens (C + +, por exemplo, seria uma língua muito mais dura do que a decompile C) também conspiram para torná-las menos prováveis.

Durante anos Unix pedidos foram distribuídos em forma envolta fonte (máquina humana, mas não lido - todos os comentários e branco removidas, variáveis todos os nomes na forma OOIIOIOI, etc), que tem sido um bem de meios adequados de protecção dos direitos do autor. É muito improvável que decompiler saída seria ainda como lidos como envolta fonte.

Atualização: Decompiler tecnologia ainda é muito difícil, mas avanços significativos foram feitos desde que este foi escrito.

Leia O que é um decompiler? Para obter informações actualizadas sobre decompiler projectos.



Top 5 Free Networking Ferramentas

Bookmark Existe alguma esperança de um decompiler que iria converter um programa executável em C / C + + código?

Latest Blog Posts


Inglês Inglês Alemão Alemão Espanhol Espanhol Francês Francês Italiano Italiano Português Português Russo Russo Holandês Holandês
Grego Grego Hindi Hindi Japonês Japonês Coreano Coreano Chinês Chinês Chinês (simplificado) Chinês (simplificado) Árabe Árabe

Copyright 2009 Tech-FAQ. Todos os direitos reservados. Política de Privacidade.