ESP和EIP寄存器有什么区别

时间:2016-10-29 23:02:02

标签: assembly x86 procedure subroutine irvine32

使用以下示例,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
|-------------|              |----------|
|             |
|-------------|
|             |
|-------------|

1 个答案:

答案 0 :(得分:15)

EIP是指令指针。它指向(保存地址)下一条要执行的指令的第一个字节。

ESP是堆栈指针。它指向(保存地址)堆栈中最近推送的值。

这些是常见的架构寄存器。这段代码简单地演示了函数调用/返回序列的工作原理。