level 12
ym27220059
楼主
MCM 03/04 修改器 —— Windows 11 兼容补丁说明
【问题】
mcm0304chs040ra.exe(温牧汉化 / 陆薇RA修改版)在 Windows XP/2003
下能正常读取 CM 03/04 的进程内存,但在 Windows 11 上读取不全:
实测原版(Win11 + 游戏运行中):
ProcEnd = FE59000 (~266 MB) ← 错误
Number of players = 2398 ← 严重截断
Number of clubs = 0 ← 完全读不到
Number of countries= 132
Number of cities = 10621
【根因】
工具的 BaseMemory 单元在 OpenProcess 之后会用二分法探测游戏进程
内存的上限(函数位于 VA 0x560BF0),并把该上限当作后续所有指针的
合法性边界(代码中 cmp ptr,[obj+0x150] / jge 视为无效)。
这个二分搜索被写死为:
锚点 ebx = 0x0FFFFFFF (256 MB)
步长 esi = 0x1000000 (16 MB)
7 轮,每轮 步长 /= 16
总覆盖范围只有约 ±17 MB,因此返回值永远不超过 ~0x10FFFFFF
(约 272 MB)。
在 Windows XP 时代,游戏的数据库视图被映射在低地址,272 MB 足够。
在 Windows 11 上,MapViewOfFile 的返回地址启用了 ASLR 随机化,
游戏数据实际落在 293 MB ~ 447 MB 区间(本次实测:
0x12510000 / 0x14D70000 / 0x15980000 / 0x1BCE0000),
超出了那个写死的上限 —— 于是这些区域的指针全部被判定为非法,
球员列表被截断、俱乐部列表直接为 0。
顺带说明:OpenProcess 权限不是问题。实测 Windows 11 下
0x1F0FFF(XP 版 PROCESS_ALL_ACCESS)依然有效,工具与游戏同为
High 完整性级别,读写内存均正常。
【补丁内容】(仅改动 2 条指令的立即数,共 10 字节)
文件偏移 0x15FFFC: BB FF FF FF 0F -> BB 00 00 00 70
mov ebx, 0x0FFFFFFF -> mov ebx, 0x70000000
文件偏移 0x160001: BE 00 00 00 01 -> BE 00 00 00 10
mov esi, 0x1000000 -> mov esi, 0x10000000
即把锚点抬到 1.75 GB、初始步长抬到 256 MB。7 轮 /16 细分后,
二分会正确收敛到游戏已提交内存的真实顶部(实测 0x1D61A000 ≈ 469 MB)。
【补丁后实测】(Windows 11,游戏运行中,同一环境 A/B 对照)
ProcEnd = 1D61A000 (~469 MB) ← 正确
Number of players = 28258 ← 完整
Number of clubs = 4423 ← 完整
Number of countries= 132
Number of cities = 10621
与原版相比,球员数由 2398 → 28258,俱乐部数由 0 → 4423。
工具的界面、81 项属性编辑、球探、搜索、邮件报告等原有功能
全部保持不变(补丁未触碰任何逻辑代码)。
【使用】
1. 先启动 CM 03/04,进入游戏界面
2. 运行 mcm0304chs040ra_win11.exe
3. 点击「读取游戏」即可
2026年09月02日 02点09分
1
【问题】
mcm0304chs040ra.exe(温牧汉化 / 陆薇RA修改版)在 Windows XP/2003
下能正常读取 CM 03/04 的进程内存,但在 Windows 11 上读取不全:
实测原版(Win11 + 游戏运行中):
ProcEnd = FE59000 (~266 MB) ← 错误
Number of players = 2398 ← 严重截断
Number of clubs = 0 ← 完全读不到
Number of countries= 132
Number of cities = 10621
【根因】
工具的 BaseMemory 单元在 OpenProcess 之后会用二分法探测游戏进程
内存的上限(函数位于 VA 0x560BF0),并把该上限当作后续所有指针的
合法性边界(代码中 cmp ptr,[obj+0x150] / jge 视为无效)。
这个二分搜索被写死为:
锚点 ebx = 0x0FFFFFFF (256 MB)
步长 esi = 0x1000000 (16 MB)
7 轮,每轮 步长 /= 16
总覆盖范围只有约 ±17 MB,因此返回值永远不超过 ~0x10FFFFFF
(约 272 MB)。
在 Windows XP 时代,游戏的数据库视图被映射在低地址,272 MB 足够。
在 Windows 11 上,MapViewOfFile 的返回地址启用了 ASLR 随机化,
游戏数据实际落在 293 MB ~ 447 MB 区间(本次实测:
0x12510000 / 0x14D70000 / 0x15980000 / 0x1BCE0000),
超出了那个写死的上限 —— 于是这些区域的指针全部被判定为非法,
球员列表被截断、俱乐部列表直接为 0。
顺带说明:OpenProcess 权限不是问题。实测 Windows 11 下
0x1F0FFF(XP 版 PROCESS_ALL_ACCESS)依然有效,工具与游戏同为
High 完整性级别,读写内存均正常。
【补丁内容】(仅改动 2 条指令的立即数,共 10 字节)
文件偏移 0x15FFFC: BB FF FF FF 0F -> BB 00 00 00 70
mov ebx, 0x0FFFFFFF -> mov ebx, 0x70000000
文件偏移 0x160001: BE 00 00 00 01 -> BE 00 00 00 10
mov esi, 0x1000000 -> mov esi, 0x10000000
即把锚点抬到 1.75 GB、初始步长抬到 256 MB。7 轮 /16 细分后,
二分会正确收敛到游戏已提交内存的真实顶部(实测 0x1D61A000 ≈ 469 MB)。
【补丁后实测】(Windows 11,游戏运行中,同一环境 A/B 对照)
ProcEnd = 1D61A000 (~469 MB) ← 正确
Number of players = 28258 ← 完整
Number of clubs = 4423 ← 完整
Number of countries= 132
Number of cities = 10621
与原版相比,球员数由 2398 → 28258,俱乐部数由 0 → 4423。
工具的界面、81 项属性编辑、球探、搜索、邮件报告等原有功能
全部保持不变(补丁未触碰任何逻辑代码)。
【使用】
1. 先启动 CM 03/04,进入游戏界面
2. 运行 mcm0304chs040ra_win11.exe
3. 点击「读取游戏」即可


