cmp byte ptr [EBP-9], 0 的含义

逆向工程 部件
2021-07-01 07:27:42

寻找这句话的意思。据我了解,它将 0 与 EBP 寄存器的值进行比较 - 9,但我不明白这是byte ptr什么的

1个回答

让我们分解一下。

首先,我们有助记符: cmp

正如您所说,它执行比较,但实际上它执行减法(第一个操作数减去第二个操作数)而不存储结果,但仍设置标志。

接下来,我们有第一个操作数: byte ptr [EBP-9]

这本身就需要分解。 EBP-9是简单的数学运算,取 EBP 寄存器的值并从中减去 9。方括号意味着然后获取该结果并将其视为内存中某个位置的地址。byte ptr告诉您如何从大内存位置的值抢的,在这种情况下一个字节。如果它是 a word ptr,那么您将取消引用两个字节(以小端字节顺序,因为我认为这是英特尔架构)。

第二个操作数是一个简单的立即数: 0

因此,总而言之,该指令表示将零与指向的地址处的单个字节进行比较EBP-9

如果您的下一个问题是“为什么”,那么您需要查看之前和之后的其他指令,以了解 EBP 从何处获取其值的上下文(通常,但并非总是如此,作为当前函数的基指针)栈帧)。有时您可以通过查看反汇编来判断,有时在调试器中运行它并在要检查的指令上或之前设置断点更容易。