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 序列的工作原理。