ym27220059 ym27220059
关注数: 44 粉丝数: 191 发帖数: 1,296 关注贴吧数: 83
重写了下mcm的程序win11上能正常运行,需要的留下邮箱 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. 点击「读取游戏」即可
1 下一页