retn之後的EIP欺騙的Ollydbg!

有如下有趣的代碼

0040D000     90                      nop
0040D001 s>  E8 0A000000             call sss.0040D010
0040D006     90                      nop
0040D007     EB 0C                   jmp short sss.0040D015
0040D009     90                      nop
0040D00A     90                      nop
0040D00B     90                      nop
0040D00C     90                      nop
0040D00D     90                      nop
0040D00E     90                      nop
0040D00F     90                      nop
0040D010     5D                      pop ebp
0040D011     45                      inc ebp
0040D012     55                      push ebp
0040D013     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 中

發佈了50 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章