1.作用:
ESP寄存器存储的值是CPU下次要执行的地址。ESP中存的是什么,CPU下次就会找对应的地址中的指令。
2.修改EIP的值:JMP指令
- 可以通过JMP指令修改EIP的值: JMP 00217C51
- JMP后面还能跟一个寄存器:JMP EAX
- 还可以跟内存:JMP DWORD PTR DS:[0018FFA1]——注意这里只能跟DWORD
3.修改EIP的值:CALL指令
(1)CALL指令的使用:CALL 立即数/寄存器/内存
使用CALL指令调用0021 7AA8位置的指令:(调用CALL指令需要使用F7)
可以看到CALL指令做了两件事:
- 修改了EIP的值为接下来要执行的语句的地址
- 把当前CALL指令的下一条指令的地址存入的栈中
(2)如何使用基础指令实现CALL指令的功能:
。。。
4.修改EIP的值:RET指令
使用RET指令:
(1)执行指令前:
- RETN指令对应的地址——0021 7C2F
- ESP——00B3 F960
- EIP——0021 7C2F
- ESP对应的栈内容——7613 6359
(2)执行指令结束结束:
(3)可以看到,发生如下变化:
- ESP增加了4(4字节)——00B3 F964
- EIP变成了下一个栈指针内存储的值——7613 6359
即RET做的事:
把当前栈顶里面存的这个值,放到EIP里面。同时让栈顶指针加4