2011-11-08 61 views
2

我正在爲內部使用匯編語言編寫的大部分應用程序編寫DLL加載項。我混合託管C++,非託管C++和內聯彙編。必須釋放代碼依賴於通過函數調用保留的ebx嗎?

我剛剛花了幾個小時來調試一個問題,結果發現ebx在調用主應用程序期間沒有保留。該錯誤只發生在代碼運行在發佈模式和調試器之外的情況下。調試器中的發佈代碼沒有這個問題。

我已經關閉了所有可以用於發佈版本的優化,但它仍然取決於ebx。我已添加push/pop ebx作爲解決方法,但此錯誤肯定會再次出現。 :-(

是否可以告訴ebx可以在函數調用過程中改變了編譯器?

回答

4

的錯誤是在原型該報告說,它符合調用約定不符合實際的功能調用約定的規則來保存寄存器,你需要在你自己的函數中包含調用函數,使它符合(通過保存寄存器),並讓每個人都調用包裝器將允許你執行這個策略

+0

+ 1 Wrapper函數還可以簡化集中最終的日誌記錄,編組,特殊情況,調試斷點設置等。 t會隨着像這樣的特殊接口而增長。 – user786653