c - 逆向工程c程序

标签 c assembly reverse-engineering disassembly

如果分发了此二进制文件,则每个 C 程序都将转换为机器代码。既然计算机的指令集是众所周知的,那么是否有可能找回C原程序呢?

最佳答案

您永远无法返回到完全相同的源,因为没有关于已编译代码保存的元数据。

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

如果您对这些东西感兴趣,请查看这本书:Reversing: Secrets of Reverse Engineering .

编辑

Some compilers-101 here,如果你要用另一个词来定义一个编译器,而不像“编译器”那样技术性,它会是什么?

回答:翻译器

编译器将您编写的语法/短语翻译成另一种语言,C 编译器将其翻译成汇编代码甚至机器代码。 C# 代码被翻译成 IL 等等。

您拥有的可执行文件只是原始文本/语法的翻译,如果您想“反转它”,因此“将其翻译回来”,您很可能不会获得与开始时相同的结构。

一个更真实的例子是,如果你从英语翻译成德语,再从德语翻译回英语,句子结构很可能会有所不同,可能会使用其他词,但意义、上下文很可能不会已经改变了。

如果您从 C 转到 ASM,编译器/翻译器也是如此,逻辑是相同的,只是读取它的方式不同(当然还有它的优化)。

关于c - 逆向工程c程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2272581/

相关文章:

android - android Room 数据库存储敏感数据安全吗?

Java BigInteger 内存不足,可能来自长转换

c - 在 C 中连接两个字符串的安全方法

c - 尝试在 Mac OSX 的 OpenGL 中使用鼠标外观相机

c - 为什么 a*b/c 而不是 a*(b/c) 在 AVR 上提供 3 倍大的程序大小?

java - htc android 应用程序的逆向工程期间

c - pthread_cond_wait() 同时唤醒两个线程

c - GCC 的 MSVC __asm 关键字是什么?

assembly - 为什么我使用 NASM 获得的操作码不能被 bochs i386 CPU 正确执行?

c++ - 如何定位一段时间内的某一系列汇编指令?