我从这个链接中了解到了反汇编的挑战。该文章列出了以下六个挑战:
- 嵌入代码区域的数据
- 可变指令大小
- 间接分支指令
- 在可执行文件的代码段中没有显式 CALL 站点的函数
- 位置无关代码 (PIC) 序列
- 手工制作的汇编代码。
但是,我正在考虑以下似乎可以解决上述挑战的反汇编方法。假设我们有一个要反汇编的可执行文件、一个可以 100% 覆盖代码的输入集和一个模拟器(例如 QEMU)。然后,我们可以对仿真器进行检测,以输出被仿真 CPU 执行的每条指令和相应的内存地址。之后,我们可以将每条指令翻译成汇编指令,现在整个程序就被反汇编了。
你能告诉我为什么这个想法行不通吗?