有如下有趣的代碼
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 中