Metasm 使用什么算法来反汇编二进制代码?

逆向工程 拆卸
2021-06-24 10:35:18

Metasm是一个用 Ruby 编写的程序集操作套件。它确实提供了一个非常广泛的 API,用于从二进制程序中反汇编和提取 CFG 表示。

我想知道使用什么算法来提取CFG。这是通常的线性扫描还是递归遍历,还是另一种算法?

1个回答

Metasm 使用的策略在其网站上的同行评审文献中有所引用。看一下2008 年发表在 Journal of Computer Virology的文章,第 3.1 节。引用他们的话,

标准拆卸。

开箱即用,Metasm 中的反汇编引擎是这样工作的:

  1. 在指令指针处反汇编二进制指令。
  2. 分析教学效果。
  3. 更新指令指针。

对我来说,这听起来更像是递归遍历,而不是线性扫描。引擎根据上一条指令的效果反汇编下一条指令,这将允许反汇编引擎遵循逻辑中的分支等。

此外,我还没有深入检查他们的代码,但metasm/disassemble.rb看起来他们维护了某种自动分析队列,以便地址继续分析。寻找引用回溯的函数 - 这绝对看起来像是递归遍历。