EBP是堆栈基本指针。通常当你看到像ebp 8
这样的东西时,它会引用局部变量或函数参数。通常参数具有ebp
的正偏移量,而局部变量具有负偏移量。
我建议您阅读Matt Pietrek的MSDN文章:Matt的只是足够的汇编语言。
它意味着位于EBP 8
位置的任何东西(所以内存中比EBP
高8个字节)。通常,EBP
是堆栈指针[又名“帧指针”,指向函数开头的“当前堆栈帧],但它只是另一个寄存器,因此它可能包含任何东西。事实上,依赖于EBP
具有特定值的代码通常是一件坏事。
当使用EBP
作为帧指针时,正偏移量意味着参数,负偏移量意味着局部变量(当它们在堆栈上“高于”[堆栈增长到地址零]参数时)-您还必须考虑到EBP
本身在函数开始时的保存[因为我们需要在返回之前恢复它,因此调用函数将其EBP
恢复为“正常”]和返回地址,因此EBP 8
通常意味着函数的第一个参数。
shr
是右移,在本例中为1
,因此与除以2相同。