修改eip2015.1.20
一、eip
1、eip中存储了一个决定cpu下一行执行什么代码的地址,若想改变cpu的行为就修改eip寄存器
二、JMP指令(修改eip)
修改eip为4183FD,cpu自己跳转到相应位置
SHORT是跳转的位置离它所在的位置小于128字节会自动加上的,大于则没有
执行之后寄存器和堆栈都没有变化,只有eip改变
三、CALL指令
call到4183FD,为了cpu跑到4183FD处停下来堆栈不出错就在4183FD处下断点,选中那一行点击F2即可
eip的值改变了,ESP的值由0012FFC4变成了0012FFC0,而只有往堆栈里压东西的时候才会变成C0,堆栈中的0012FFC0压了一个值是CALL下面的地址即返回地址
CALL与JMP的
相同点:修改了eip的值
不同点:CALL把返回地址压到堆栈中
补充:怎么知道CALL指令下一条的地址是004183DC
看004183F7,后面的53是一字节,下一行地址就加一,D7有5个字节下一行就加5
四、return指令(与call成对出现)
作用相当于pop eip
ESP和栈顶变回了C4,eip也变回了