为nm-like命令编写代码[C ++]

时间:2010-04-03 10:31:23

标签: c++ linux reverse-engineering

出于对逆向工程的好奇,我正在考虑编写一个简单的程序(在C ++中),它将可执行文件作为输入,并生成所有函数的名称,这些函数是该可执行文件的源程序的一部分。

关于我应该怎么做的任何指示?

非常感谢分步方法!

修改:
平台linux和我关注a.out格式的可执行文件。

2 个答案:

答案 0 :(得分:3)

在很大程度上取决于您的平台以及您正在检查的代码的来源。如果要从中获取函数名,则需要一个符号表来表示正在反转的二进制文件。有时该表嵌入在二进制文件中(例如DLL中的导出查找表),但很多时候信息根本就不存在。

对此没有通用的解决方案。您至少需要将问题缩小到特定平台,最好是特定目标二进制类型。

编辑:好的,根据您提供的规格,我猜测您可能实际上关注的是ELF二进制文件,而不是较旧的a.out格式,这是相当罕见的。 “a.out”仍然是GCC链接器的默认输出名称,但实际的a.out二进制格式在Linux中并不常用。

ELF structure在线提供了很多很好的演练,有些快速搜索也出现了ready-made example of reading the ELF .symtab

希望这有帮助。

答案 1 :(得分:0)

几乎不可能。这类数据不包含在绝大多数可执行文件中。 DLL,也许。