@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.
- package/PORT-SCOPE.md +169 -0
- package/README.md +451 -2
- package/dist/cjs/addr/expression.js +650 -0
- package/dist/cjs/addr/expression.js.map +1 -0
- package/dist/cjs/addresslist/memory-record.js +612 -0
- package/dist/cjs/addresslist/memory-record.js.map +1 -0
- package/dist/cjs/asm/assembler.js +354 -0
- package/dist/cjs/asm/assembler.js.map +1 -0
- package/dist/cjs/asm/autoassembler-directives.js +362 -0
- package/dist/cjs/asm/autoassembler-directives.js.map +1 -0
- package/dist/cjs/asm/autoassembler.js +2163 -0
- package/dist/cjs/asm/autoassembler.js.map +1 -0
- package/dist/cjs/asm/backend.js +394 -0
- package/dist/cjs/asm/backend.js.map +1 -0
- package/dist/cjs/asm/disassembler.js +715 -0
- package/dist/cjs/asm/disassembler.js.map +1 -0
- package/dist/cjs/backend/dbk-backend.js +683 -0
- package/dist/cjs/backend/dbk-backend.js.map +1 -0
- package/dist/cjs/backend/native-ce-backend.js +667 -0
- package/dist/cjs/backend/native-ce-backend.js.map +1 -0
- package/dist/cjs/backend/self-backend.js +449 -0
- package/dist/cjs/backend/self-backend.js.map +1 -0
- package/dist/cjs/backend/types.js +48 -0
- package/dist/cjs/backend/types.js.map +1 -0
- package/dist/cjs/cheattable/ct-format.js +533 -0
- package/dist/cjs/cheattable/ct-format.js.map +1 -0
- package/dist/cjs/index.js +219 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lua/aa.js +230 -0
- package/dist/cjs/lua/aa.js.map +1 -0
- package/dist/cjs/lua/addressing.js +118 -0
- package/dist/cjs/lua/addressing.js.map +1 -0
- package/dist/cjs/lua/api.js +736 -0
- package/dist/cjs/lua/api.js.map +1 -0
- package/dist/cjs/lua/asm.js +220 -0
- package/dist/cjs/lua/asm.js.map +1 -0
- package/dist/cjs/lua/bridge.js +526 -0
- package/dist/cjs/lua/bridge.js.map +1 -0
- package/dist/cjs/lua/marshal.js +562 -0
- package/dist/cjs/lua/marshal.js.map +1 -0
- package/dist/cjs/lua/memory.js +213 -0
- package/dist/cjs/lua/memory.js.map +1 -0
- package/dist/cjs/lua/objects.js +1070 -0
- package/dist/cjs/lua/objects.js.map +1 -0
- package/dist/cjs/lua/scan.js +543 -0
- package/dist/cjs/lua/scan.js.map +1 -0
- package/dist/cjs/lua/types.js +103 -0
- package/dist/cjs/lua/types.js.map +1 -0
- package/dist/cjs/scanner/matcher.js +781 -0
- package/dist/cjs/scanner/matcher.js.map +1 -0
- package/dist/cjs/scanner/pointer-scan.js +546 -0
- package/dist/cjs/scanner/pointer-scan.js.map +1 -0
- package/dist/cjs/scanner/scanner.js +513 -0
- package/dist/cjs/scanner/scanner.js.map +1 -0
- package/dist/cjs/scanner/shared-layout.js +207 -0
- package/dist/cjs/scanner/shared-layout.js.map +1 -0
- package/dist/cjs/types.js +190 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/value-codec.js +515 -0
- package/dist/cjs/value-codec.js.map +1 -0
- package/dist/cjs/win/process.js +475 -0
- package/dist/cjs/win/process.js.map +1 -0
- package/dist/cjs/win/scan-worker.js +84 -0
- package/dist/cjs/win/scan-worker.js.map +1 -0
- package/dist/cjs/win/winapi.js +403 -0
- package/dist/cjs/win/winapi.js.map +1 -0
- package/dist/types/addr/expression.d.ts +98 -0
- package/dist/types/addr/expression.d.ts.map +1 -0
- package/dist/types/addresslist/memory-record.d.ts +218 -0
- package/dist/types/addresslist/memory-record.d.ts.map +1 -0
- package/dist/types/asm/assembler.d.ts +106 -0
- package/dist/types/asm/assembler.d.ts.map +1 -0
- package/dist/types/asm/autoassembler-directives.d.ts +118 -0
- package/dist/types/asm/autoassembler-directives.d.ts.map +1 -0
- package/dist/types/asm/autoassembler.d.ts +434 -0
- package/dist/types/asm/autoassembler.d.ts.map +1 -0
- package/dist/types/asm/backend.d.ts +167 -0
- package/dist/types/asm/backend.d.ts.map +1 -0
- package/dist/types/asm/disassembler.d.ts +194 -0
- package/dist/types/asm/disassembler.d.ts.map +1 -0
- package/dist/types/backend/dbk-backend.d.ts +353 -0
- package/dist/types/backend/dbk-backend.d.ts.map +1 -0
- package/dist/types/backend/native-ce-backend.d.ts +213 -0
- package/dist/types/backend/native-ce-backend.d.ts.map +1 -0
- package/dist/types/backend/self-backend.d.ts +64 -0
- package/dist/types/backend/self-backend.d.ts.map +1 -0
- package/dist/types/backend/types.d.ts +176 -0
- package/dist/types/backend/types.d.ts.map +1 -0
- package/dist/types/cheattable/ct-format.d.ts +100 -0
- package/dist/types/cheattable/ct-format.d.ts.map +1 -0
- package/dist/types/index.d.ts +54 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lua/aa.d.ts +107 -0
- package/dist/types/lua/aa.d.ts.map +1 -0
- package/dist/types/lua/addressing.d.ts +41 -0
- package/dist/types/lua/addressing.d.ts.map +1 -0
- package/dist/types/lua/api.d.ts +46 -0
- package/dist/types/lua/api.d.ts.map +1 -0
- package/dist/types/lua/asm.d.ts +42 -0
- package/dist/types/lua/asm.d.ts.map +1 -0
- package/dist/types/lua/bridge.d.ts +129 -0
- package/dist/types/lua/bridge.d.ts.map +1 -0
- package/dist/types/lua/marshal.d.ts +244 -0
- package/dist/types/lua/marshal.d.ts.map +1 -0
- package/dist/types/lua/memory.d.ts +61 -0
- package/dist/types/lua/memory.d.ts.map +1 -0
- package/dist/types/lua/objects.d.ts +210 -0
- package/dist/types/lua/objects.d.ts.map +1 -0
- package/dist/types/lua/scan.d.ts +106 -0
- package/dist/types/lua/scan.d.ts.map +1 -0
- package/dist/types/lua/types.d.ts +146 -0
- package/dist/types/lua/types.d.ts.map +1 -0
- package/dist/types/scanner/matcher.d.ts +122 -0
- package/dist/types/scanner/matcher.d.ts.map +1 -0
- package/dist/types/scanner/pointer-scan.d.ts +187 -0
- package/dist/types/scanner/pointer-scan.d.ts.map +1 -0
- package/dist/types/scanner/scanner.d.ts +150 -0
- package/dist/types/scanner/scanner.d.ts.map +1 -0
- package/dist/types/scanner/shared-layout.d.ts +96 -0
- package/dist/types/scanner/shared-layout.d.ts.map +1 -0
- package/dist/types/types.d.ts +239 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/value-codec.d.ts +134 -0
- package/dist/types/value-codec.d.ts.map +1 -0
- package/dist/types/win/process.d.ts +190 -0
- package/dist/types/win/process.d.ts.map +1 -0
- package/dist/types/win/scan-worker.d.ts +51 -0
- package/dist/types/win/scan-worker.d.ts.map +1 -0
- package/dist/types/win/winapi.d.ts +144 -0
- package/dist/types/win/winapi.d.ts.map +1 -0
- package/docs/assembler.md +371 -0
- package/docs/autoassembler.md +423 -0
- package/docs/backend-dbk.md +305 -0
- package/docs/backends.md +273 -0
- package/docs/evidence/atomics-wait-io.js +20 -0
- package/docs/evidence/mini-repro.js +98 -0
- package/docs/lua-api.md +718 -0
- package/package.json +60 -4
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 核心类型定义 —— 与 Cheat Engine 源码严格对齐。
|
|
3
|
+
*
|
|
4
|
+
* 对齐依据(`Cheat Engine/memscan.pas`):
|
|
5
|
+
* type TScanType=(stNewScan=0, stFirstScan=1, stNextScan=2);
|
|
6
|
+
* type TRoundingType=(rtRounded=0,rtExtremerounded=1,rtTruncated=2);
|
|
7
|
+
* type TVariableType=(vtByte=0, vtWord=1, vtDword=2, vtQword=3, vtSingle=4, vtDouble=5,
|
|
8
|
+
* vtString=6, vtUnicodeString=7, vtByteArray=8, vtBinary=9, vtAll=10,
|
|
9
|
+
* vtAutoAssembler=11, vtPointer=12, vtCustom=13, vtGrouped=14, vtByteArrays=15,
|
|
10
|
+
* vtCodePageString=16);
|
|
11
|
+
* type TPointerType=(ptStatic, ptDynamic, ptExecutable);
|
|
12
|
+
* type TScanOption=(soUnknownValue, soExactValue, soValueBetween, soBiggerThan,
|
|
13
|
+
* soSmallerThan, soIncreasedValue, soIncreasedValueBy, soDecreasedValue,
|
|
14
|
+
* soDecreasedValueBy, soChanged, soUnchanged, soIncreasedValueByPercentage,
|
|
15
|
+
* soDecreasedValueByPercentage, soValueBetweenPercentage);
|
|
16
|
+
*/
|
|
17
|
+
/** CE 的 TVariableType,枚举值与源码一一对应。 */
|
|
18
|
+
export declare enum VariableType {
|
|
19
|
+
Byte = 0,
|
|
20
|
+
Word = 1,
|
|
21
|
+
DWord = 2,
|
|
22
|
+
QWord = 3,
|
|
23
|
+
Single = 4,
|
|
24
|
+
Double = 5,
|
|
25
|
+
String = 6,
|
|
26
|
+
UnicodeString = 7,
|
|
27
|
+
ByteArray = 8,
|
|
28
|
+
Binary = 9,
|
|
29
|
+
All = 10,
|
|
30
|
+
AutoAssembler = 11,
|
|
31
|
+
Pointer = 12,
|
|
32
|
+
Custom = 13,
|
|
33
|
+
Grouped = 14,
|
|
34
|
+
ByteArrays = 15,
|
|
35
|
+
CodePageString = 16
|
|
36
|
+
}
|
|
37
|
+
/** 类型名(用于命令行/日志) */
|
|
38
|
+
export declare const VARIABLE_TYPE_NAMES: Record<VariableType, string>;
|
|
39
|
+
/** 每种类型占用的字节宽度;变长/特殊类型为 0(由使用者显式给长度)。 */
|
|
40
|
+
export declare const VARIABLE_TYPE_SIZES: Record<VariableType, number>;
|
|
41
|
+
/** CE 的 TScanOption */
|
|
42
|
+
export declare enum ScanOption {
|
|
43
|
+
UnknownValue = 0,
|
|
44
|
+
ExactValue = 1,
|
|
45
|
+
ValueBetween = 2,
|
|
46
|
+
BiggerThan = 3,
|
|
47
|
+
SmallerThan = 4,
|
|
48
|
+
IncreasedValue = 5,
|
|
49
|
+
IncreasedValueBy = 6,
|
|
50
|
+
DecreasedValue = 7,
|
|
51
|
+
DecreasedValueBy = 8,
|
|
52
|
+
Changed = 9,
|
|
53
|
+
Unchanged = 10,
|
|
54
|
+
IncreasedValueByPercentage = 11,
|
|
55
|
+
DecreasedValueByPercentage = 12,
|
|
56
|
+
ValueBetweenPercentage = 13
|
|
57
|
+
}
|
|
58
|
+
export declare const SCAN_OPTION_NAMES: Record<ScanOption, string>;
|
|
59
|
+
/** CE 的 TRoundingType:浮点比较策略 */
|
|
60
|
+
export declare enum RoundingType {
|
|
61
|
+
/** rtRounded=0 —— 四舍五入到小数位数后严格相等 */
|
|
62
|
+
Rounded = 0,
|
|
63
|
+
/** rtExtremerounded=1 —— 落在 [value-eps, value+eps] 区间 */
|
|
64
|
+
ExtremeRounded = 1,
|
|
65
|
+
/** rtTruncated=2 —— [value, value+step) 左闭右开 */
|
|
66
|
+
Truncated = 2
|
|
67
|
+
}
|
|
68
|
+
/** CE 的 TScanType */
|
|
69
|
+
export declare enum ScanType {
|
|
70
|
+
NewScan = 0,
|
|
71
|
+
FirstScan = 1,
|
|
72
|
+
NextScan = 2
|
|
73
|
+
}
|
|
74
|
+
/** CE 的 TPointerType */
|
|
75
|
+
export declare enum PointerType {
|
|
76
|
+
Static = 0,
|
|
77
|
+
Dynamic = 1,
|
|
78
|
+
Executable = 2
|
|
79
|
+
}
|
|
80
|
+
/** CE 的 TFastScanMethod */
|
|
81
|
+
export declare enum FastScanMethod {
|
|
82
|
+
NotAligned = 0,
|
|
83
|
+
Aligned = 1,
|
|
84
|
+
LastDigits = 2
|
|
85
|
+
}
|
|
86
|
+
/** 指针类型集合(对齐 TPointerTypes = set of TPointerType) */
|
|
87
|
+
export interface PointerTypes {
|
|
88
|
+
static?: boolean;
|
|
89
|
+
dynamic?: boolean;
|
|
90
|
+
executable?: boolean;
|
|
91
|
+
}
|
|
92
|
+
/** 创建"全部指针类型"的便捷值,对齐 CE 默认。 */
|
|
93
|
+
export declare function allPointerTypes(): Required<PointerTypes>;
|
|
94
|
+
/** 内存区域可读性/保护属性,对齐 TaccessRight */
|
|
95
|
+
export interface AccessRights {
|
|
96
|
+
execute?: boolean;
|
|
97
|
+
read?: boolean;
|
|
98
|
+
write?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/** CE 的 TMemoryRegion(精简,用于扫描配置) */
|
|
101
|
+
export interface MemoryRegion {
|
|
102
|
+
baseAddress: bigint;
|
|
103
|
+
memorySize: bigint;
|
|
104
|
+
/** 该区域之前是否已有区域(CE: IsChild) */
|
|
105
|
+
isChild?: boolean;
|
|
106
|
+
/** VirtualQueryEx 的 State == MEM_COMMIT */
|
|
107
|
+
committed: boolean;
|
|
108
|
+
/** 原始 Protect 值 */
|
|
109
|
+
protect: number;
|
|
110
|
+
/** 分配类型:MEM_IMAGE / MEM_MAPPED / MEM_PRIVATE */
|
|
111
|
+
type: number;
|
|
112
|
+
}
|
|
113
|
+
/** 扫描过程中缓存的一块内存(原始内存副本 + 每条记录对应的原始值) */
|
|
114
|
+
export interface ScannedRegion {
|
|
115
|
+
baseAddress: bigint;
|
|
116
|
+
size: number;
|
|
117
|
+
/** 提交状态的保护属性 */
|
|
118
|
+
protect: number;
|
|
119
|
+
/** 分配类型 MEM_IMAGE/MEM_MAPPED/MEM_PRIVATE */
|
|
120
|
+
memType: number;
|
|
121
|
+
}
|
|
122
|
+
/** 一条扫描结果 */
|
|
123
|
+
export interface ScanResult {
|
|
124
|
+
address: bigint;
|
|
125
|
+
/** 首次扫描时若需要保存原始值,此处为该地址在本次扫描快照中的原始字节 */
|
|
126
|
+
previous?: Buffer;
|
|
127
|
+
}
|
|
128
|
+
/** 扫描进度回调,对齐 TMemScanGuiUpdateRoutine */
|
|
129
|
+
export type ScanProgressCallback = (totalAddressesToScan: bigint, currentlyScanned: bigint, foundCount: bigint) => void;
|
|
130
|
+
/** 扫描配置 */
|
|
131
|
+
export interface ScanConfig {
|
|
132
|
+
/** 变量类型 */
|
|
133
|
+
variableType: VariableType;
|
|
134
|
+
/** 扫描选项 */
|
|
135
|
+
scanOption: ScanOption;
|
|
136
|
+
/** 浮点比较策略 */
|
|
137
|
+
roundingType: RoundingType;
|
|
138
|
+
/** 小数位数(CE: floataccuracy,-1 表示使用字符串中的小数位数) */
|
|
139
|
+
floatAccuracy: number;
|
|
140
|
+
/** 扫描值 1(字符串形式,便于精确复刻 CE 的解析行为) */
|
|
141
|
+
value1?: string;
|
|
142
|
+
/** 扫描值 2(区间上界 / 百分比上界) */
|
|
143
|
+
value2?: string;
|
|
144
|
+
/** 是否按十六进制解析输入值 */
|
|
145
|
+
hexadecimal?: boolean;
|
|
146
|
+
/** 符号有无(整数区间) */
|
|
147
|
+
signed?: boolean;
|
|
148
|
+
/** 字符串扫描是否区分大小写(CE 默认不区分) */
|
|
149
|
+
caseSensitive?: boolean;
|
|
150
|
+
/** 文本编码(vtString / vtCodePageString) */
|
|
151
|
+
codePage?: number;
|
|
152
|
+
/** 字符串/Unicode 长度(字符数);未给出时由 value1 推导 */
|
|
153
|
+
stringLength?: number;
|
|
154
|
+
/** 是否仅在可写内存中扫描 */
|
|
155
|
+
writableOnly?: boolean;
|
|
156
|
+
/** 是否仅在可执行内存中扫描 */
|
|
157
|
+
executableOnly?: boolean;
|
|
158
|
+
/** 是否包含 MEM_IMAGE */
|
|
159
|
+
includeImage?: boolean;
|
|
160
|
+
/** 是否包含 MEM_MAPPED */
|
|
161
|
+
includeMapped?: boolean;
|
|
162
|
+
/** 是否包含 MEM_PRIVATE */
|
|
163
|
+
includePrivate?: boolean;
|
|
164
|
+
/** 是否包含 PAGE_GUARD 区域 */
|
|
165
|
+
includeGuard?: boolean;
|
|
166
|
+
/** 对齐方式 */
|
|
167
|
+
fastScanMethod?: FastScanMethod;
|
|
168
|
+
/** fsmLastDigits 时的最后一位数字 */
|
|
169
|
+
fastScanAlignmentLastDigits?: number;
|
|
170
|
+
/** 是否只在 4GB 以下地址扫描(32 位目标) */
|
|
171
|
+
is32Bit?: boolean;
|
|
172
|
+
/** 扫描块大小(字节),默认 4MB */
|
|
173
|
+
blockSize?: number;
|
|
174
|
+
/** 是否在浮点扫描时排除含指数的浮点数(CE: floatscanWithoutExponents) */
|
|
175
|
+
floatScanWithoutExponents?: boolean;
|
|
176
|
+
/** AOB 二进制串(vtBinary 用) */
|
|
177
|
+
binaryString?: string;
|
|
178
|
+
/** vtBinary 是否按十进制解析 */
|
|
179
|
+
binaryStringAsDecimal?: boolean;
|
|
180
|
+
/** 分组长扫描条目 */
|
|
181
|
+
groupElements?: GroupElement[];
|
|
182
|
+
/** 分组长扫描是否允许乱序 */
|
|
183
|
+
groupOutOfOrder?: boolean;
|
|
184
|
+
/** 分组长扫描是否要求按类型宽度对齐 */
|
|
185
|
+
groupAligned?: boolean;
|
|
186
|
+
}
|
|
187
|
+
/** CE 分组长扫描的单个条目(对齐 TGroupData 内部 record) */
|
|
188
|
+
export interface GroupElement {
|
|
189
|
+
variableType: VariableType;
|
|
190
|
+
/** 通配符:只参与偏移计算,不比较数值 */
|
|
191
|
+
wildcard?: boolean;
|
|
192
|
+
value?: string;
|
|
193
|
+
value2?: string;
|
|
194
|
+
hexadecimal?: boolean;
|
|
195
|
+
signed?: boolean;
|
|
196
|
+
floatAccuracy?: number;
|
|
197
|
+
roundingType?: RoundingType;
|
|
198
|
+
/** 字符串长度(字符) */
|
|
199
|
+
stringLength?: number;
|
|
200
|
+
/** vtByteArray 数组 */
|
|
201
|
+
aob?: string;
|
|
202
|
+
/** 指针类型(通配符指针) */
|
|
203
|
+
pointerTypes?: PointerTypes;
|
|
204
|
+
}
|
|
205
|
+
/** 内存保护常量 */
|
|
206
|
+
export declare const MEM_COMMIT = 4096;
|
|
207
|
+
export declare const MEM_RESERVE = 8192;
|
|
208
|
+
export declare const MEM_FREE = 65536;
|
|
209
|
+
export declare const MEM_PRIVATE = 131072;
|
|
210
|
+
export declare const MEM_MAPPED = 262144;
|
|
211
|
+
export declare const MEM_IMAGE = 16777216;
|
|
212
|
+
export declare const PAGE_NOACCESS = 1;
|
|
213
|
+
export declare const PAGE_READONLY = 2;
|
|
214
|
+
export declare const PAGE_READWRITE = 4;
|
|
215
|
+
export declare const PAGE_WRITECOPY = 8;
|
|
216
|
+
export declare const PAGE_EXECUTE = 16;
|
|
217
|
+
export declare const PAGE_EXECUTE_READ = 32;
|
|
218
|
+
export declare const PAGE_EXECUTE_READWRITE = 64;
|
|
219
|
+
export declare const PAGE_EXECUTE_WRITECOPY = 128;
|
|
220
|
+
export declare const PAGE_GUARD = 256;
|
|
221
|
+
export declare const PAGE_NOCACHE = 512;
|
|
222
|
+
export declare const PAGE_WRITECOMBINE = 1024;
|
|
223
|
+
/** 进程访问权限常量 */
|
|
224
|
+
export declare const PROCESS_TERMINATE = 1;
|
|
225
|
+
export declare const PROCESS_CREATE_THREAD = 2;
|
|
226
|
+
export declare const PROCESS_VM_OPERATION = 8;
|
|
227
|
+
export declare const PROCESS_VM_READ = 16;
|
|
228
|
+
export declare const PROCESS_VM_WRITE = 32;
|
|
229
|
+
export declare const PROCESS_QUERY_INFORMATION = 1024;
|
|
230
|
+
export declare const PROCESS_QUERY_LIMITED_INFORMATION = 4096;
|
|
231
|
+
export declare const PROCESS_SUSPEND_RESUME = 2048;
|
|
232
|
+
/**
|
|
233
|
+
* 打开进程所需的最小权限组合。
|
|
234
|
+
* 对齐 CE 的 ProcessHandler:读写 + 查询 + 分配/保护内存。
|
|
235
|
+
*/
|
|
236
|
+
export declare const DEFAULT_PROCESS_ACCESS: number;
|
|
237
|
+
/** 64 位用户态最高地址(不含),用于 VirtualQueryEx 遍历上界。 */
|
|
238
|
+
export declare const MAX_USER_ADDRESS_64 = 140737488355327n;
|
|
239
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数值编解码层 —— 与 Cheat Engine `memscan.pas` 的变量类型语义严格对齐。
|
|
3
|
+
*
|
|
4
|
+
* 本模块负责三件事:
|
|
5
|
+
* 1. 从 Buffer 中按 CE 的变量类型读写数值(含大小端、精度、有符号/无符号);
|
|
6
|
+
* 2. 复刻 CE 的扫描值解析(十六进制前缀、区间、百分比、小数位数 floataccuracy);
|
|
7
|
+
* 3. 复刻 CE 的浮点比较策略(rtRounded / rtExtremerounded / rtTruncated)。
|
|
8
|
+
*
|
|
9
|
+
* 对齐依据:`memscan.pas` 的 SingleExact/DoubleExact/SingleBetween 等
|
|
10
|
+
* 以及 setScanValueFloat 片段(floataccuracy 计算、RoundTo 调用、min/max 边界)。
|
|
11
|
+
*/
|
|
12
|
+
import { RoundingType, VariableType } from './types';
|
|
13
|
+
export declare function readUInt8(buf: Buffer, off: number): number;
|
|
14
|
+
export declare function readInt8(buf: Buffer, off: number): number;
|
|
15
|
+
export declare function readUInt16(buf: Buffer, off: number): number;
|
|
16
|
+
export declare function readInt16(buf: Buffer, off: number): number;
|
|
17
|
+
export declare function readUInt32(buf: Buffer, off: number): number;
|
|
18
|
+
export declare function readInt32(buf: Buffer, off: number): number;
|
|
19
|
+
export declare function readUInt64(buf: Buffer, off: number): bigint;
|
|
20
|
+
export declare function readInt64(buf: Buffer, off: number): bigint;
|
|
21
|
+
export declare function readSingle(buf: Buffer, off: number): number;
|
|
22
|
+
export declare function readDouble(buf: Buffer, off: number): number;
|
|
23
|
+
export declare function writeUInt8(buf: Buffer, off: number, v: number | bigint): void;
|
|
24
|
+
export declare function writeUInt16(buf: Buffer, off: number, v: number | bigint): void;
|
|
25
|
+
export declare function writeUInt32(buf: Buffer, off: number, v: number | bigint): void;
|
|
26
|
+
export declare function writeUInt64(buf: Buffer, off: number, v: number | bigint): void;
|
|
27
|
+
export declare function writeSingle(buf: Buffer, off: number, v: number): void;
|
|
28
|
+
export declare function writeDouble(buf: Buffer, off: number, v: number): void;
|
|
29
|
+
/** 按变量类型把值写入 buffer(写入路径的统一起点)。 */
|
|
30
|
+
export declare function writeValue(buf: Buffer, off: number, type: VariableType, value: number | bigint | string): void;
|
|
31
|
+
export declare function roundTo(value: number, decimals: number): number;
|
|
32
|
+
export interface ParsedNumber {
|
|
33
|
+
/** 解析出的原始数值(无符号 64 位语义) */
|
|
34
|
+
raw: bigint;
|
|
35
|
+
/** 该值是否为负数写法(决定区间比较时用有符号解释) */
|
|
36
|
+
negative: boolean;
|
|
37
|
+
/** 是否按十六进制解析 */
|
|
38
|
+
hex: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 解析 CE 风格的整数字面量。
|
|
42
|
+
* 支持:十进制、`$`/`0x` 前缀十六进制、可选的 `+`/`-` 前缀。
|
|
43
|
+
* 无效时抛错,便于 CLI 给出明确提示。
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseIntegerLiteral(input: string, forceHex?: boolean): ParsedNumber;
|
|
46
|
+
/** 解析浮点字面量(支持科学计数法)。 */
|
|
47
|
+
export declare function parseFloatLiteral(input: string): number;
|
|
48
|
+
/** 统计字符串中的小数位数,对齐 CE 的 floataccuracy 推导。 */
|
|
49
|
+
export declare function decimalsOf(input: string): number;
|
|
50
|
+
export interface FloatCompareParams {
|
|
51
|
+
/** 目标值(double 语义) */
|
|
52
|
+
value: number;
|
|
53
|
+
/** 目标值(single 语义,CE: svalue) */
|
|
54
|
+
single: number;
|
|
55
|
+
/** 小数位数 */
|
|
56
|
+
accuracy: number;
|
|
57
|
+
/** 区间上界 */
|
|
58
|
+
value2?: number;
|
|
59
|
+
single2?: number;
|
|
60
|
+
/** extreme-rounded 边界 */
|
|
61
|
+
minSingle: number;
|
|
62
|
+
maxSingle: number;
|
|
63
|
+
minDouble: number;
|
|
64
|
+
maxDouble: number;
|
|
65
|
+
/** truncated 上界 */
|
|
66
|
+
maxTruncSingle: number;
|
|
67
|
+
maxTruncDouble: number;
|
|
68
|
+
/** 百分比模式下已换算为倍率的值 */
|
|
69
|
+
isPercentage: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 由用户输入推导浮点比较参数。
|
|
73
|
+
*
|
|
74
|
+
* 对齐 CE `setScanValueFloat`:
|
|
75
|
+
* - floataccuracy = 去掉小数点后的位数(含 E 时置 0)
|
|
76
|
+
* - 非百分比且 accuracy != 0 时,对 svalue/svalue2/dvalue/dvalue2 做 RoundTo(., -accuracy)
|
|
77
|
+
* - accuracy != 0: min/max = value ∓ 1/10^accuracy
|
|
78
|
+
* 否则: min/max = value ∓ 1
|
|
79
|
+
* - truncated 模式 CE 使用 maxsvalue/maxdvalue 作为上界
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildFloatCompareParams(value1: string, value2: string | undefined, isPercentage: boolean): FloatCompareParams;
|
|
82
|
+
/** 对齐 TScanner.SingleExact(注意 rtExtremerounded 用闭区间 ≥/≤)。 */
|
|
83
|
+
export declare function singleMatches(actual: number, p: FloatCompareParams, rounding: RoundingType): boolean;
|
|
84
|
+
/** 对齐 TScanner.DoubleExact(注意 rtExtremerounded 用开区间 >/<)。 */
|
|
85
|
+
export declare function doubleMatches(actual: number, p: FloatCompareParams, rounding: RoundingType): boolean;
|
|
86
|
+
/** AOB 的单个字节模式:wildcard 或带可选半字节掩码。 */
|
|
87
|
+
export interface PatternByte {
|
|
88
|
+
/** 是否为完全通配 */
|
|
89
|
+
wildcard: boolean;
|
|
90
|
+
/** 必须匹配的值 */
|
|
91
|
+
value: number;
|
|
92
|
+
/** 掩码(与上内存字节后的结果需等于 value) */
|
|
93
|
+
mask: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 解析 AOB 字符串,对齐 `parsers.ConvertStringToBytes` + 半字节通配支持。
|
|
97
|
+
*
|
|
98
|
+
* 支持:
|
|
99
|
+
* - `90 90 ??`、`90,90,xx`、`9090??`(- 、 , 、空格均为分隔符,且允许两字符一组连写)
|
|
100
|
+
* - 半字节通配 `7*`、`*7`,对齐 CE 的 $8000f070 / $80000f07 编码语义
|
|
101
|
+
*/
|
|
102
|
+
export declare function parseAob(input: string, hexadecimal?: boolean): PatternByte[];
|
|
103
|
+
/** 判断 AOB 模式中是否含有半字节级通配(决定是否走慢路径)。 */
|
|
104
|
+
export declare function aobHasNibbleWildcard(pattern: PatternByte[]): boolean;
|
|
105
|
+
/** 在缓冲区指定偏移处比较 AOB 模式。 */
|
|
106
|
+
export declare function aobMatchesAt(buf: Buffer, off: number, pattern: PatternByte[], nibbleSupport: boolean): boolean;
|
|
107
|
+
/** vtBinary 的匹配参数,对齐 CE 的 andmask / bitmask 推导。 */
|
|
108
|
+
export interface BinaryPattern {
|
|
109
|
+
andMask: bigint;
|
|
110
|
+
bitMask: bigint;
|
|
111
|
+
bitCount: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 由位串推导 andmask/bitmask,对齐 CE setScanValue 中 vtBinary 分支:
|
|
115
|
+
* '?' 或 '*' → andmask 位 0,bitmask 位 0
|
|
116
|
+
* '0' / '1' → andmask 位 1,bitmask 位取该数字
|
|
117
|
+
*/
|
|
118
|
+
export declare function parseBinaryPattern(input: string): BinaryPattern;
|
|
119
|
+
/** 位串在内存中的字节宽度(向上取整)。 */
|
|
120
|
+
export declare function binaryByteWidth(bitCount: number): number;
|
|
121
|
+
/** 对齐 testString:区分大小写 */
|
|
122
|
+
export declare function testString(buf: Buffer, off: number, target: string): boolean;
|
|
123
|
+
/** 对齐 testWideString:UTF-16LE 区分大小写 */
|
|
124
|
+
export declare function testWideString(buf: Buffer, off: number, target: string): boolean;
|
|
125
|
+
/** 对齐 CaseInsensitiveAnsiStringExact:仅 ASCII a-z 折叠为大写。 */
|
|
126
|
+
export declare function testStringCI(buf: Buffer, off: number, upperTarget: string): boolean;
|
|
127
|
+
/** 对齐 CaseInsensitiveUnicodeStringExact:用 UpCase 逐字符比较。 */
|
|
128
|
+
export declare function testWideStringCI(buf: Buffer, off: number, target: string): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* 对齐 FPC 的 system.UpCase(宽字符版):
|
|
131
|
+
* 只处理 Latin-1 的 a-z / à-þ 等基本区段,这里复刻 ASCII + Latin-1 行为。
|
|
132
|
+
*/
|
|
133
|
+
export declare function upCaseWide(c: number): number;
|
|
134
|
+
//# sourceMappingURL=value-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-codec.d.ts","sourceRoot":"","sources":["../../src/value-codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMrD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AACD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AACD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AACD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AACD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AACD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9E;AACD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9E;AACD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9E;AACD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAErE;AACD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAErE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAC9B,IAAI,CAmCN;AA+BD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB/D;AAMD,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,YAAY,CA+BjF;AAED,wBAAwB;AACxB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAMD,MAAM,WAAW,kBAAkB;IACjC,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAsDpB;AAMD,6DAA6D;AAC7D,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,kBAAkB,EACrB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAWT;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,kBAAkB,EACrB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAWT;AAMD,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,cAAc;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAO,GAAG,WAAW,EAAE,CAyDzE;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAEpE;AAED,0BAA0B;AAC1B,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,EAAE,EACtB,aAAa,EAAE,OAAO,GACrB,OAAO,CAmBT;AAMD,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAsB/D;AAED,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAMD,0BAA0B;AAC1B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM5E;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOhF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAQnF;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQlF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5C"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进程与内存访问层 —— 后端无关的门面。
|
|
3
|
+
*
|
|
4
|
+
* 本文件不再直接调用 Win32 API,而是委托给 `MemoryBackend`:
|
|
5
|
+
* - `SelfBackend` → 自研引擎(默认,本进程内直接调用 Win32)
|
|
6
|
+
* - `NativeCeBackend` → 原生 CE 兼容层(连接 ceserver 的 TCP 协议)
|
|
7
|
+
*
|
|
8
|
+
* 因此 `Process` 的用法在两种后端下完全一致:
|
|
9
|
+
* ```ts
|
|
10
|
+
* const p = Process.open(pid); // 默认自研后端
|
|
11
|
+
* const p2 = Process.open(pid, { backend: native }); // 走原生 CE
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* 性能提示:CE 扫描时把整段内存拷进缓冲区再本地比较,本移植沿用同一思路,
|
|
15
|
+
* 因此后端只需要提供一个"按块读内存"的原语即可,比较逻辑全在上层。
|
|
16
|
+
*/
|
|
17
|
+
import { DEFAULT_PROCESS_ACCESS, MEM_COMMIT, MEM_IMAGE, MEM_MAPPED, MEM_PRIVATE, MemoryRegion, PAGE_GUARD } from '../types';
|
|
18
|
+
import { BackendProcessHandle, BackendRegionFilter, MemoryBackend } from '../backend/types';
|
|
19
|
+
export { isReadable, isWritable, isExecutable } from '../backend/self-backend';
|
|
20
|
+
/** 取进程内共享的默认后端(自研引擎)。 */
|
|
21
|
+
export declare function getDefaultBackend(): MemoryBackend;
|
|
22
|
+
/** 替换默认后端(例如全局切到原生 CE)。传入 null 恢复自研后端。 */
|
|
23
|
+
export declare function setDefaultBackend(backend: MemoryBackend | null): void;
|
|
24
|
+
/** `Process.open` 的选项 */
|
|
25
|
+
export interface OpenProcessOptions {
|
|
26
|
+
/** 使用哪个后端;省略则用默认后端 */
|
|
27
|
+
backend?: MemoryBackend;
|
|
28
|
+
/** 请求的进程访问权限(仅自研后端支持) */
|
|
29
|
+
access?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ProcessInfo {
|
|
32
|
+
pid: number;
|
|
33
|
+
name: string;
|
|
34
|
+
parentPid: number;
|
|
35
|
+
threadCount: number;
|
|
36
|
+
/** 是否存在同名多进程 */
|
|
37
|
+
duplicateName?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** 枚举全部进程(使用默认后端;同步后端专用,异步后端请用 listProcessesAsync) */
|
|
40
|
+
export declare function listProcesses(backend?: MemoryBackend): ProcessInfo[];
|
|
41
|
+
/** 按名字查进程(不区分大小写,包含匹配) */
|
|
42
|
+
export declare function findProcessesByName(name: string, backend?: MemoryBackend): ProcessInfo[];
|
|
43
|
+
/** 枚举全部进程(异步;对同步与异步后端都可用) */
|
|
44
|
+
export declare function listProcessesAsync(backend?: MemoryBackend): Promise<ProcessInfo[]>;
|
|
45
|
+
/** 按名字查进程(异步) */
|
|
46
|
+
export declare function findProcessesByNameAsync(name: string, backend?: MemoryBackend): Promise<ProcessInfo[]>;
|
|
47
|
+
/** 可扫描区域过滤条件,对齐 CE 的扫描设置 */
|
|
48
|
+
export interface RegionFilter extends BackendRegionFilter {
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 枚举进程内存区域。
|
|
52
|
+
*
|
|
53
|
+
* 只接受 `Process` 实例(早期版本接受裸 Win32 句柄,那样无法支持原生 CE 后端,
|
|
54
|
+
* 因此移除;请用 `process.regions()`)。
|
|
55
|
+
*/
|
|
56
|
+
export declare function enumerateRegions(process: Process, options?: {
|
|
57
|
+
includeFree?: boolean;
|
|
58
|
+
maxAddress?: bigint;
|
|
59
|
+
}): MemoryRegion[];
|
|
60
|
+
/** 选出"可扫描"的内存区域(对齐 CE 首次扫描的默认行为) */
|
|
61
|
+
export declare function selectScannableRegions(process: Process, filter?: RegionFilter): MemoryRegion[];
|
|
62
|
+
/** 打开进程失败时抛出的错误,带 pid 与 Win32 错误码(若后端提供)。 */
|
|
63
|
+
export declare class ProcessOpenError extends Error {
|
|
64
|
+
readonly pid: number;
|
|
65
|
+
readonly win32Code: number;
|
|
66
|
+
constructor(pid: number, win32Code: number, message?: string);
|
|
67
|
+
}
|
|
68
|
+
export interface ProcessModule {
|
|
69
|
+
name: string;
|
|
70
|
+
path: string;
|
|
71
|
+
baseAddress: bigint;
|
|
72
|
+
size: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 一个已打开的目标进程。
|
|
76
|
+
*
|
|
77
|
+
* 生命周期:
|
|
78
|
+
* ```ts
|
|
79
|
+
* const p = Process.open(pid);
|
|
80
|
+
* try { ... } finally { p.close(); }
|
|
81
|
+
* ```
|
|
82
|
+
* 也支持 `using`(Symbol.dispose)。
|
|
83
|
+
*/
|
|
84
|
+
export declare class Process {
|
|
85
|
+
readonly pid: number;
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly backend: MemoryBackend;
|
|
88
|
+
private readonly handle;
|
|
89
|
+
private closed;
|
|
90
|
+
private constructor();
|
|
91
|
+
/** 按 pid 打开进程(同步后端专用;异步后端请用 openProcessAsync) */
|
|
92
|
+
static open(pid: number, options?: OpenProcessOptions): Process;
|
|
93
|
+
/** 按进程名打开;同名多进程时选第一个 */
|
|
94
|
+
static openByName(name: string, options?: OpenProcessOptions): Process;
|
|
95
|
+
/** 按进程名打开全部同名进程 */
|
|
96
|
+
static openByNameAll(name: string, options?: OpenProcessOptions): Process[];
|
|
97
|
+
/**
|
|
98
|
+
* 由"已打开的后端句柄"构造 Process —— 供异步打开路径使用。
|
|
99
|
+
* 一般业务代码请用 `Process.open` / `openProcessAsync`。
|
|
100
|
+
*/
|
|
101
|
+
static fromHandle(pid: number, name: string, backend: MemoryBackend, handle: BackendProcessHandle): Process;
|
|
102
|
+
get isOpen(): boolean;
|
|
103
|
+
/** 所属后端名称 */
|
|
104
|
+
get backendName(): string;
|
|
105
|
+
/**
|
|
106
|
+
* 底层后端句柄 —— 供需要直接调用后端的扩展代码使用
|
|
107
|
+
* (例如 Lua 桥要把句柄转成整数传给脚本)。
|
|
108
|
+
* 一般业务代码应优先使用 Process 的高层方法。
|
|
109
|
+
*/
|
|
110
|
+
get backendHandle(): BackendProcessHandle;
|
|
111
|
+
private assertOpen;
|
|
112
|
+
/** 是否为 WOW64(32 位)进程 */
|
|
113
|
+
isWow64(): boolean;
|
|
114
|
+
/** 列出全部内存区域 */
|
|
115
|
+
regions(options?: {
|
|
116
|
+
includeFree?: boolean;
|
|
117
|
+
maxAddress?: bigint;
|
|
118
|
+
}): MemoryRegion[];
|
|
119
|
+
/** 列出可扫描区域 */
|
|
120
|
+
scannableRegions(filter?: RegionFilter): MemoryRegion[];
|
|
121
|
+
/**
|
|
122
|
+
* 读取内存。整块读取失败时由后端做二分回退。
|
|
123
|
+
* @returns 实际读到的数据(长度可能小于请求)
|
|
124
|
+
*/
|
|
125
|
+
readMemory(address: bigint, size: number): Buffer;
|
|
126
|
+
/** 读取失败时抛错的严格版本 */
|
|
127
|
+
readMemoryExact(address: bigint, size: number): Buffer;
|
|
128
|
+
/**
|
|
129
|
+
* 写入内存。默认在写只读页前临时改保护(与 CE 的 writeprocessmemory 行为一致)。
|
|
130
|
+
* @returns 实际写入字节数
|
|
131
|
+
*/
|
|
132
|
+
writeMemory(address: bigint, data: Buffer, fixProtection?: boolean): number;
|
|
133
|
+
/** 在目标进程内分配内存 */
|
|
134
|
+
allocate(size: number, protect?: number, address?: bigint): bigint;
|
|
135
|
+
/** 释放由 allocate 分配的内存 */
|
|
136
|
+
free(address: bigint): void;
|
|
137
|
+
/** 修改内存保护属性,返回旧保护值 */
|
|
138
|
+
protect(address: bigint, size: number, newProtect: number): number;
|
|
139
|
+
/** 列出进程模块 */
|
|
140
|
+
modules(): ProcessModule[];
|
|
141
|
+
/** 列出线程 id */
|
|
142
|
+
threadIds(): number[];
|
|
143
|
+
/**
|
|
144
|
+
* 挂起进程全部线程,返回可传给 resume() 的令牌。
|
|
145
|
+
* 仅自研后端支持(原生 CE 后端会抛错)。
|
|
146
|
+
*/
|
|
147
|
+
suspend(): unknown;
|
|
148
|
+
/** 恢复之前挂起的线程 */
|
|
149
|
+
resume(token: unknown): void;
|
|
150
|
+
/** 关闭句柄。可重复调用。 */
|
|
151
|
+
close(): void;
|
|
152
|
+
/** 支持 `using` 语义 */
|
|
153
|
+
[Symbol.dispose](): void;
|
|
154
|
+
/** 异步关闭句柄 */
|
|
155
|
+
closeAsync(): Promise<void>;
|
|
156
|
+
/** 异步枚举全部内存区域 */
|
|
157
|
+
regionsAsync(options?: {
|
|
158
|
+
includeFree?: boolean;
|
|
159
|
+
maxAddress?: bigint;
|
|
160
|
+
}): Promise<MemoryRegion[]>;
|
|
161
|
+
/** 异步枚举可扫描区域 */
|
|
162
|
+
scannableRegionsAsync(filter?: RegionFilter): Promise<MemoryRegion[]>;
|
|
163
|
+
/** 异步读取内存 */
|
|
164
|
+
readMemoryAsync(address: bigint, size: number): Promise<Buffer>;
|
|
165
|
+
/** 异步读取内存(不足则抛错) */
|
|
166
|
+
readMemoryExactAsync(address: bigint, size: number): Promise<Buffer>;
|
|
167
|
+
/** 异步写入内存 */
|
|
168
|
+
writeMemoryAsync(address: bigint, data: Buffer, fixProtection?: boolean): Promise<number>;
|
|
169
|
+
/** 异步枚举模块 */
|
|
170
|
+
modulesAsync(): Promise<ProcessModule[]>;
|
|
171
|
+
/** 异步枚举线程 id */
|
|
172
|
+
threadIdsAsync(): Promise<number[]>;
|
|
173
|
+
/** 异步分配内存 */
|
|
174
|
+
allocateAsync(size: number, protect?: number, address?: bigint): Promise<bigint>;
|
|
175
|
+
/** 异步修改内存保护 */
|
|
176
|
+
protectAsync(address: bigint, size: number, newProtect: number): Promise<number>;
|
|
177
|
+
/** 异步判断是否 WOW64 */
|
|
178
|
+
isWow64Async(): Promise<boolean>;
|
|
179
|
+
}
|
|
180
|
+
/** 打开进程的异步变体(原生 CE 后端下必须用它)。 */
|
|
181
|
+
export declare function openProcessAsync(pid: number, options?: OpenProcessOptions): Promise<Process>;
|
|
182
|
+
/** 按名字打开进程(异步变体)。 */
|
|
183
|
+
export declare function openProcessByNameAsync(name: string, options?: OpenProcessOptions): Promise<Process>;
|
|
184
|
+
/** 展示用:区域类型的可读名字 */
|
|
185
|
+
export declare function regionTypeName(type: number): string;
|
|
186
|
+
/** 默认最大用户态地址(供上层限制扫描范围) */
|
|
187
|
+
export declare const MAX_ADDRESS = 140737488355327n;
|
|
188
|
+
/** 默认保护属性常量转发 */
|
|
189
|
+
export { PAGE_GUARD, MEM_COMMIT, MEM_IMAGE, MEM_MAPPED, MEM_PRIVATE, DEFAULT_PROCESS_ACCESS };
|
|
190
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/win/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 扫描 worker —— 在独立线程中读取目标进程内存、执行比较,并把结果写入共享内存。
|
|
3
|
+
*
|
|
4
|
+
* 对应 CE 的 TScanner(TThread 子类):CE 每条扫描线程负责一段内存,
|
|
5
|
+
* 通过临界区/信号量把结果写回主线程的地址缓冲区。
|
|
6
|
+
* 这里用 SharedArrayBuffer + Atomics 达到同样目的。
|
|
7
|
+
*
|
|
8
|
+
* 共享内存之所以必须共享:扫描 API 是同步的(对齐 CE 的阻塞语义),
|
|
9
|
+
* 主线程用 Atomics.wait 等待,此时无法处理 worker 的 postMessage。
|
|
10
|
+
*
|
|
11
|
+
* 容量约束:V8 对单个 SharedArrayBuffer 有约 1.5GB 上限,
|
|
12
|
+
* 因此每个 worker 批次使用**独立的、容量受控的**共享段,
|
|
13
|
+
* 而不是一个大段。详见 shared-layout.ts 的 createBatchLayout。
|
|
14
|
+
*/
|
|
15
|
+
import { ScanConfig } from '../types';
|
|
16
|
+
/** 单个块的扫描任务 */
|
|
17
|
+
export interface ScanJob {
|
|
18
|
+
/** 块的全局下标(用于主线程回收结果) */
|
|
19
|
+
index: number;
|
|
20
|
+
/** 块起始地址(十六进制字符串,避免 BigInt 在结构化克隆中的额外开销) */
|
|
21
|
+
address: string;
|
|
22
|
+
/** 块长度 */
|
|
23
|
+
size: number;
|
|
24
|
+
}
|
|
25
|
+
/** worker 收到的一次扫描任务 */
|
|
26
|
+
export interface WorkerScanRequest {
|
|
27
|
+
type: 'scan';
|
|
28
|
+
/** 目标进程 pid */
|
|
29
|
+
pid: number;
|
|
30
|
+
/** 扫描配置 */
|
|
31
|
+
config: ScanConfig;
|
|
32
|
+
/** 本 worker 负责的块 */
|
|
33
|
+
jobs: ScanJob[];
|
|
34
|
+
/** 是否保留快照 */
|
|
35
|
+
keepSnapshot: boolean;
|
|
36
|
+
/** 本批次的共享内存本体(SAB 经结构化克隆后仍共享同一块内存) */
|
|
37
|
+
shared: SharedArrayBuffer;
|
|
38
|
+
/** 本批次的共享段容量参数 */
|
|
39
|
+
layoutParams: {
|
|
40
|
+
jobCount: number;
|
|
41
|
+
slotCapacity: number;
|
|
42
|
+
arenaCapacity: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** worker 发出的消息 */
|
|
46
|
+
export interface WorkerScanDone {
|
|
47
|
+
type: 'batchDone';
|
|
48
|
+
/** 本批次发生失败的块数 */
|
|
49
|
+
failed: number;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=scan-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-worker.d.ts","sourceRoot":"","sources":["../../../src/win/scan-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAaH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAe;AACf,MAAM,WAAW,OAAO;IACtB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uBAAuB;AACvB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,oBAAoB;IACpB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,aAAa;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,sCAAsC;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB;IAClB,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,mBAAmB;AACnB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|