使用以下示例,ESP和EIP寄存器之间有什么区别?解释代码正在做什么。
main PROC
0000 0020 call MySub
0000 0025 mov eax, ebx
.
.
main ENDP
MySub PROC
0000 0040 mov eax, edx
.
.
ret
MySub ENDP
<00> 0000 0025是指令的偏移量
遵循CALL指令
<00> 0000 0040是内部第一条指令的偏移量
MySub
CALL指令将0000 0025推入堆栈,并且 将0000 0040加载到EIP
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0040| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
RET指令从堆栈弹出0000 0025到EIP (在RET执行之前显示堆栈)
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0025| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
答案 0 :(得分:15)
EIP是指令指针。它指向(保存地址)下一条要执行的指令的第一个字节。
ESP是堆栈指针。它指向(保存地址)堆栈中最近推送的值。
这些是常见的架构寄存器。这段代码简单地演示了函数调用/返回序列的工作原理。