@bingine/cemem 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/PORT-SCOPE.md +169 -0
  2. package/README.md +451 -2
  3. package/dist/cjs/addr/expression.js +650 -0
  4. package/dist/cjs/addr/expression.js.map +1 -0
  5. package/dist/cjs/addresslist/memory-record.js +612 -0
  6. package/dist/cjs/addresslist/memory-record.js.map +1 -0
  7. package/dist/cjs/asm/assembler.js +354 -0
  8. package/dist/cjs/asm/assembler.js.map +1 -0
  9. package/dist/cjs/asm/autoassembler-directives.js +362 -0
  10. package/dist/cjs/asm/autoassembler-directives.js.map +1 -0
  11. package/dist/cjs/asm/autoassembler.js +2163 -0
  12. package/dist/cjs/asm/autoassembler.js.map +1 -0
  13. package/dist/cjs/asm/backend.js +394 -0
  14. package/dist/cjs/asm/backend.js.map +1 -0
  15. package/dist/cjs/asm/disassembler.js +715 -0
  16. package/dist/cjs/asm/disassembler.js.map +1 -0
  17. package/dist/cjs/backend/dbk-backend.js +683 -0
  18. package/dist/cjs/backend/dbk-backend.js.map +1 -0
  19. package/dist/cjs/backend/native-ce-backend.js +667 -0
  20. package/dist/cjs/backend/native-ce-backend.js.map +1 -0
  21. package/dist/cjs/backend/self-backend.js +449 -0
  22. package/dist/cjs/backend/self-backend.js.map +1 -0
  23. package/dist/cjs/backend/types.js +48 -0
  24. package/dist/cjs/backend/types.js.map +1 -0
  25. package/dist/cjs/cheattable/ct-format.js +533 -0
  26. package/dist/cjs/cheattable/ct-format.js.map +1 -0
  27. package/dist/cjs/index.js +219 -0
  28. package/dist/cjs/index.js.map +1 -0
  29. package/dist/cjs/lua/aa.js +230 -0
  30. package/dist/cjs/lua/aa.js.map +1 -0
  31. package/dist/cjs/lua/addressing.js +118 -0
  32. package/dist/cjs/lua/addressing.js.map +1 -0
  33. package/dist/cjs/lua/api.js +736 -0
  34. package/dist/cjs/lua/api.js.map +1 -0
  35. package/dist/cjs/lua/asm.js +220 -0
  36. package/dist/cjs/lua/asm.js.map +1 -0
  37. package/dist/cjs/lua/bridge.js +526 -0
  38. package/dist/cjs/lua/bridge.js.map +1 -0
  39. package/dist/cjs/lua/marshal.js +562 -0
  40. package/dist/cjs/lua/marshal.js.map +1 -0
  41. package/dist/cjs/lua/memory.js +213 -0
  42. package/dist/cjs/lua/memory.js.map +1 -0
  43. package/dist/cjs/lua/objects.js +1070 -0
  44. package/dist/cjs/lua/objects.js.map +1 -0
  45. package/dist/cjs/lua/scan.js +543 -0
  46. package/dist/cjs/lua/scan.js.map +1 -0
  47. package/dist/cjs/lua/types.js +103 -0
  48. package/dist/cjs/lua/types.js.map +1 -0
  49. package/dist/cjs/scanner/matcher.js +781 -0
  50. package/dist/cjs/scanner/matcher.js.map +1 -0
  51. package/dist/cjs/scanner/pointer-scan.js +546 -0
  52. package/dist/cjs/scanner/pointer-scan.js.map +1 -0
  53. package/dist/cjs/scanner/scanner.js +513 -0
  54. package/dist/cjs/scanner/scanner.js.map +1 -0
  55. package/dist/cjs/scanner/shared-layout.js +207 -0
  56. package/dist/cjs/scanner/shared-layout.js.map +1 -0
  57. package/dist/cjs/types.js +190 -0
  58. package/dist/cjs/types.js.map +1 -0
  59. package/dist/cjs/value-codec.js +515 -0
  60. package/dist/cjs/value-codec.js.map +1 -0
  61. package/dist/cjs/win/process.js +475 -0
  62. package/dist/cjs/win/process.js.map +1 -0
  63. package/dist/cjs/win/scan-worker.js +84 -0
  64. package/dist/cjs/win/scan-worker.js.map +1 -0
  65. package/dist/cjs/win/winapi.js +403 -0
  66. package/dist/cjs/win/winapi.js.map +1 -0
  67. package/dist/types/addr/expression.d.ts +98 -0
  68. package/dist/types/addr/expression.d.ts.map +1 -0
  69. package/dist/types/addresslist/memory-record.d.ts +218 -0
  70. package/dist/types/addresslist/memory-record.d.ts.map +1 -0
  71. package/dist/types/asm/assembler.d.ts +106 -0
  72. package/dist/types/asm/assembler.d.ts.map +1 -0
  73. package/dist/types/asm/autoassembler-directives.d.ts +118 -0
  74. package/dist/types/asm/autoassembler-directives.d.ts.map +1 -0
  75. package/dist/types/asm/autoassembler.d.ts +434 -0
  76. package/dist/types/asm/autoassembler.d.ts.map +1 -0
  77. package/dist/types/asm/backend.d.ts +167 -0
  78. package/dist/types/asm/backend.d.ts.map +1 -0
  79. package/dist/types/asm/disassembler.d.ts +194 -0
  80. package/dist/types/asm/disassembler.d.ts.map +1 -0
  81. package/dist/types/backend/dbk-backend.d.ts +353 -0
  82. package/dist/types/backend/dbk-backend.d.ts.map +1 -0
  83. package/dist/types/backend/native-ce-backend.d.ts +213 -0
  84. package/dist/types/backend/native-ce-backend.d.ts.map +1 -0
  85. package/dist/types/backend/self-backend.d.ts +64 -0
  86. package/dist/types/backend/self-backend.d.ts.map +1 -0
  87. package/dist/types/backend/types.d.ts +176 -0
  88. package/dist/types/backend/types.d.ts.map +1 -0
  89. package/dist/types/cheattable/ct-format.d.ts +100 -0
  90. package/dist/types/cheattable/ct-format.d.ts.map +1 -0
  91. package/dist/types/index.d.ts +54 -0
  92. package/dist/types/index.d.ts.map +1 -0
  93. package/dist/types/lua/aa.d.ts +107 -0
  94. package/dist/types/lua/aa.d.ts.map +1 -0
  95. package/dist/types/lua/addressing.d.ts +41 -0
  96. package/dist/types/lua/addressing.d.ts.map +1 -0
  97. package/dist/types/lua/api.d.ts +46 -0
  98. package/dist/types/lua/api.d.ts.map +1 -0
  99. package/dist/types/lua/asm.d.ts +42 -0
  100. package/dist/types/lua/asm.d.ts.map +1 -0
  101. package/dist/types/lua/bridge.d.ts +129 -0
  102. package/dist/types/lua/bridge.d.ts.map +1 -0
  103. package/dist/types/lua/marshal.d.ts +244 -0
  104. package/dist/types/lua/marshal.d.ts.map +1 -0
  105. package/dist/types/lua/memory.d.ts +61 -0
  106. package/dist/types/lua/memory.d.ts.map +1 -0
  107. package/dist/types/lua/objects.d.ts +210 -0
  108. package/dist/types/lua/objects.d.ts.map +1 -0
  109. package/dist/types/lua/scan.d.ts +106 -0
  110. package/dist/types/lua/scan.d.ts.map +1 -0
  111. package/dist/types/lua/types.d.ts +146 -0
  112. package/dist/types/lua/types.d.ts.map +1 -0
  113. package/dist/types/scanner/matcher.d.ts +122 -0
  114. package/dist/types/scanner/matcher.d.ts.map +1 -0
  115. package/dist/types/scanner/pointer-scan.d.ts +187 -0
  116. package/dist/types/scanner/pointer-scan.d.ts.map +1 -0
  117. package/dist/types/scanner/scanner.d.ts +150 -0
  118. package/dist/types/scanner/scanner.d.ts.map +1 -0
  119. package/dist/types/scanner/shared-layout.d.ts +96 -0
  120. package/dist/types/scanner/shared-layout.d.ts.map +1 -0
  121. package/dist/types/types.d.ts +239 -0
  122. package/dist/types/types.d.ts.map +1 -0
  123. package/dist/types/value-codec.d.ts +134 -0
  124. package/dist/types/value-codec.d.ts.map +1 -0
  125. package/dist/types/win/process.d.ts +190 -0
  126. package/dist/types/win/process.d.ts.map +1 -0
  127. package/dist/types/win/scan-worker.d.ts +51 -0
  128. package/dist/types/win/scan-worker.d.ts.map +1 -0
  129. package/dist/types/win/winapi.d.ts +144 -0
  130. package/dist/types/win/winapi.d.ts.map +1 -0
  131. package/docs/assembler.md +371 -0
  132. package/docs/autoassembler.md +423 -0
  133. package/docs/backend-dbk.md +305 -0
  134. package/docs/backends.md +273 -0
  135. package/docs/evidence/atomics-wait-io.js +20 -0
  136. package/docs/evidence/mini-repro.js +98 -0
  137. package/docs/lua-api.md +718 -0
  138. package/package.json +60 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/scanner/matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,546 @@
