EIP 不叫通用寄存器,它里面存放的值,是CPU下次要执行的指令的地址。那么如何去修改它的值呢?
使用MOV 0xxxxx,是不可以的。
mov eip,0x12345678 ===相当于 jmp 0x12345678
CALL指令,与jmp指令相同的点----修改EIP的值。
不同的点,会将call指令下一条指令的内存地址压入堆栈,esp栈顶指针的值减4。
遇到call指令,要想单步执行,不要按F8,要按F7--涉及调试器相关的知识,暂时不深入了解。
做底层的人知道 call指令是敏感指令。一般会做变形处理,用其他指令组合完成call指令完成的事情。
将当前栈顶指针的值赋给EIP,同时让栈顶指针加4。
学习指令的时候,不要只关注指令的表面形式,而要关注指令到底做了什么事情。