1. 程式人生 > >Call指令與ret指令

Call指令與ret指令

1. jmp指令緊緊進行執行流程的跳轉,不會儲存返回地址
2. call指令在進行流程跳轉前會儲存返回地址以便在跳轉目的碼中可以使用ret指令返回到call指令的下一條指令處繼續執行。執行段內跳轉時,只儲存IP;如果是段間跳轉,要儲存CS和IP。
3. ret和retf:這兩個指令的功能都是呼叫返回。
 (1)ret在返回時只從堆疊中取得EIP;retf中的字母f表示far,即段間轉移返回,要從堆疊中取出EIP和CS。
 (2)兩個指令都可以帶引數,表示發生過程呼叫時引數的個數,返回時要從堆疊中退出相應個數的引數。
 (3)恢復CS時,如果發現將發生特權級變化(當前CS的低2位不等於從堆疊中取得的新的CS值的低2位。
 由跳轉的相關理論可知,只有跳轉到非一致程式碼段時才會發生特權級變化,那麼,也只有從非一致程式碼段返回時才會發生特權級變化的返回),
 則還要從呼叫者堆疊中取得ESP和SS恢復到相應暫存器中,也即恢復呼叫者堆疊。