从目标文件获取源代码

有没有办法通过在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