C++程序反编译笔记(6) 解决扫雷反编译后的编译错误
接着上文, 反编译错误数量如下:


错误一 _PVFV未定义
第一个错误如下, 我也没见过_PVFV是什么类型, 查看定义, 也不到它的定义, 但是不要急, 先看一下哪里使用了这4个全局变量.

使用到的地方全是识别不出来的标识符! 还是不急, 因为这个是上文分析过了的start函数, 它是编译器自动创建的, 因此把它删了也没问题.


错误二 INITCOMMONCONTROLSEX未定义

网上查一下, 可知这个结构体定义在CommCtrl.h中, 包含该头文件即可.

错误三 __OFSUB__未定义

查看它的定义

可以发现, 对应C文件, 它是没有定义的, 但是对于C++文件, 却是有定义的, 所以可以把源文件的后缀名改为cpp. 但是改成cpp后, 凭空多了很多错误.

这个错误也很容易解决, __thiscall是C++成员函数的调用方式, 第一个传递的是this指针, IDA Pro已经帮识别出来了.解决这个错误的方法是把所有this替换为self(其他标识符也行), 然后把__thiscall 宏的定义部分改为__cdecl(本来就是的话就不用改了). 也就是把成员函数当作普通函数来处理.

错误四 类型错误

这里第一个参数是LPCWSTR, Buffer的类型是WCHAR[32], 应该把&Buffer改为Buffer的, 这可能是IDA Pro的一个缺陷.

错误五 未知错误

这个函数未定义, 也不知道是哪里的. 好在仔细看的话, 并没有地方调用了它, 可以把它注释起来.

错误六 未定义的标识符

unk开头的标识符表示未知, 复制该函数名到IDA Pro中查看对应的函数, 重新反编译一下, 可以得到正确的函数.


总结
至此, 解决了明面上的所有编译错误.