寻找这句话的意思。据我了解,它将 0 与 EBP 寄存器的值进行比较 - 9,但我不明白这是byte ptr
做什么的。
cmp byte ptr [EBP-9], 0 的含义
逆向工程
部件
2021-07-01 07:27:42
1个回答
让我们分解一下。
首先,我们有助记符: cmp
正如您所说,它执行比较,但实际上它执行减法(第一个操作数减去第二个操作数)而不存储结果,但仍设置标志。
接下来,我们有第一个操作数: byte ptr [EBP-9]
这本身就需要分解。 EBP-9
是简单的数学运算,取 EBP 寄存器的值并从中减去 9。方括号意味着然后获取该结果并将其视为内存中某个位置的地址。将byte ptr
告诉您如何从大内存位置的值抢的,在这种情况下一个字节。如果它是 a word ptr
,那么您将取消引用两个字节(以小端字节顺序,因为我认为这是英特尔架构)。
第二个操作数是一个简单的立即数: 0
因此,总而言之,该指令表示将零与指向的地址处的单个字节进行比较EBP-9
。
如果您的下一个问题是“为什么”,那么您需要查看之前和之后的其他指令,以了解 EBP 从何处获取其值的上下文(通常,但并非总是如此,作为当前函数的基指针)栈帧)。有时您可以通过查看反汇编来判断,有时在调试器中运行它并在要检查的指令上或之前设置断点更容易。
其它你可能感兴趣的问题