有没有什么方法可以在C中通过使用目标文件来获取源代码?例如我有一个源代码simple.ccc简单. c现在我有一个. out(对象文件)。通过这个A. out是否可以得到源?simple.c代码
iezvtpos1#
不。把牛变成汉堡包相当容易。把汉堡包变成一头活牛,有点困难。
uqjltbpv2#
有许多有用的工具可以从可执行文件中检索信息。它们都不能给予原始源代码(正如其他用户指出的那样,C语言是不可能的),但是你可以尝试一些逆向工程工具。我最喜欢的是:
使用第一个,您实际上可以获得所有导出的符号及其相关的汇编可执行代码(显然,这仅适用于.text部分)。第二个是旨在与英特尔架构,但你将能够分析每一个可执行文件,并获得有关ELF节和符号的信息。
.text
56lgkhnf3#
您正在寻找的程序的单词是“disassembler”(将机器语言中的.out转换为汇编语言)和“decompiler”(将汇编语言转换为C语言,正如Dacav所解释的那样,这要困难得多,结果永远不会令人满意)。但使用网络搜索引擎与这些词可能会产生结果。
yeotifhr4#
没有通过逆向工程(阅读反汇编),可以重建逻辑,但变量名,注解等。通常会丢失。
pieyvz9o5#
如果您使用的是Linux,请使用gdb$gdb a.out(gdb)list
gdb a.out
list
x9ybnkn66#
如果你使用的是linux,你可以用命令字符串提取可执行文件中的字符串。
6条答案
按热度按时间iezvtpos1#
不。把牛变成汉堡包相当容易。把汉堡包变成一头活牛,有点困难。
uqjltbpv2#
有许多有用的工具可以从可执行文件中检索信息。它们都不能给予原始源代码(正如其他用户指出的那样,C语言是不可能的),但是你可以尝试一些逆向工程工具。我最喜欢的是:
使用第一个,您实际上可以获得所有导出的符号及其相关的汇编可执行代码(显然,这仅适用于
.text
部分)。第二个是旨在与英特尔架构,但你将能够分析每一个可执行文件,并获得有关ELF节和符号的信息。56lgkhnf3#
您正在寻找的程序的单词是“disassembler”(将机器语言中的.out转换为汇编语言)和“decompiler”(将汇编语言转换为C语言,正如Dacav所解释的那样,这要困难得多,结果永远不会令人满意)。
但使用网络搜索引擎与这些词可能会产生结果。
yeotifhr4#
没有
通过逆向工程(阅读反汇编),可以重建逻辑,但变量名,注解等。通常会丢失。
pieyvz9o5#
如果您使用的是Linux,请使用gdb
$
gdb a.out
(gdb)
list
x9ybnkn66#
如果你使用的是linux,你可以用命令字符串提取可执行文件中的字符串。