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