2010-04-03 94 views
2

出于对逆向工程的好奇心,我正在考虑编写一个简单的程序(使用C++),它将可执行文件作为输入并生成所有功能的名称该可执行文件的源程序。为nm-like命令编写代码[C++]

任何关于我应该如何去处理的指针?

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

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

+1

为什么不简单看一下nm命令的来源? – 2010-04-03 10:35:20

+0

Hi Niel !,我可能在哪里寻找nm-command的源代码..我试着用Google搜索它..也许任何人都可以指示我 – sud03r 2010-04-03 10:41:11

+0

应该是任何Linux发行版的源代码的一部分。 – 2010-04-03 10:43:59

回答

3

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

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

编辑:好吧,你已经给出的规格,我猜测那你可能实际上关心的是ELF二进制文件,而不是旧的a.out格式,这是相当罕见的。 “a.out”仍然是GCC链接器的默认输出名称,但实际的a.out二进制格式在Linux中很长时间还没有被广泛使用。

在网上有一些ELF structure的好演练,一些快速搜索也出现了ready-made example of reading the ELF .symtab

希望这会有所帮助。

+0

根据需要进行编辑! – sud03r 2010-04-03 10:44:04

0

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

+0

取决于他们是否已被剥离 - 我猜他们绝大多数会如你所说的那样。 – 2010-04-03 10:51:26

+0

反正OP在这里不感兴趣。 – Puppy 2010-04-03 23:17:46