Existe um descompilador C ++? [fechadas]

116

Tenho um programa em que perdi o código-fonte C ++. Existem bons descompiladores C ++ por aí?

Já encontrei o Boomerang .

Bryan Denny
fonte
objdumppara Linux
Stypox
1
cutter.re para ótima interface gráfica e excelente descompilador
integrado

Respostas:

80

Você pode usar o IDA Pro da Hex-Rays . Normalmente, você não obterá um bom C ++ de um binário a menos que tenha compilado as informações de depuração. Prepare-se para gastar muito trabalho manual revertendo o código.

Se você não removeu os binários, há alguma esperança, pois o IDA Pro pode produzir código semelhante ao C para você trabalhar. Normalmente é muito áspero, pelo menos quando o usei há alguns anos.

David Holm
fonte
26
Para esclarecer, a IDA só dará a desmontagem. Há um add-on chamado Hex-Rays que descompilará o resto do caminho em código-fonte C / C ++, na medida do possível.
davenpcj
2
Pela minha leitura da documentação, raios hexadecimais apenas geram C como pseudo-código. Não que isso o torne inútil para descompilar C ++, você só precisa saber um pouco sobre como os compiladores convertem estruturas C ++.
Michael Anderson,
Para esclarecer um pouco mais, Disassembly é o máximo que você pode descompilar com Hex-Rays irá traduzir ASM para C ++ ASM pode ser traduzido para qualquer linguagem de programação com trabalho, pois todos os programas podem ser executados como ASM
Barkermn01
4
SNOWMAN é um bom descompilador c ++ gratuito
Inga
2
+1 para Boneco de neve, mas como outros mencionaram, mesmo um simples Hello, World torna-se praticamente ilegível depois de descompilado.
entre
25

as informações são descartadas no processo de compilação. Mesmo se um descompilador pudesse produzir o código lógico equivalente com classes e tudo (provavelmente não pode), a parte de autodocumentação se foi no código de lançamento otimizado. Sem nomes de variáveis, sem nomes de rotina, sem nomes de classe - apenas endereços.

Dustin Getz
fonte
24
"a alma" do programa se foi, apenas uma casca vazia de seu antigo eu ... "
Darshan Chaudhary
21

Sim, mas nenhum deles conseguirá produzir código legível o suficiente para valer o esforço. Você passará mais tempo tentando ler o código-fonte descompilado com blocos assembler dentro do que reescrevendo seu aplicativo antigo do zero.

m_pGladiator
fonte
6

Não vi nenhum descompilador que gerasse código C ++. Eu vi alguns experimentais que fazem uma tentativa razoável de gerar código C, mas eles tendem a depender da correspondência dos padrões de geração de código de um compilador específico (isso pode ter mudado, já faz algum tempo desde a última vez que olhei para isso ) É claro que qualquer informação simbólica desaparecerá. Google para "descompilador".

Ferruccio
fonte
4

Dependendo do tamanho e da qualidade do código original, pode valer a pena começar novamente em sua linguagem favorita (que ainda pode ser C ++) e aprender com os erros cometidos na última versão. Alguém uma vez não disse sobre escrever um para jogar fora?

Nota: Obviamente, se este for um produto enorme, pode não valer a pena.

Harriyott
fonte
24
Joel é um grande colunista, mas às vezes errado. E então há momentos em que ele é citado errado. Como aqui, já que a questão gira em torno da perda do código-fonte. O artigo de Joels explica por que o código-fonte é valioso.
MSalters
5
Alguém uma vez não disse sobre escrever um para jogar fora? Sim, e ele mudou de ideia davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] em 1975, aconselhei os programadores a “jogar fora a primeira versão” e construir uma segunda 1. Na edição do 20º aniversário, percebi que a iteração incremental constante é uma abordagem muito mais sólida
ta.speot.is