Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从对象文件获取源_C - Fatal编程技术网

C 从对象文件获取源

C 从对象文件获取源,c,C,有没有办法通过在C中使用对象文件来获取源代码 例如,我有一个源代码simple.c cc simple.c 现在我有一个.out(对象文件)。到现在为止,我是否能得到消息来源 simple.c的代码 没有 通过逆向工程(读取拆卸),可以重建逻辑,但变量名、注释等通常会丢失。不。将奶牛变成汉堡包相当容易。将汉堡包变成活生生的牛,这有点困难。有许多有用的工具可以从可执行文件中检索信息。它们都无法返回原始源代码(正如其他用户指出的,对于C语言来说这是不可能的),但您可以尝试一些反向工程工具。我比较喜欢

有没有办法通过在C中使用对象文件来获取源代码

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

cc simple.c

现在我有一个.out(对象文件)。到现在为止,我是否能得到消息来源

simple.c的代码

没有


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

不。将奶牛变成汉堡包相当容易。将汉堡包变成活生生的牛,这有点困难。

有许多有用的工具可以从可执行文件中检索信息。它们都无法返回原始源代码(正如其他用户指出的,对于C语言来说这是不可能的),但您可以尝试一些反向工程工具。我比较喜欢的是:

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

使用第一个,您实际上可以获得所有导出的符号及其在汇编方面的相对可执行代码(显然,这仅适用于
.text
部分)。第二个目标是使用英特尔体系结构,但您将能够分析每个可执行文件并获得有关ELF节和符号的信息。

您要查找的程序的单词是“”(将a.out中的机器语言转换为汇编语言)和“”(如Dacav所解释的,将汇编语言转换为C语言要困难得多,而且结果永远不会令人满意)


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

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

$
gdb a.out


(gdb)
列表

也许是因为我在抬头之前有直觉,这个答案实际上很有帮助!首先,有趣的反应,其次,不准确的类比。第三,从汉堡包中得到一头牛是可能的。有了技能和工具,科学家可以提取体细胞,将DNA转移到卵子,将卵子植入母牛体内,然后给你。@1c1cle:在你看来,这并不比屠宰一头牛“更难”吗?“更难”这句话可以用多种方式来解释,但我相信加强限制以配合逆转过程会有所帮助:“活牛”应该是这样的“同一头活牛”。也许还需要谨慎地留下一条免责声明,即在进行这项思维实验时,没有动物受到伤害。@1CLE:答案是“更难”,而不是“不可能”“。此外,您提出的程序还不够。它产生了一头牛,可以用来做同样的汉堡。它不能恢复,比如说,记忆,道德上等同于代码注释。可能重复::-)我认为
a.out
不是目标文件,而是可执行文件。因此,您需要
-c
标志来生成目标文件。除非使用
-g
标志进行编译,否则无法工作。