C++程序反編譯筆記(6) 解決掃雷反編譯后的編譯錯誤
????接著上文, 反編譯錯誤數(shù)量如下:

????

錯誤一 _PVFV未定義
????第一個錯誤如下, 我也沒見過_PVFV是什么類型, 查看定義, 也不到它的定義, 但是不要急, 先看一下哪里使用了這4個全局變量.

????使用到的地方全是識別不出來的標識符! 還是不急, 因為這個是上文分析過了的start函數(shù), 它是編譯器自動創(chuàng)建的, 因此把它刪了也沒問題.


錯誤二?INITCOMMONCONTROLSEX未定義

????網(wǎng)上查一下, 可知這個結構體定義在CommCtrl.h中, 包含該頭文件即可.

錯誤三 __OFSUB__未定義

查看它的定義

????可以發(fā)現(xiàn), 對應C文件, 它是沒有定義的, 但是對于C++文件, 卻是有定義的, 所以可以把源文件的后綴名改為cpp. 但是改成cpp后, 憑空多了很多錯誤.

????這個錯誤也很容易解決, __thiscall是C++成員函數(shù)的調用方式, 第一個傳遞的是this指針, IDA Pro已經(jīng)幫識別出來了.解決這個錯誤的方法是把所有this替換為self(其他標識符也行), 然后把__thiscall 宏的定義部分改為__cdecl(本來就是的話就不用改了). 也就是把成員函數(shù)當作普通函數(shù)來處理.

錯誤四 類型錯誤

????這里第一個參數(shù)是LPCWSTR, Buffer的類型是WCHAR[32], 應該把&Buffer改為Buffer的, 這可能是IDA Pro的一個缺陷.

錯誤五 未知錯誤

????這個函數(shù)未定義, 也不知道是哪里的. 好在仔細看的話, 并沒有地方調用了它, 可以把它注釋起來.

錯誤六 未定義的標識符

????unk開頭的標識符表示未知, 復制該函數(shù)名到IDA Pro中查看對應的函數(shù), 重新反編譯一下, 可以得到正確的函數(shù).

? ??

總結
????至此, 解決了明面上的所有編譯錯誤.