當前位置:
首頁 > 知識 > 對vc++類和對象的逆向研究

對vc++類和對象的逆向研究

經過反編譯動態調試,vcpp的類實際上就是struct,跟delphi不同,它沒有類頭,而且所有的函數都直接放在函數表裡頭,跟普通的函數一樣混在一起。而成員變數,則直接就在對象頭開始算起,成員變數的結尾是0xfdfdfdfd,如果沒有成員變數,則對象的開頭就是0xfdfdfdfd。

舉個例子:如果有1個int成員變數,則sizeof(class)=4;如果有2個int成員變數,則sizeof(class)=8; 如果沒有,則sizeof(class)=1;

對象指針默認通過ecx傳遞,而delphi是第一個參數傳遞。

目標結論如下:

所以想要設計一個兼容delphi對象的c文件,讓cpp當作一個類使用,是不合適的,因為它不是通過對象指針的偏移來調用成員函數的,而是直接跳轉到了靜態函數表。但是用struct調用函數指針還是可以的,這樣其實就沒必要使用cpp的類了,直接用c就可以了,而且函數指針更加靈活,方便定義和響應事件,以及多態,有著無與倫比的靈活優勢,為什麼我喜歡javascript呢,因為指針函數發揮的淋漓盡致。

逆向其他軟體,比如遊戲等,需要研究更多,比如虛函數等。

今天先這樣,以後研究了再增加。

對vc++類和對象的逆向研究

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

apache的commons-email 類庫開發示例
Tomcat 調優測試

TAG:程序員小新人學習 |