从目标文件获取源代码

时间:2010-02-27 09:01:15

标签: c

有没有办法在C中使用目标文件来获取源代码?

例如,我有一个源代码simple.c

  

cc simple.c

现在我有一个a.out(目标文件)。通过这个a.out我能否得到消息来源?

  

simple.c的代码

5 个答案:

答案 0 :(得分:46)

没有。将奶牛变成汉堡包相当容易。把汉堡变成活牛,有点困难。

答案 1 :(得分:10)

有许多有用的工具可以从您的可执行文件中检索信息。他们都没有能够回复原始源代码(正如其他一些用户指出的那样,C不可能),但你可以尝试一些逆向工程工具。我首选的是:

  • Objdump(“binutils”包的一部分)
  • hte(debian将其打包为“ht”)

使用第一个,您可以实际获得所有导出的符号及其相对可执行代码的组装(显然这仅适用于.text部分)。第二个目标是与intel架构协同工作,但您将能够分析每个可执行文件并获取有关ELF部分和符号的信息。

答案 2 :(得分:1)

没有

通过逆向工程(读取反汇编)可以重建逻辑,但变量名称,注释等通常会丢失。

答案 3 :(得分:1)

您要查找的程序的单词是“disassembler”(将a.out中的机器语言转换为汇编语言)和“decompiler”(将汇编语言转换为C语言,如说明通过Dacav,它变得更加困难,结果永远不会令人满意。)

但是使用带有这些词语的Web搜索引擎可能会产生结果。

答案 4 :(得分:0)

如果您使用的是Linux,请使用gdb

$ gdb a.out

(gdb)list