编写nm-like命令的代码

出于对逆向工程的好奇心,我正在考虑编写一个简单的程序(使用C ++),将可执行文件作为input,并生成所有可执行文件的源程序的一部分function的名称。

任何指针,我应该怎么去呢?

一步一步的方法将不胜感激!

编辑:
平台linux和我关心a.out格式的可执行文件。

严重依赖于您的平台和您正在检查的代码的来源。 如果要从中获取函数名称,则需要为要反转的二进制文件提供符号表。 有时候这个表被嵌入到二进制文件中(比如DLL中的导出查询表),但是很多时候这些信息根本就不存在。

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

编辑:好,根据你提供的规范,我你可能实际上关心的是ELF二进制文件,而不是旧的a.out格式,这种格式很少见。 “a.out”仍然是GCC链接器的默认输出名称,但实际的a.out二进制格式在Linux中很长一段时间还没有被广泛使用。

在线提供了许多ELF结构的优秀演练,并且一些快速搜索也成为了阅读ELF .symtab的现成示例 。

希望这可以帮助。

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