retn之后的EIP欺骗的Ollydbg!

来源:互联网 发布:淘宝很出名的钢笔店铺 编辑:程序博客网 时间:2024/05/01 14:44

有如下有趣的代码

0040D000     90                      nop0040D001 s>  E8 0A000000             call sss.0040D0100040D006     90                      nop0040D007     EB 0C                   jmp short sss.0040D0150040D009     90                      nop0040D00A     90                      nop0040D00B     90                      nop0040D00C     90                      nop0040D00D     90                      nop0040D00E     90                      nop0040D00F     90                      nop0040D010     5D                      pop ebp0040D011     45                      inc ebp0040D012     55                      push ebp0040D013     C3                      retn
有趣的地方在于,如果你在第一个call处F8,程序并不会在jmp指令处停下而是一直从0040D015处的指令一直运行下去。。。。

为什么会这样呢

解释:

一般情况下
A地址 callA
B地址 指令X
C地址 指令Y
call B(0040D015)
如上指令,一般情况下call完之后会返回到B地址,我觉得OD会将这个当EIP=B地址当成是callA结束的标志,所以这样的话F8步过就会使得OD认为后面的jmp和下面的40D015(引发跑飞的那个地方)包含在callA 中

原创粉丝点击