1
+ "use strict";
2
+ /**
3
+ * 指针扫描 —— 对齐 Cheat Engine `pointerscancontroller.pas` / `pointerscanstructures.pas`。
4
+ *
5
+ * 目标:找出 "基址 + 多级偏移" 表达式,使得
6
+ * `[ [ [base + off[N]] + off[N-1] ] ... + off[1] ] == targetAddress`
7
+ *
8
+ * CE 的做法分两步(本实现一致):
9
+ * 1. 建立**指针映射**(pointermap):遍历目标进程所有可扫描段,
10
+ * 把每个"看起来像指针"的槽位记为 (存放地址 storeAddr, 指向值 ptrValue)。
11
+ * 只收对齐槽位,且 ptrValue 必须落在某个已提交区域内(否则不可能是有效指针)。
12
+ * 2. **逐级回溯**:第 0 级的"待匹配地址集合"只有 targetAddress。
13
+ * 对每一级,在指针映射里找那些 ptrValue ∈ 当前集合的槽位;
14
+ * 于是 storeAddr 成为上一级的待匹配地址,偏移 = 当前地址 − ptrValue。
15
+ * 重复 maxLevel 次,得到 基址 → 偏移链。
16
+ * 最后按 maxOffset / maxDifferentOffsets / 是否允许负偏移做剪枝。
17
+ *
18
+ * 与 CE 的差异:
19
+ * - CE 把指针映射缓存为 .scandata 二进制文件(PSCAN 格式)可跨会话复用;
20
+ * 本实现提供内存缓存,并支持导出为 JSON(格式见 docs/pscan-format.md),
21
+ * 与 CE 的二进制格式不兼容。
22
+ * - CE 的 "Only find static addresses" 用模块列表判定;这里用 MEM_IMAGE 判定。
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.PointerScanner = void 0;
26
+ exports.formatPointerPath = formatPointerPath;
27
+ exports.applyPointerPath = applyPointerPath;
28
+ const process_1 = require("../win/process");
29
+ const types_1 = require("../types");
30
+ /**
31
+ * 指针扫描器。
32
+ *
33
+ * ```ts
34
+ * const ps = new PointerScanner(proc, { maxLevel: 5, maxOffset: 2048 });
35
+ * const paths = ps.scan(targetAddress);
36
+ * for (const p of paths) console.log(formatPointerPath(p));
37
+ * ```
38
+ */
39
+ class PointerScanner {
40
+ proc;
41
+ opts;
42
+ /** 缓存的指针映射(同一进程可复用) */
43
+ pointerMap = null;
44
+ /** 记录静态区范围,用于 staticOnly 判定 */
45
+ staticRanges = [];
46
+ /** 已提交区域范围(升序),用于判定某值是否可能是有效指针 */
47
+ committedRanges = [];
48
+ lastStats = null;
49
+ constructor(process, options = {}) {
50
+ if (!process.isOpen)
51
+ throw new Error('指针扫描需要一个已打开的进程');
52
+ this.proc = process;
53
+ const pointerSize = options.pointerSize ?? (process.isWow64() ? 4 : 8);
54
+ this.opts = {
55
+ ...options,
56
+ maxLevel: options.maxLevel ?? 5,
57
+ maxOffset: options.maxOffset ?? 2048,
58
+ preferShallow: options.preferShallow === true,
59
+ maxDifferentOffsets: options.maxDifferentOffsets ?? 0,
60
+ allowNegativeOffsets: options.allowNegativeOffsets === true,
61
+ staticOnly: options.staticOnly === true,
62
+ pointerSize,
63
+ maxResults: options.maxResults ?? 0,
64
+ maxSegments: options.maxSegments ?? 0,
65
+ };
66
+ if (this.opts.maxLevel < 1)
67
+ throw new RangeError('maxLevel 必须 ≥ 1');
68
+ if (this.opts.maxOffset < 0)
69
+ throw new RangeError('maxOffset 不能为负');
70
+ }
71
+ get stats() {
72
+ return this.lastStats;
73
+ }
74
+ /** 指针映射是否已建好(可跳过一次全量建档)。 */
75
+ get hasPointerMap() {
76
+ return this.pointerMap !== null;
77
+ }
78
+ /** 丢弃已建好的指针映射。 */
79
+ clearPointerMap() {
80
+ this.pointerMap = null;
81
+ }
82
+ /** 执行指针扫描。 */
83
+ scan(targetAddress) {
84
+ const started = Date.now();
85
+ const map = this.ensurePointerMap();
86
+ const levelCounts = [];
87
+ // 第 0 级:只有目标地址
88
+ let current = [{ address: targetAddress, offsets: [] }];
89
+ const results = [];
90
+ const preferShallow = this.opts.preferShallow === true;
91
+ /**
92
+ * 把某一层的候选收进结果。
93
+ *
94
+ * 偏移链顺序修正:回溯时每级是"由目标往基址方向"追加,
95
+ * 而应用方向是"由基址往目标",因此这里反转。
96
+ */
97
+ const collect = (level, paths) => {
98
+ for (const p of paths) {
99
+ if (this.opts.staticOnly && !this.isStatic(p.address))
100
+ continue;
101
+ const entry = {
102
+ baseAddress: p.address,
103
+ offsets: p.offsets.slice().reverse(),
104
+ targetAddress,
105
+ };
106
+ // 只在汇总模式下填 depth:默认模式保持原有的对象形状不变
107
+ if (preferShallow)
108
+ entry.depth = level;
109
+ results.push(entry);
110
+ }
111
+ };
112
+ for (let level = 1; level <= this.opts.maxLevel; level++) {
113
+ const next = this.expandLevel(map, current, level);
114
+ levelCounts.push(next.length);
115
+ if (preferShallow) {
116
+ // 汇总模式:每一层都收,等全部层跑完再统一排序/截断。
117
+ // 这里**不能**提前按 maxResults 截断,否则浅层噪声会把深层的有效路径挤掉。
118
+ collect(level, next);
119
+ if (next.length === 0)
120
+ break;
121
+ current = next;
122
+ continue;
123
+ }
124
+ if (level === this.opts.maxLevel) {
125
+ collect(level, next);
126
+ if (this.opts.maxResults > 0 && results.length >= this.opts.maxResults)
127
+ break;
128
+ break;
129
+ }
130
+ if (next.length === 0)
131
+ break;
132
+ current = next;
133
+ if (this.opts.maxResults > 0 && current.length > this.opts.maxResults * 64) {
134
+ // 防护:中间层候选爆炸时截断(CE 也有类似上限)
135
+ current = current.slice(0, this.opts.maxResults * 64);
136
+ }
137
+ }
138
+ let finalResults = results;
139
+ if (preferShallow && results.length > 0) {
140
+ // 排序:**层数浅优先为主**,同层内静态基址优先。
141
+ //
142
+ // 为什么以层数为主:层数越少越稳定、越不容易断链,而且结果呈现为
143
+ // 「1 级全部 → 2 级全部 → 3 级全部」这种可直接阅读的分组顺序。
144
+ // 反之若以静态为主,序列会变成 3级静态 → 1级动态 → 2级动态 这种跳跃,
145
+ // 使用者看到的第一条未必是最浅的,且难以按层数解读。
146
+ const staticCache = new Map();
147
+ const isStaticCached = (address) => {
148
+ let v = staticCache.get(address);
149
+ if (v === undefined) {
150
+ v = this.isStatic(address);
151
+ staticCache.set(address, v);
152
+ }
153
+ return v;
154
+ };
155
+ finalResults = results
156
+ .map((path, index) => ({ path, index }))
157
+ .sort((a, b) => {
158
+ const da = a.path.depth ?? 0;
159
+ const db = b.path.depth ?? 0;
160
+ if (da !== db)
161
+ return da - db;
162
+ const sa = isStaticCached(a.path.baseAddress) ? 0 : 1;
163
+ const sb = isStaticCached(b.path.baseAddress) ? 0 : 1;
164
+ if (sa !== sb)
165
+ return sa - sb;
166
+ return a.index - b.index;
167
+ })
168
+ .map((entry) => entry.path);
169
+ // ⚠️ **不要在这里截断**。上限统一放在下面的"返回值验证之后"应用。
170
+ //
171
+ // 早先这里按 maxResults 先截断,而验证会丢弃一部分路径(值巧合、
172
+ // 页已回收),于是"请求 10 条"可能只返回 3 条甚至 0 条 ——
173
+ // 明明还有可用的路径,却因为先截断、后丢弃而没机会进入结果。
174
+ // 先验证、再截断,才能保证"最多 N 条"是**上限**而不是**目标值**。
175
+ }
176
+ // ── 返回值验证:丢掉**解析不通**的路径 ──────────────────────────────
177
+ //
178
+ // 为什么需要这一步(这是一个真实缺陷的修复):
179
+ //
180
+ // 指针扫描是按**值匹配**找候选槽的 —— 只要某个 8 字节位置的值恰好落在
181
+ // 目标地址 ±maxOffset 内,它就会被当成"指针槽"。这在真实进程里会大量命中
182
+ // **动态内存**(V8 堆、临时缓冲):里面常常恰好存着某个页基址、或者
183
+ // 由 `base + offset` 这种算式留下的裸 8 字节。
184
+ //
185
+ // 问题在于这些槽**随时可能失效**:目标进程一空闲,GC 就回收那一页,
186
+ // 于是"沿路径读指针"的中间步骤会失败(Win32 998 / 读指针失败),
187
+ // 或者解析出来的地址根本不是原来那个目标。
188
+ //
189
+ // 而调用方对返回值的期望是"**可直接使用**"(`ce_pointer_scan` 会把
190
+ // `expression` 直接交给 `ce_read`)。把验证不通的路径交出去,
191
+ // 等于把这个不确定性转嫁给使用者 —— 实测表现为:
192
+ // · 工具返回的第一条路径 `ce_read` 报 998;
193
+ // · 内核自己的测试偶发失败(`路径 … 解析结果不对` / `读取指针失败`)。
194
+ //
195
+ // 所以这里在返回前**逐条解析一遍**,只保留能真正走通、且解析结果
196
+ // 等于目标地址的路径。验证成本是每条路径几次读内存,相对整张指针映射的
197
+ // 构建成本可以忽略。
198
+ //
199
+ // ⚠️ **失败必须重试,不能一次读失败就丢掉整条路径**。
200
+ // 这是踩过的坑:目标进程是活的,验证那一瞬间某个中间页可能刚好处于
201
+ // 正在被回收/迁移的状态,于是**本来有效的路径**读失败一次。
202
+ // 若据此丢弃,就会出现"本该找到却返回 0 条"的偶发失败
203
+ // (实测:e2e 的指针扫描用例约 4/6 失败)。
204
+ //
205
+ // 区分两种失败:
206
+ // · **地址无效**(算错、段不存在)→ 稳定失败,重试也不会好;
207
+ // · **瞬时读失败**(页正在回收)→ 重试通常立刻成功。
208
+ // 所以"重试若干次仍失败"才丢弃 —— 前者被快速淘汰(每次都失败),
209
+ // 后者被救回来,代价只是极小概率多读几次内存。
210
+ //
211
+ // 注意:这不改变"按值匹配"的召回语义(那与 CE 一致),只是不再把
212
+ // **已经证明不可用**的候选当成结果交付。
213
+ const VERIFY_ATTEMPTS = 3;
214
+ const verified = [];
215
+ let droppedUnresolvable = 0;
216
+ for (const path of finalResults) {
217
+ let ok = false;
218
+ for (let attempt = 0; attempt < VERIFY_ATTEMPTS && !ok; attempt += 1) {
219
+ try {
220
+ ok = this.resolvePath(path) === targetAddress;
221
+ }
222
+ catch {
223
+ // 读不通:可能是页面正在回收(瞬时失败),下一次多半就好
224
+ }
225
+ }
226
+ if (ok)
227
+ verified.push(path);
228
+ else
229
+ droppedUnresolvable += 1;
230
+ }
231
+ // ── 应用结果上限(**必须在验证之后**)──────────────────────────────
232
+ //
233
+ // 两种模式都要遵守 maxResults:
234
+ // · `preferShallow`(汇总模式);
235
+ // · 默认模式(只返回恰好达到 maxLevel 的路径)。
236
+ //
237
+ // ⚠️ 早先**只有汇总模式**遵守上限,默认模式完全无视它 ——
238
+ // 实测 `maxResults=3` 时默认模式返回了 **896 条**。
239
+ // 而 `preferShallow` 那侧又把截断放在了验证**之前**,于是验证丢掉一些
240
+ // 路径后,"最多 N 条"会变成"不足 N 条"(明明还有可用路径没被取到)。
241
+ //
242
+ // 现在统一:先验证(只看有效性)→ 再截断(只看上限)。
243
+ const capped = this.opts.maxResults > 0 ? verified.slice(0, this.opts.maxResults) : verified;
244
+ const elapsedMs = Date.now() - started;
245
+ this.lastStats = {
246
+ segmentsScanned: this.lastSegmentCount,
247
+ bytesIndexed: this.lastBytesIndexed,
248
+ pointerEntries: map.entries.length,
249
+ levelCounts,
250
+ elapsedMs,
251
+ resultCount: capped.length,
252
+ droppedUnresolvable,
253
+ // 候选总数(未按上限截断前)。调用方据此判断"是否触及上限"。
254
+ candidateCount: verified.length,
255
+ };
256
+ return capped;
257
+ }
258
+ /**
259
+ * 沿着一条路径解析出最终地址(用于验证结果)。
260
+ * `readPtr` 由调用方提供,便于在测试中注入。
261
+ */
262
+ resolvePath(path, readPtr) {
263
+ const read = readPtr ?? ((addr) => this.readPointer(addr));
264
+ let addr = path.baseAddress;
265
+ for (const off of path.offsets) {
266
+ addr = read(addr) + BigInt(off);
267
+ }
268
+ return addr;
269
+ }
270
+ /** 读取目标进程中的一个指针值。 */
271
+ readPointer(address) {
272
+ const size = this.opts.pointerSize;
273
+ const buf = this.proc.readMemory(address, size);
274
+ if (buf.length < size) {
275
+ throw new Error(`读取指针失败:0x${address.toString(16)}`);
276
+ }
277
+ return size === 8 ? buf.readBigUInt64LE(0) : BigInt(buf.readUInt32LE(0));
278
+ }
279
+ /* ---------------------------------------------------------------- *
280
+ * 指针映射建档
281
+ * ---------------------------------------------------------------- */
282
+ lastSegmentCount = 0;
283
+ lastBytesIndexed = 0n;
284
+ /** 建立(或复用)指针映射。 */
285
+ ensurePointerMap() {
286
+ if (this.pointerMap)
287
+ return this.pointerMap;
288
+ const pointerSize = this.opts.pointerSize;
289
+ const regions = this.proc.regions();
290
+ // ── 预扫一遍:先确定"哪些地址是有效地址" ──
291
+ // 这一步必须在使用 isCommittedAddress 之前完成,
292
+ // 否则建档时的有效性判定会全部落空(早期版本的顺序错误就出在这里)。
293
+ const committedRanges = [];
294
+ for (const r of regions) {
295
+ if (!r.committed || r.memorySize <= 0n)
296
+ continue;
297
+ committedRanges.push({ start: r.baseAddress, end: r.baseAddress + r.memorySize });
298
+ }
299
+ committedRanges.sort((a, b) => (a.start < b.start ? -1 : a.start > b.start ? 1 : 0));
300
+ this.committedRanges = committedRanges;
301
+ // ── 选出要建档的段 ──
302
+ const segments = [];
303
+ const staticRanges = [];
304
+ for (const r of regions) {
305
+ if (!r.committed)
306
+ continue;
307
+ if ((r.protect & types_1.PAGE_GUARD) !== 0)
308
+ continue;
309
+ if (!(0, process_1.isReadable)(r.protect))
310
+ continue;
311
+ if (r.memorySize <= 0n)
312
+ continue;
313
+ // 过大的段跳过(CE 也会限制单段大小,避免一次性读入几十 GB)
314
+ if (r.memorySize > 0x40000000n)
315
+ continue;
316
+ const end = r.baseAddress + r.memorySize;
317
+ if (this.isExcludedRange(r.baseAddress, end))
318
+ continue;
319
+ segments.push({ start: r.baseAddress, end });
320
+ if (r.type === types_1.MEM_IMAGE)
321
+ staticRanges.push({ start: r.baseAddress, end });
322
+ }
323
+ // isCommittedAddress 依赖二分查找,因此必须按地址升序排序
324
+ segments.sort((a, b) => (a.start < b.start ? -1 : a.start > b.start ? 1 : 0));
325
+ staticRanges.sort((a, b) => (a.start < b.start ? -1 : a.start > b.start ? 1 : 0));
326
+ if (this.opts.maxSegments > 0)
327
+ segments.length = Math.min(segments.length, this.opts.maxSegments);
328
+ // ── 收集条目 ──
329
+ // 关键剪枝(对齐 CE 的指针映射语义):只有"指向已提交内存"的值才可能是有效指针。
330
+ // 不做这层过滤时,任意 8 字节随机数据都会被当成指针,条目数会膨胀到几千万,
331
+ // 既浪费内存也让后续匹配充满噪声。
332
+ const entries = [];
333
+ let bytesIndexed = 0n;
334
+ const CHUNK = 4 * 1024 * 1024;
335
+ const maxPtr = pointerSize === 4 ? 0xffffffffn : 0x7fffffffffffn;
336
+ for (const seg of segments) {
337
+ let addr = seg.start;
338
+ while (addr < seg.end) {
339
+ const take = Number(seg.end - addr > BigInt(CHUNK) ? BigInt(CHUNK) : seg.end - addr);
340
+ const buf = this.proc.readMemory(addr, take);
341
+ bytesIndexed += BigInt(buf.length);
342
+ if (buf.length < pointerSize) {
343
+ addr += BigInt(take);
344
+ continue;
345
+ }
346
+ // 只在指针对齐的槽位取值 —— 对齐 CE 的指针映射行为,也大幅减少条目数
347
+ const limit = buf.length - pointerSize;
348
+ for (let off = 0; off <= limit; off += pointerSize) {
349
+ const v = pointerSize === 8 ? buf.readBigUInt64LE(off) : BigInt(buf.readUInt32LE(off));
350
+ if (v < 0x10000n || v > maxPtr)
351
+ continue;
352
+ if (!this.isCommittedAddress(v))
353
+ continue;
354
+ entries.push({ store: addr + BigInt(off), value: v });
355
+ }
356
+ addr += BigInt(take);
357
+ }
358
+ this.opts.onProgress?.('建立指针映射', entries.length, 0);
359
+ }
360
+ // 按 value 排序,供二分查找(用显式比较器,避免 BigUint64Array.sort 的数值语义差异)
361
+ const n = entries.length;
362
+ const valuesForSort = new Array(n);
363
+ for (let i = 0; i < n; i++)
364
+ valuesForSort[i] = entries[i].value;
365
+ const sortedIdx = Array.from({ length: n }, (_, i) => i).sort((a, b) => {
366
+ const x = valuesForSort[a];
367
+ const y = valuesForSort[b];
368
+ return x < y ? -1 : x > y ? 1 : 0;
369
+ });
370
+ const sortedValues = new BigUint64Array(n);
371
+ const sortedOrder = new Uint32Array(n);
372
+ for (let i = 0; i < n; i++) {
373
+ sortedValues[i] = valuesForSort[sortedIdx[i]];
374
+ sortedOrder[i] = sortedIdx[i];
375
+ }
376
+ this.staticRanges = staticRanges;
377
+ this.lastSegmentCount = segments.length;
378
+ this.lastBytesIndexed = bytesIndexed;
379
+ this.pointerMap = { entries, sortedValues, order: sortedOrder };
380
+ return this.pointerMap;
381
+ }
382
+ /** 该值是否落在某个已提交区域(有效指针的基本条件)。 */
383
+ isCommittedAddress(addr) {
384
+ const ranges = this.committedRanges;
385
+ // 线性扫描对每次调用都太慢,这里用二分(ranges 已按地址升序)
386
+ let lo = 0;
387
+ let hi = ranges.length - 1;
388
+ while (lo <= hi) {
389
+ const mid = (lo + hi) >>> 1;
390
+ const r = ranges[mid];
391
+ if (addr < r.start)
392
+ hi = mid - 1;
393
+ else if (addr >= r.end)
394
+ lo = mid + 1;
395
+ else
396
+ return true;
397
+ }
398
+ return false;
399
+ }
400
+ /**
401
+ * 二分查找"落在 [lo, hi] 区间内"的条目下标范围 `[from, to)`。
402
+ *
403
+ * 这是指针扫描的关键索引操作:`expandLevel` 需要拿到**所有在 maxOffset 窗口内**
404
+ * 指向当前层地址的槽位,再由调用方逐条算出精确偏移。
405
+ *
406
+ * ⚠️ 曾经的严重缺陷:这里原来做的是"值**恰好等于** target"的精确查找,
407
+ * 于是 `expandLevel` 里 `offset = path.address - entry.value` **恒为 0**,
408
+ * `maxOffset` 成了死代码 —— 表现为"只要偏移不为 0 就永远找不到指针路径",
409
+ * 而真实游戏里指针几乎总带偏移,等于指针扫描功能基本失效。
410
+ * 回归测试见 `test/pointer-scan.test.js` 的 "maxOffset 必须真正生效"。
411
+ */
412
+ findValueRange(map, target, maxOffset) {
413
+ const offset = BigInt(Math.max(0, Math.trunc(maxOffset)));
414
+ const lo = target - offset < 0n ? 0n : target - offset;
415
+ const hi = target + offset;
416
+ return [this.lowerBound(map, lo), this.upperBound(map, hi)];
417
+ }
418
+ /** 第一个 `value >= bound` 的下标(标准 lower_bound)。 */
419
+ lowerBound(map, bound) {
420
+ const arr = map.sortedValues;
421
+ let lo = 0;
422
+ let hi = arr.length;
423
+ while (lo < hi) {
424
+ const mid = (lo + hi) >>> 1;
425
+ if (arr[mid] < bound)
426
+ lo = mid + 1;
427
+ else
428
+ hi = mid;
429
+ }
430
+ return lo;
431
+ }
432
+ /** 第一个 `value > bound` 的下标(标准 upper_bound)。 */
433
+ upperBound(map, bound) {
434
+ const arr = map.sortedValues;
435
+ let lo = 0;
436
+ let hi = arr.length;
437
+ while (lo < hi) {
438
+ const mid = (lo + hi) >>> 1;
439
+ if (arr[mid] <= bound)
440
+ lo = mid + 1;
441
+ else
442
+ hi = mid;
443
+ }
444
+ return lo;
445
+ }
446
+ /**
447
+ * 展开一级:对当前每个"待匹配地址",找出所有指向它的槽位,
448
+ * 生成新的候选(存放地址 + 偏移)。
449
+ */
450
+ expandLevel(map, current, level) {
451
+ const out = [];
452
+ const seen = new Set();
453
+ const { maxOffset, allowNegativeOffsets, maxDifferentOffsets } = this.opts;
454
+ for (const path of current) {
455
+ const [from, to] = this.findValueRange(map, path.address, maxOffset);
456
+ if (from === to)
457
+ continue;
458
+ // 同一个 store 可能有多个偏移(若它指向当前层多个地址)
459
+ const perStore = new Map();
460
+ for (let i = from; i < to; i++) {
461
+ const entry = map.entries[map.order[i]];
462
+ const offset = Number(path.address - entry.value);
463
+ if (offset === 0 && !allowNegativeOffsets) {
464
+ // 偏移 0 是合法的(指针直接指向目标),允许保留
465
+ }
466
+ if (Math.abs(offset) > maxOffset)
467
+ continue;
468
+ if (offset < 0 && !allowNegativeOffsets)
469
+ continue;
470
+ const key = entry.store.toString();
471
+ let arr = perStore.get(key);
472
+ if (!arr) {
473
+ arr = [];
474
+ perStore.set(key, arr);
475
+ }
476
+ if (!arr.includes(offset))
477
+ arr.push(offset);
478
+ }
479
+ for (const [storeKey, offsets] of perStore) {
480
+ const store = BigInt(storeKey);
481
+ if (this.isExcludedRange(store, store + 1n))
482
+ continue;
483
+ const list = maxDifferentOffsets > 0 && offsets.length > maxDifferentOffsets
484
+ ? offsets.slice(0, maxDifferentOffsets)
485
+ : offsets;
486
+ for (const off of list) {
487
+ // 新路径:把"本级的偏移"补到偏移链末尾(靠近基址的一端先不加,
488
+ // 因为回溯方向是从目标往基址走,所以这里用 unshift 的逆序语义)
489
+ const newOffsets = path.offsets.slice();
490
+ newOffsets.push(off);
491
+ const dedupKey = storeKey + '|' + newOffsets.join(',');
492
+ if (seen.has(dedupKey))
493
+ continue;
494
+ seen.add(dedupKey);
495
+ out.push({ address: store, offsets: newOffsets });
496
+ }
497
+ }
498
+ }
499
+ void level;
500
+ return out;
501
+ }
502
+ isStatic(addr) {
503
+ for (const r of this.staticRanges) {
504
+ if (addr >= r.start && addr < r.end)
505
+ return true;
506
+ }
507
+ return false;
508
+ }
509
+ isExcludedRange(start, end) {
510
+ const ex = this.opts.excludeSegments;
511
+ if (!ex)
512
+ return false;
513
+ for (const r of ex) {
514
+ if (start < r.end && end > r.start)
515
+ return true;
516
+ }
517
+ return false;
518
+ }
519
+ }
520
+ exports.PointerScanner = PointerScanner;
521
+ /**
522
+ * 把偏移链渲染成 CE 风格的表达式。
523
+ *
524
+ * CE 显示顺序是"从基址到目标":
525
+ * `"game.exe"+00123ABC -> 0x10 -> 0x2C -> 0x8`
526
+ * 本实现的 offsets 数组即该顺序。
527
+ */
528
+ function formatPointerPath(path, moduleOf) {
529
+ const mod = moduleOf?.(path.baseAddress);
530
+ const baseStr = mod
531
+ ? `"${mod.name}"+${(path.baseAddress - mod.base).toString(16).toUpperCase().padStart(8, '0')}`
532
+ : `0x${path.baseAddress.toString(16).toUpperCase()}`;
533
+ const offs = path.offsets
534
+ .map((o) => (o < 0 ? `-${Math.abs(o).toString(16).toUpperCase()}` : o.toString(16).toUpperCase()))
535
+ .join(' -> ');
536
+ return offs ? `${baseStr} -> ${offs}` : baseStr;
537
+ }
538
+ /** 应用一条路径得到最终地址(便捷函数)。 */
539
+ function applyPointerPath(path, readPointer) {
540
+ let addr = path.baseAddress;
541
+ for (const off of path.offsets) {
542
+ addr = readPointer(addr) + BigInt(off);
543
+ }
544
+ return addr;
545
+ }
546
+ //# sourceMappingURL=pointer-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer-scan.js","sourceRoot":"","sources":["../../../src/scanner/pointer-scan.ts"],"names":[],"mappings":"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"}