C++程序反编译笔记(16) 修正扫雷窗口位置
目前还存在一个比较明明显的问题

启动项目后, 游戏只会出现在屏幕右上角.

CreateWindow
一些重命名变量和函数的操作就跳过不说了.
在网上查了一下, 窗口的位置一般是用CreateWindow, 或MoveWindow来设置的.
首先看一下WinMain中CreateWindow的调用.

IDA Pro命名的X 和 Y 那里就是窗口的位置. 那么如何判断是不是这里有问题呢? 很简单, 把这两个参数用常量替换一下然后运行看结果就知道了, 如果运行后, 游戏窗口的位置和自己设置的常量位置一致, 那么就说明这里错了, 否则, 说明创建窗口后有其他地方修改了窗口的位置.
经过测试, 窗口位置还是在右上角.

MoveWindow
接下来查看MoveWindow的调用

只有这两处调用了MoveWindow, 并且这两处都使用了X和Y的值来设置位置(v3由Y赋值). 同样的方法, 这次窗口出现在了设置的位置(300, 100).

修正位置
其实上有一个很奇怪的地方, 对X和Y的使用都是 *(_DWORD*)&X 或 *(int *)&X这种形式, 这不就是等价于 直接取X和Y的值吗? 难道IDA Pro的bug?
查看X和Y的定义, 发现X和Y居然是BYTE类型的, BYTE类型只有1个字节, 使用的时候确实用到了4个字节, 明显是越界了.
将X和Y的类型改为int并修正所有使用到X和Y的地方后. 启动项目, 结果游戏的位置正确了.
