EBP+C 那是什么?

逆向工程 部件 ollydbg 登记
2021-06-24 09:45:31

我有这个汇编代码:

MOV DL,BYTE PTR DS:[ECX+EAX]  --> Move the first byte of EAX to DL
ADD BYTE PTR DS:[EAX+9],DL  --> ADD the DL byte to the ninth byte at EAX
INC ECX --> Increase ECX by one
CMP ECX,DWORD PTR SS:[EBP+C] -- > ????

正如你所看到的,除了最后一行,我都明白了,

CMP ECX,DWORD PTR SS:[EBP+C]

我在这里可以理解的是,从 EBP+C 到 ECX 的 4 个字节之间存在比较

但我还是不明白 EBP+C 是什么?

2个回答

C 是一个十六进制数(十进制 12)。 DWORD PTR SS:[EBP+C] 应该表示堆栈段的内存,按地址(EBP 寄存器的值 + 12)。CMP ECX,DWORD PTR SS:[EBP+C]意味着“将 ECX 寄存器的内容与地址 [ebp + 12] 的 32 位进行比较。

EBP代表跟踪当前堆栈帧的扩展基指针

由于当前ESP扩展堆栈指针)在函数中随着内容被推入和弹出堆栈而频繁更改,因此基指针会记住函数开头的 ESP 值(约定)。

出于这个原因,EBP通常用于引用参数或局部变量(取决于您是否添加或减去它)。请记住堆栈向下增长 - 因此正偏移量可能指的是传递给函数的参数。维基百科在下面提供了这种布局的一个很好的说明:

维基百科堆栈图