【问题标题】:writing code for nm-alike command [C++]为类似 nm 的命令编写代码 [C++]
【发布时间】:2011-02-03 23:38:19
【问题描述】:

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

关于我应该如何去做的任何指示?

非常感谢您提供分步方法!

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

【问题讨论】:

  • 为什么不简单地查看 nm 命令的源代码?
  • 嗨 Niel!,我在哪里可以搜索到 nm-command 的来源..我尝试用谷歌搜索它..也许任何人都可以指导我
  • 应该是任何 Linux 发行版的源代码的一部分。
  • nm属于gnu-binutils,源码可以看这里gnu.org/software/binutils
  • 但是我仍然更喜欢普通的简单英语而不是庞大的 2K 行源代码,所以任何指导性答案都不仅仅是受欢迎的 :)

标签: c++ linux reverse-engineering


【解决方案1】:

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

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

编辑:好的,根据您给出的规范,我猜测您可能实际上关心的是 ELF 二进制文件,而不是较旧的 a.out 格式,这是相当合理的罕见。 "a.out" 仍然是 GCC 链接器的默认输出名称,但实际的 a.out 二进制格式已经很久没有在 Linux 中普遍使用了。

网上有很多关于ELF structure 的很好的演练,一些快速搜索也找到了ready-made example of reading the ELF .symtab

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 取决于它们是否被剥离 - 我猜他们中的绝大多数会像你说的那样被剥离。
    • 原来OP对这里不感兴趣。
    猜你喜欢
    • 2020-10-05
    • 2012-09-23
    • 1970-01-01
    • 2016-04-17
    • 2021-06-29
    • 2016-12-07
    • 1970-01-01
    • 2018-05-12
    • 2016-08-19
    相关资源
    最近更新 更多