从目标文件获取源代码
有没有办法通过在C中使用目标文件来获取源代码?
例如,我有一个简单的源代码
cc simple.c
现在我有一个a.out(目标文件)。 通过这个a.out我能否得到消息来源?
simple.c的代码
有许多有用的工具可以从可执行文件中检索信息。 他们都没有能够回复原始源代码(正如其他一些用户指出的那样,C不可能),但你可以尝试一些逆向工程工具。 我首选的是:
- Objdump(“binutils”包的一部分)
- hte(debian打包为“ht”)
使用第一个,您可以实际获得所有导出的符号及其相对可执行代码的组装(显然这仅适用于.text
部分)。 第二个目标是使用英特尔架构,但您将能够分析每个可执行文件并获取有关ELF部分和符号的信息。
没有。将牛变成汉堡包相当容易。 把汉堡变成活牛,有点困难。
没有。
通过逆向工程(读取反汇编),可以重建逻辑,但变量名称,注释等通常会丢失。
您正在寻找的程序的单词是“ 反汇编程序 ”(将a.out中的机器语言转换为汇编语言)和“ 反编译器 ”(将汇编语言转换为C语,正如Dacav所解释的那样,它要困难得多,结果永远不会令人满意)。
但是使用带有这些单词的Web搜索引擎可能会产生结果。
如果您使用的是Linux,请使用gdb
$ gdb a.out
(gdb) list