昨天遇到個坑,在除錯乙個程式的時候,在乙個類物件的函式處理過程中,this指標被修改。導致程式崩潰。
原來在這個函式內部呼叫了乙個dll的api,這個api的引數在this前push進棧,但這個dll的api修改這個引數時越界了,把this也覆蓋了。導致this指標出錯。
大概是這樣:
引數被寫前 在api中引數被修改,覆蓋了this
***x aaaa
***x -----> aaaa
this aaaa
ebp ebp
因此,絕對是dll有問題。或者是標頭檔案宣告的引數結構太短了。
果然檢視了以下是標頭檔案跟dll的版本不對應,新版的標頭檔案引數結構變長了。修改後沒問題了。
以後利用第三方dll注意版本!!!
反彙編 函式指標
函式指標的定義 返回型別 呼叫約定 變數名 引數列表 例如 int cdecl myfun int,int 一般都用來呼叫非本身程式提供的函式來進行使用 如下 includeint main 反彙編如下 5 int cdecl myfun int,int 6 7 int i 10 00401028 ...
如何保證類的物件只在stack中被定義?
我們要從stack 堆 和heap 棧 的不同來看 在stack中系統自動呼叫析構函式對物件的記憶體進行釋放,而在heap中,只有當程式結束或者我們用delete時,系統才會呼叫析構函式釋放物件所佔的記憶體。重點 我們只要把釋放記憶體的方式限定住了,也就限制住了物件被定義的位置。示例如下 inclu...
傳奇遊戲在開服中被攻擊了怎麼處理?
傳奇遊戲在開服中被攻擊了怎麼處理?遊戲還開著區呢,被攻擊會很影響開區的效果的,怎麼辦?遊戲伺服器不管是個人的還是企業的,被攻擊都是很常見的,在所難免的。特別是遊戲新上線時,都要承受外來壓力,玩家突然猛增,被攻擊等等。如果承受不住可能會直接宣布遊戲倒閉。這裡 超級科技跟大家 說說遊戲伺服器為什麼老被攻...