逆向工程c程序

shr*_*sva 14 c assembly reverse-engineering disassembly

如果分发了这个二进制文件,则每个c程序都转换为机器代码.由于计算机的指令集众所周知,是否可以取回C原始程序?

Fil*_*erg 17

您永远无法回到完全相同的源,因为没有与编译代码一起保存的元数据.

但是您可以从汇编代码中重新创建代码.

如果您对以下内容感兴趣,请查看本书:逆转:逆向工程的秘密.

编辑

这里有一些编译器-101,如果你用另一个单词定义编译器而不是像"编译器"那样技术性,它会是什么?

答:翻译

编译器将您编写的语法/短语转换为C编译器转换为Assembly或甚至是机器代码的另一种语言.C#代码被翻译成IL等等.

你拥有的可执行文件只是原始文本/语法的翻译,如果你想"反转它",因此"将其翻译回来",你很可能得不到你在开始时的结构.

一个更现实的例子是,如果你从英语翻译成德语,从德语翻译回英语,那么结构结构很可能会有所不同,可能会使用其他单词,但意义,背景,很可能不会改变.

编译器/翻译器也是如此,如果你从C到ASM,逻辑是相同的,它只是一种不同的阅读方式(当然还有它的优化).


Dar*_*rov 5

这取决于您对原始C程序的意思.诸如局部变量名,注释等之类的东西不包含在二进制文件中,因此无法获得与用于生成二进制文件的源代码完全相同的源代码.IDA Pro等工具可以帮助您反汇编二进制文件.