一個值得注意的問題:關於硬體對程式設計的影響

看雪資料發表於2004-12-31

在給VProtector除BUG的過程中發現了硬體的一個特點,想寫出來給大家知道,免得以後有朋友因為這方面的問題阻礙了軟體開發的過程

inter的CPU在從P4開始,cpu指令的呼叫有個細節和以往的cpu不一樣,
我們在呼叫函式的時候 一般的流程是:

push 下個指令的地址
jmp  目標函式

而P4的cpu的過程不一樣,呼叫過程如下:

jmp  目標函式
push 下個指令的地址

我們在設計利用堆疊執行指令的時候必須注意這個細節,比如call esp必須
要針對當前cpu的特點定位esp

對付這樣的解決辦法也找到
我發現 call [esp] 不會存在這樣的問題

老的CPU上面執行call esp的過程:

假如 esp = 401000
那麼 call esp 將會呼叫 400ffc處的程式碼  因為cpu首先將返回地址壓棧入400ffc處 再進入esp的地址

P4的執行情況恰恰相反 呼叫的始終使esp處的程式碼

相關文章