Infelizmente perdi meu código fonte e só tenho o arquivo de saída criado com o gcc no linux e não tenho acesso ao meu pc agora. Existe alguma maneira de converter o arquivo de saída para o arquivo de origem (em c no linux)?
Infelizmente perdi meu código fonte e só tenho o arquivo de saída criado com o gcc no linux e não tenho acesso ao meu pc agora. Existe alguma maneira de converter o arquivo de saída para o arquivo de origem (em c no linux)?
Respostas:
Então você tinha uma vaca, mas inadvertidamente a converteu em hambúrguer e agora quer sua vaca de volta.
Desculpe, mas não funciona dessa maneira.
Simplesmente restaure o arquivo de origem dos seus backups.
Ah, você não tinha backups. Infelizmente, o universo não dá uma pausa para isso.
Você pode descompilar o binário. Isso não fornecerá seu código-fonte, mas fornecerá algum código-fonte com o mesmo comportamento. Você não receberá os nomes das variáveis, a menos que seja um binário de depuração. Você não terá exatamente a mesma lógica, a menos que tenha compilado sem otimizações. Obviamente, você não receberá comentários.
Eu usei o Boomerang para descompilar alguns programas, e o resultado foi mais legível que o código da máquina. Eu não sei se é a melhor ferramenta lá fora. De qualquer forma, não espere milagres.
Várias ferramentas são comuns na engenharia reversa de um executável.
Na maioria dos casos que eu vi, o código precisava ser reescrito do zero, mantido como um programa em linguagem assembly ou reconstituído reaplicando as solicitações de alteração em uma versão mais antiga.
O que você quer fazer é chamado "descompilar". Existem muitos descompiladores por aí e não é prático abordá-los aqui.
No entanto, como uma observação geral: A conversão da fonte C para o código de máquina executável está com perdas. Por exemplo:
É raro o código ser compilado conforme escrito. A maioria dos compiladores hoje em dia altera drasticamente seu código para otimizá-lo. Portanto, quando você descompila, o compilador pode apenas adivinhar como deve ser o código-fonte, não tem como saber qual era o seu código, porque acabou. Se o descompilador for bom, o código que você obtiver será, pelo menos, compilável novamente em um executável equivalente e, em seguida, você poderá começar a refatorá-lo lentamente para ser legível. Mas o mais provável é que o descompilador produza um código de espaguete absolutamente ilegível, e será uma enorme dor de cabeça decifrá-lo. Às vezes, pode acabar sendo menos trabalhoso reescrever o programa do zero.