the value of esp was not properly saved
生活随笔
收集整理的這篇文章主要介紹了
the value of esp was not properly saved
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題說明:
主模塊在調用Dll的導出函數(shù)時會保存返回地址在堆棧中(ESP+xxx)。函數(shù)調用返回時,會彈棧取得返回地址(ESP-xxx),從而返回到主模塊。
vaule of ESP was not properly saved across a function call.
上面出現(xiàn)的錯誤是系統(tǒng)提示主模塊調用前堆棧的指針(ESP),與調用導出函數(shù)后的指針不符。
一般有兩種情況會出現(xiàn)類似錯誤。
1. Dll導出函數(shù)聲明導出方法,與主模塊中聲明的導入方法不一致。使得調用時參數(shù)的傳遞中,破壞了調用堆棧,出現(xiàn)錯誤。
2. Dll導出函數(shù)本身破壞了調用堆棧。編碼中最一般的錯誤比如:對象(如CString)等。
解決方法:
針對第1種情況,請確定導出方(Dll等)與導入方(Exe等)的聲明保持一致。
對于第2種情況,請保證產生的對象都被安全的釋放。
備注:
可以試試下面的方法可以簡單的測試方法
將Dll的導出函數(shù)定義成空處理(直接返回),如還出現(xiàn)錯誤,則是調用錯誤。
主模塊在調用Dll的導出函數(shù)時會保存返回地址在堆棧中(ESP+xxx)。函數(shù)調用返回時,會彈棧取得返回地址(ESP-xxx),從而返回到主模塊。
vaule of ESP was not properly saved across a function call.
上面出現(xiàn)的錯誤是系統(tǒng)提示主模塊調用前堆棧的指針(ESP),與調用導出函數(shù)后的指針不符。
一般有兩種情況會出現(xiàn)類似錯誤。
1. Dll導出函數(shù)聲明導出方法,與主模塊中聲明的導入方法不一致。使得調用時參數(shù)的傳遞中,破壞了調用堆棧,出現(xiàn)錯誤。
2. Dll導出函數(shù)本身破壞了調用堆棧。編碼中最一般的錯誤比如:對象(如CString)等。
解決方法:
針對第1種情況,請確定導出方(Dll等)與導入方(Exe等)的聲明保持一致。
對于第2種情況,請保證產生的對象都被安全的釋放。
備注:
可以試試下面的方法可以簡單的測試方法
將Dll的導出函數(shù)定義成空處理(直接返回),如還出現(xiàn)錯誤,則是調用錯誤。
總結
以上是生活随笔為你收集整理的the value of esp was not properly saved的全部內容,希望文章能夠幫你解決所遇到的問題。