Posted on 2009-10-04 17:53
S.l.e!ep.¢% 閱讀(1227)
評論(0) 編輯 收藏 引用 所屬分類:
Crack
匯編call指令的具體過程
a.段內直接轉移,具體格式:CALL 過程名。此時CS不入棧,IP的內棧入棧,入棧后再將加上目的地址與CALL指令的下一條指令的偏移地址之差值就可以轉移到目的地址,詳細過程:
SP-2=>SP;將堆棧指針SP減2
(SP)<=IP;將IP進棧
IP+偏移地址之差;轉到目的地址
b.段內間接轉移,具體格式:CALL OPRD,那么在這里OPRD可以寄存器或內存單元,它的具體實現過程:
SP-2=>SP;將堆棧指針SP減2
(SP)<=IP;將IP進棧
IP<=(OPRD);轉到目的地址
同a一樣,CS不入棧
c.段間直接轉移,具體格式:CALL 過程名 [FAR],此時CS,IP均要入棧,詳細的實現過程:
SP-2=>SP;將堆棧指針減2
(SP)<=CS;將CS入棧
SP-2=>SP;將堆棧指針再減2
(SP)<=IP;將IP入棧
;裝入新的CS,IP
IP<=過程入口的偏移地址
CS<=過程入口的段地址
d.段間間接轉移,具體格式:CALL OPRD [FAR],此時CS,IP均要入棧,OPRD是32位,你知道在8086中沒有32位寄存器。因此,這里的OPRD一定是存儲單元,高16位是CS的值,低16位是IP值,詳細的實現過程:
SP-2=>SP;將堆棧指針減2
(SP)<=CS;將CS入棧
SP-2=>SP;將堆棧指針再減2
(SP)<=IP;將IP入棧
;裝入新的CS,IP
IP<=(OPRD+2,OPRD+3)
CS<=(OPRD,OPRD1)