【发布时间】:2016-02-22 17:24:43
【问题描述】:
我正在尝试在给定的反汇编指令列表中识别所有寄存器以注册指令..
我正在使用 capstone 作为反汇编引擎。
查看“英特尔® 64 和 IA-32 架构软件开发人员手册”后,我发现我需要查看 MOD\RM 字节中的 MOD 位,如果它的 11b 则该指令位于两个寄存器之间..
在我遇到下一条指令(十六进制)之前效果很好:
1) 81 EC 24 06 00 00
2) 83 C4 30
根据顶点 (http://www.cenigma.org/4AM3UGY):
1) sub esp, 0x624
2) add esp, 0x30
在第一条指令中 MOD\RM='EC' (11101100b) 所以 MOD=11b 在第二条指令 MOD\RM='C4' (11000100b) 所以再次 MOD=11b
两者都没有注册!
我错过了什么?除了 MOD 位之外,还有更多内容吗?
谢谢!
【问题讨论】:
-
在这些指令中,MOD 位指示第一个操作数是寄存器。操作码指示第二个操作数是立即数。所以,是的,你的任务比仅仅解码 MOD 位要困难得多。根据您认为“注册到注册”的内容,还有不使用 MOD/RM 字节的情况,例如 XCHG AX、BX、CBW 和 SAHF。然后是 LEA AX,[BX] 需要考虑。
标签: assembly x86 intel x86-16 capstone