ESP和EIP寄存器有什么区别
What is the difference between ESP and EIP registers
使用以下示例,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
0000 0025 是立即指令的偏移量
按照 CALL 指令
0000 0040是里面第一条指令的偏移量
我的订阅者
CALL 指令将 0000 0025 压入堆栈,并且
将 0000 0040 加载到 EIP
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0040| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
RET 指令将 0000 0025 从堆栈弹出到 EIP
(RET 执行前的堆栈显示)
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0025| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
EIP是指令指针。它指向(保存地址)下一条要执行的指令的第一个字节。
ESP是堆栈指针。它指向(保存地址)堆栈中最近推送的值。
这些是常见的架构寄存器。此代码只是演示函数调用/return 序列的工作原理。
使用以下示例,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
0000 0025 是立即指令的偏移量 按照 CALL 指令
0000 0040是里面第一条指令的偏移量 我的订阅者
CALL 指令将 0000 0025 压入堆栈,并且 将 0000 0040 加载到 EIP
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0040| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
RET 指令将 0000 0025 从堆栈弹出到 EIP (RET 执行前的堆栈显示)
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0025| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
EIP是指令指针。它指向(保存地址)下一条要执行的指令的第一个字节。
ESP是堆栈指针。它指向(保存地址)堆栈中最近推送的值。
这些是常见的架构寄存器。此代码只是演示函数调用/return 序列的工作原理。