@cheatron/native 1.1.0 → 1.2.0

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 (98) hide show
  1. package/README.md +17 -4
  2. package/dist/{src/handle.d.ts → handle.d.ts} +4 -0
  3. package/dist/handle.d.ts.map +1 -0
  4. package/dist/{src/handle.js → handle.js} +3 -3
  5. package/dist/handle.js.map +1 -0
  6. package/dist/{src/index.d.ts → index.d.ts} +7 -3
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/{src/index.js → index.js} +6 -2
  9. package/dist/index.js.map +1 -0
  10. package/dist/logger.d.ts.map +1 -0
  11. package/dist/logger.js.map +1 -0
  12. package/dist/module.d.ts +45 -0
  13. package/dist/module.d.ts.map +1 -0
  14. package/dist/module.js +122 -0
  15. package/dist/module.js.map +1 -0
  16. package/dist/msvcrt-ext.d.ts +20 -0
  17. package/dist/msvcrt-ext.d.ts.map +1 -0
  18. package/dist/msvcrt-ext.js +120 -0
  19. package/dist/msvcrt-ext.js.map +1 -0
  20. package/dist/native-fn.d.ts +71 -0
  21. package/dist/native-fn.d.ts.map +1 -0
  22. package/dist/native-fn.js +212 -0
  23. package/dist/native-fn.js.map +1 -0
  24. package/dist/pattern.d.ts +15 -0
  25. package/dist/pattern.d.ts.map +1 -0
  26. package/dist/pattern.js +41 -0
  27. package/dist/pattern.js.map +1 -0
  28. package/dist/process.d.ts +72 -0
  29. package/dist/process.d.ts.map +1 -0
  30. package/dist/process.js +269 -0
  31. package/dist/process.js.map +1 -0
  32. package/dist/scanner.d.ts +25 -0
  33. package/dist/scanner.d.ts.map +1 -0
  34. package/dist/scanner.js +124 -0
  35. package/dist/scanner.js.map +1 -0
  36. package/dist/thread.d.ts.map +1 -0
  37. package/dist/{src/thread.js → thread.js} +1 -1
  38. package/dist/thread.js.map +1 -0
  39. package/package.json +3 -2
  40. package/dist/eslint.config.d.ts +0 -3
  41. package/dist/eslint.config.d.ts.map +0 -1
  42. package/dist/eslint.config.js +0 -26
  43. package/dist/eslint.config.js.map +0 -1
  44. package/dist/src/handle.d.ts.map +0 -1
  45. package/dist/src/handle.js.map +0 -1
  46. package/dist/src/index.d.ts.map +0 -1
  47. package/dist/src/index.js.map +0 -1
  48. package/dist/src/logger.d.ts.map +0 -1
  49. package/dist/src/logger.js.map +0 -1
  50. package/dist/src/module.d.ts +0 -22
  51. package/dist/src/module.d.ts.map +0 -1
  52. package/dist/src/module.js +0 -55
  53. package/dist/src/module.js.map +0 -1
  54. package/dist/src/process.d.ts +0 -30
  55. package/dist/src/process.d.ts.map +0 -1
  56. package/dist/src/process.js +0 -104
  57. package/dist/src/process.js.map +0 -1
  58. package/dist/src/thread.d.ts.map +0 -1
  59. package/dist/src/thread.js.map +0 -1
  60. package/dist/tests/integration/memory.test.d.ts +0 -2
  61. package/dist/tests/integration/memory.test.d.ts.map +0 -1
  62. package/dist/tests/integration/memory.test.js +0 -82
  63. package/dist/tests/integration/memory.test.js.map +0 -1
  64. package/dist/tests/integration/thread.test.d.ts +0 -2
  65. package/dist/tests/integration/thread.test.d.ts.map +0 -1
  66. package/dist/tests/integration/thread.test.js +0 -37
  67. package/dist/tests/integration/thread.test.js.map +0 -1
  68. package/dist/tests/setup.d.ts +0 -2
  69. package/dist/tests/setup.d.ts.map +0 -1
  70. package/dist/tests/setup.js +0 -3
  71. package/dist/tests/setup.js.map +0 -1
  72. package/dist/tests/unit/kernel32.test.d.ts +0 -2
  73. package/dist/tests/unit/kernel32.test.d.ts.map +0 -1
  74. package/dist/tests/unit/kernel32.test.js +0 -28
  75. package/dist/tests/unit/kernel32.test.js.map +0 -1
  76. package/dist/tests/unit/logger.test.d.ts +0 -2
  77. package/dist/tests/unit/logger.test.d.ts.map +0 -1
  78. package/dist/tests/unit/logger.test.js +0 -29
  79. package/dist/tests/unit/logger.test.js.map +0 -1
  80. package/dist/tests/unit/msvcrt.test.d.ts +0 -2
  81. package/dist/tests/unit/msvcrt.test.d.ts.map +0 -1
  82. package/dist/tests/unit/msvcrt.test.js +0 -22
  83. package/dist/tests/unit/msvcrt.test.js.map +0 -1
  84. package/dist/tests/unit/process.test.d.ts +0 -2
  85. package/dist/tests/unit/process.test.d.ts.map +0 -1
  86. package/dist/tests/unit/process.test.js +0 -27
  87. package/dist/tests/unit/process.test.js.map +0 -1
  88. package/dist/tests/unit/thread.test.d.ts +0 -2
  89. package/dist/tests/unit/thread.test.d.ts.map +0 -1
  90. package/dist/tests/unit/thread.test.js +0 -35
  91. package/dist/tests/unit/thread.test.js.map +0 -1
  92. package/dist/tests/unit/thread_creation.test.d.ts +0 -2
  93. package/dist/tests/unit/thread_creation.test.d.ts.map +0 -1
  94. package/dist/tests/unit/thread_creation.test.js +0 -31
  95. package/dist/tests/unit/thread_creation.test.js.map +0 -1
  96. /package/dist/{src/logger.d.ts → logger.d.ts} +0 -0
  97. /package/dist/{src/logger.js → logger.js} +0 -0
  98. /package/dist/{src/thread.d.ts → thread.d.ts} +0 -0
@@ -0,0 +1,25 @@
1
+ import { Pattern } from './pattern';
2
+ /**
3
+ * Memory scanning utility
4
+ */
5
+ export declare class Scanner {
6
+ /**
7
+ * Scans local memory for a pattern using a generator.
8
+ * Yields each found address.
9
+ *
10
+ * @param base Memory address to start from
11
+ * @param size Total size of the memory region to scan
12
+ * @param pattern Pattern to search for
13
+ * @param chunkSize Size of each scan chunk (default: 1MB)
14
+ */
15
+ static scan(base: bigint, size: number, pattern: Pattern, chunkSize?: number): Generator<bigint>;
16
+ /**
17
+ * Scans local memory for a pattern and returns the first result.
18
+ */
19
+ static scanLocal(base: bigint, size: number, pattern: Pattern, chunkSize?: number): bigint | null;
20
+ /**
21
+ * Helper method to scan a specific memory chunk with wildcards
22
+ */
23
+ private static scanChunkWildcard;
24
+ }
25
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;GAEG;AACH,qBAAa,OAAO;IAClB;;;;;;;;OAQG;IACH,MAAM,CAAE,IAAI,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,MAAoB,GAC9B,SAAS,CAAC,MAAM,CAAC;IA0FpB;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,MAAoB,GAC9B,MAAM,GAAG,IAAI;IAMhB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAE,iBAAiB;CA2BlC"}
@@ -0,0 +1,124 @@
1
+ import { ffi } from '@cheatron/native-bindings';
2
+ import { Pattern } from './pattern';
3
+ /**
4
+ * Memory scanning utility
5
+ */
6
+ export class Scanner {
7
+ /**
8
+ * Scans local memory for a pattern using a generator.
9
+ * Yields each found address.
10
+ *
11
+ * @param base Memory address to start from
12
+ * @param size Total size of the memory region to scan
13
+ * @param pattern Pattern to search for
14
+ * @param chunkSize Size of each scan chunk (default: 1MB)
15
+ */
16
+ static *scan(base, size, pattern, chunkSize = 1024 * 1024) {
17
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
18
+ const msvcrt = require('./msvcrt-ext');
19
+ const patternLen = pattern.length;
20
+ if (patternLen === 0)
21
+ return;
22
+ if (size < patternLen)
23
+ return;
24
+ const hasWildcards = pattern.mask.includes('?');
25
+ const step = chunkSize - (patternLen - 1);
26
+ let lastYieldedAddr = -1n;
27
+ if (step <= 0 || size <= chunkSize) {
28
+ // Small region or small chunk: scan whole region
29
+ if (!hasWildcards) {
30
+ let currentBase = base;
31
+ let remainingSize = size;
32
+ while (remainingSize >= patternLen) {
33
+ const found = msvcrt.memmem(currentBase, remainingSize, pattern.bytes, patternLen);
34
+ if (!found)
35
+ break;
36
+ const foundAddr = BigInt(ffi.address(found));
37
+ if (foundAddr > lastYieldedAddr) {
38
+ yield foundAddr;
39
+ lastYieldedAddr = foundAddr;
40
+ }
41
+ // Continue after the match
42
+ const offset = foundAddr - currentBase + 1n;
43
+ currentBase += offset;
44
+ remainingSize -= Number(offset);
45
+ }
46
+ }
47
+ else {
48
+ for (const addr of Scanner.scanChunkWildcard(base, size, pattern)) {
49
+ if (addr > lastYieldedAddr) {
50
+ yield addr;
51
+ lastYieldedAddr = addr;
52
+ }
53
+ }
54
+ }
55
+ return;
56
+ }
57
+ // Chunked scanning for large regions
58
+ for (let offset = 0; offset < size; offset += step) {
59
+ const remaining = size - offset;
60
+ const currentChunkSize = Math.min(chunkSize, remaining);
61
+ if (currentChunkSize < patternLen)
62
+ break;
63
+ const currentBase = base + BigInt(offset);
64
+ if (!hasWildcards) {
65
+ let internalOffset = 0;
66
+ while (internalOffset <= currentChunkSize - patternLen) {
67
+ const searchBase = currentBase + BigInt(internalOffset);
68
+ const searchSize = currentChunkSize - internalOffset;
69
+ const found = msvcrt.memmem(searchBase, searchSize, pattern.bytes, patternLen);
70
+ if (!found)
71
+ break;
72
+ const foundAddr = BigInt(ffi.address(found));
73
+ if (foundAddr > lastYieldedAddr) {
74
+ yield foundAddr;
75
+ lastYieldedAddr = foundAddr;
76
+ }
77
+ // Advance internal offset to next byte after match
78
+ internalOffset = Number(foundAddr - currentBase) + 1;
79
+ }
80
+ }
81
+ else {
82
+ // Wildcard chunked
83
+ for (const addr of Scanner.scanChunkWildcard(currentBase, currentChunkSize, pattern)) {
84
+ if (addr > lastYieldedAddr) {
85
+ yield addr;
86
+ lastYieldedAddr = addr;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * Scans local memory for a pattern and returns the first result.
94
+ */
95
+ static scanLocal(base, size, pattern, chunkSize = 1024 * 1024) {
96
+ const it = Scanner.scan(base, size, pattern, chunkSize);
97
+ const result = it.next();
98
+ return result.done ? null : result.value;
99
+ }
100
+ /**
101
+ * Helper method to scan a specific memory chunk with wildcards
102
+ */
103
+ static *scanChunkWildcard(base, size, pattern) {
104
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
105
+ const { currentProcess } = require('./process');
106
+ const patternLen = pattern.length;
107
+ const buffer = currentProcess.readMemory(base, size);
108
+ const mask = pattern.mask;
109
+ const bytes = pattern.bytes;
110
+ for (let i = 0; i <= size - patternLen; i++) {
111
+ let found = true;
112
+ for (let j = 0; j < patternLen; j++) {
113
+ if (mask[j] !== '?' && buffer[i + j] !== bytes[j]) {
114
+ found = false;
115
+ break;
116
+ }
117
+ }
118
+ if (found) {
119
+ yield base + BigInt(i);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,mBAAmB,EAGnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC;;GAEG;AACH,qBAAa,MAAO,SAAQ,MAAM;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IAKnE,MAAM,CAAC,IAAI,CACT,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAgC,GACvC,MAAM;IAUT,MAAM,CAAC,MAAM,CACX,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,SAAS,GAAE,MAAoB,EAC/B,KAAK,GAAE,mBAAmB,GAAG,MAAsC,EACnE,UAAU,GAAE,kBAAkB,GAAG,MAAM,GAAG,IAAW,GACpD,MAAM;IAqBT,MAAM,CAAC,OAAO,IAAI,aAAa;IAI/B,MAAM,CAAC,SAAS,IAAI,MAAM;IAI1B,OAAO,IAAI,MAAM;IAajB,MAAM,IAAI,MAAM;IAahB,UAAU,CAAC,KAAK,GAAE,MAA0B,GAAG,aAAa;IAmB5D,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAgBpC;;;OAGG;IACH,WAAW,IAAI,MAAM;IAWrB,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;CAEvB,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAc,SAAQ,MAAM;;IAU9B,KAAK;CAGf;AAID,eAAO,MAAM,aAAa,EAAE,aAU1B,CAAC"}
@@ -21,7 +21,7 @@ export class Thread extends Handle {
21
21
  return new Thread(handle, threadId);
22
22
  }
23
23
  static create(startAddress, parameter = null, stackSize = 0, flags = ThreadCreationFlags.IMMEDIATE, attributes = null) {
24
- threadLog.debug(`Creating thread at 0x${startAddress.toString(16)} with param 0x${(parameter || 0).toString(16)}`);
24
+ threadLog.debug(`Creating thread at 0x${ffi.address(startAddress).toString(16)} with param 0x${(parameter || 0).toString(16)}`);
25
25
  const tidBuf = Buffer.alloc(4);
26
26
  const handle = Kernel32Impl.CreateThread(attributes, stackSize, startAddress, parameter, flags, tidBuf);
27
27
  if (!handle) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.js","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cheatron/native",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Ergonomic Win32 process and memory management API for Cheatron.",
5
5
  "module": "./src/index.ts",
6
6
  "main": "./dist/index.js",
@@ -30,8 +30,9 @@
30
30
  "url": "https://github.com/Cheatron/cheatron-native/issues"
31
31
  },
32
32
  "dependencies": {
33
+ "@cheatron/keystone": "^1.0.1",
33
34
  "@cheatron/log": "^1.0.1",
34
- "@cheatron/native-bindings": "^1.0.1"
35
+ "@cheatron/native-bindings": "^1.0.3"
35
36
  },
36
37
  "devDependencies": {
37
38
  "@eslint/js": "^10.0.1",
@@ -1,3 +0,0 @@
1
- declare const _default: import("typescript-eslint").FlatConfig.ConfigArray;
2
- export default _default;
3
- //# sourceMappingURL=eslint.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eslint.config.d.ts","sourceRoot":"","sources":["../eslint.config.js"],"names":[],"mappings":""}
@@ -1,26 +0,0 @@
1
- import js from '@eslint/js';
2
- import globals from 'globals';
3
- import tseslint from 'typescript-eslint';
4
- import prettierConfig from 'eslint-config-prettier';
5
- export default tseslint.config({ ignores: ['dist', 'node_modules', 'build'] }, {
6
- extends: [js.configs.recommended, ...tseslint.configs.recommended],
7
- files: ['**/*.{ts,tsx,js,jsx}'],
8
- languageOptions: {
9
- ecmaVersion: 2024,
10
- sourceType: 'module',
11
- globals: {
12
- ...globals.browser,
13
- ...globals.node,
14
- },
15
- parserOptions: {
16
- project: ['./tsconfig.json'],
17
- tsconfigRootDir: import.meta.dirname,
18
- },
19
- },
20
- rules: {
21
- 'no-unused-vars': 'warn',
22
- 'no-console': ['warn', { allow: ['warn', 'error'] }],
23
- '@typescript-eslint/no-explicit-any': 'warn',
24
- },
25
- }, prettierConfig);
26
- //# sourceMappingURL=eslint.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eslint.config.js","sourceRoot":"","sources":["../eslint.config.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,cAAc,MAAM,wBAAwB,CAAC;AAEpD,eAAe,QAAQ,CAAC,MAAM,CAC5B,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,EAC9C;IACE,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;IAClE,KAAK,EAAE,CAAC,sBAAsB,CAAC;IAC/B,eAAe,EAAE;QACf,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE;YACP,GAAG,OAAO,CAAC,OAAO;YAClB,GAAG,OAAO,CAAC,IAAI;SAChB;QACD,aAAa,EAAE;YACb,OAAO,EAAE,CAAC,iBAAiB,CAAC;YAC5B,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;SACrC;KACF;IACD,KAAK,EAAE;QACL,gBAAgB,EAAE,MAAM;QACxB,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACpD,oCAAoC,EAAE,MAAM;KAC7C;CACF,EACD,cAAc,CACf,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AAcnC;;GAEG;AACH,qBAAa,MAAM;IACjB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IAOrD;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK;IASL;;;OAGG;IACH,IAAI,CAAC,SAAS,GAAE,MAAiB,GAAG,UAAU;IAS9C;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/handle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,GAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAS,CAAC,MAAM,EAAE,EAAE;IAC3D,IAAI,MAAM,EAAE,CAAC;QACX,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,OAAO,MAAM;IACP,OAAO,CAAS;IAE1B,YAAY,MAAc,EAAE,YAAqB,IAAI;QACnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAK,CAAC;YACrB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,YAAoB,QAAQ;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACzD,SAAS,CAAC,KAAK,CAAC,0CAA0C,SAAS,KAAK,CAAC,CAAC;QAC1E,OAAO,YAAY,CAAC,mBAAmB,CACrC,IAAI,CAAC,OAAO,EACZ,SAAS,CACI,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AAEzB,cAAc,2BAA2B,CAAC;AAC1C,mBAAmB,2BAA2B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AAEzB,cAAc,2BAA2B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,uCAA4B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type HANDLE, type HMODULE } from '@cheatron/native-bindings';
2
- import { Handle } from './handle';
3
- /**
4
- * Represents a loaded module
5
- */
6
- export declare class Module extends Handle {
7
- protected _name: string;
8
- private static _kernel32;
9
- private static _crt;
10
- constructor(handle: HMODULE, name: string);
11
- static get kernel32(): Module;
12
- static get crt(): Module;
13
- /**
14
- * Gets a module handle for the specified module name
15
- * Automatically detects if the name is ANSI or Unicode
16
- * @param name Module name (e.g., 'kernel32.dll')
17
- */
18
- static get(name: string): Module;
19
- getProcAddress(procName: string): HANDLE;
20
- get name(): string;
21
- }
22
- //# sourceMappingURL=module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC;;GAEG;AACH,qBAAa,MAAO,SAAQ,MAAM;IAChC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAS;IACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAS;gBAEhB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM;IAMzC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAK5B;IAED,MAAM,KAAK,GAAG,IAAI,MAAM,CAKvB;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAehC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQxC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -1,55 +0,0 @@
1
- import { Kernel32Impl, } from '@cheatron/native-bindings';
2
- import { Handle } from './handle';
3
- import { log } from './logger';
4
- const moduleLog = log.child('Module');
5
- /**
6
- * Represents a loaded module
7
- */
8
- export class Module extends Handle {
9
- _name;
10
- static _kernel32;
11
- static _crt;
12
- constructor(handle, name) {
13
- // Module handles from GetModuleHandle should not be closed with CloseHandle
14
- super(handle, false);
15
- this._name = name;
16
- }
17
- static get kernel32() {
18
- if (!this._kernel32) {
19
- this._kernel32 = this.get('kernel32.dll');
20
- }
21
- return this._kernel32;
22
- }
23
- static get crt() {
24
- if (!this._crt) {
25
- this._crt = this.get('msvcrt.dll');
26
- }
27
- return this._crt;
28
- }
29
- /**
30
- * Gets a module handle for the specified module name
31
- * Automatically detects if the name is ANSI or Unicode
32
- * @param name Module name (e.g., 'kernel32.dll')
33
- */
34
- static get(name) {
35
- moduleLog.debug(`Getting module handle for: ${name}`);
36
- // Simple ASCII check: any char > 127 means we should use Unicode API
37
- const isUnicode = Array.from(name).some((char) => char.charCodeAt(0) > 127);
38
- const handle = isUnicode
39
- ? Kernel32Impl.GetModuleHandleW(name)
40
- : Kernel32Impl.GetModuleHandleA(name);
41
- if (!handle) {
42
- throw new Error(`Failed to get module handle for ${name}`);
43
- }
44
- return new Module(handle, name);
45
- }
46
- getProcAddress(procName) {
47
- if (!this.isValid())
48
- throw new Error('Module handle is closed');
49
- return Kernel32Impl.GetProcAddress(this._handle, procName);
50
- }
51
- get name() {
52
- return this._name;
53
- }
54
- }
55
- //# sourceMappingURL=module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,MAAM;IACtB,KAAK,CAAS;IAChB,MAAM,CAAC,SAAS,CAAS;IACzB,MAAM,CAAC,IAAI,CAAS;IAE5B,YAAY,MAAe,EAAE,IAAY;QACvC,4EAA4E;QAC5E,KAAK,CAAC,MAA2B,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,QAAQ;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,IAAY;QACrB,SAAS,CAAC,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;QAEtD,qEAAqE;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAChE,OAAO,YAAY,CAAC,cAAc,CAChC,IAAI,CAAC,OAA6B,EAClC,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -1,30 +0,0 @@
1
- import { Thread } from './thread';
2
- import { ThreadCreationFlags, type SecurityAttributes, type MemoryBasicInformation, type HANDLE, type LPVOID, type SIZE_T } from '@cheatron/native-bindings';
3
- import { Handle } from './handle';
4
- /**
5
- * Represents a process handle
6
- */
7
- export declare class Process extends Handle {
8
- protected _pid: number;
9
- constructor(handle: HANDLE, pid?: number, autoClose?: boolean);
10
- static open(pid: number, access?: number): Process;
11
- readMemory(address: LPVOID, size: number): Buffer;
12
- read: (address: LPVOID, size: number) => Buffer;
13
- writeMemory(address: LPVOID, buffer: Buffer): void;
14
- write: (address: LPVOID, buffer: Buffer) => void;
15
- createThread(startAddress: LPVOID, parameter?: LPVOID | null, stackSize?: SIZE_T, flags?: ThreadCreationFlags | number, attributes?: SecurityAttributes | LPVOID | null): Thread;
16
- virtualQuery(address: LPVOID): MemoryBasicInformation;
17
- query: (address: LPVOID) => MemoryBasicInformation;
18
- static current(): CurrentProcess;
19
- get pid(): number;
20
- }
21
- /**
22
- * Represents the current process (singleton)
23
- */
24
- export declare class CurrentProcess extends Process {
25
- constructor();
26
- createThread(startAddress: LPVOID, parameter?: LPVOID | null, stackSize?: SIZE_T, flags?: ThreadCreationFlags | number, attributes?: SecurityAttributes | LPVOID | null): Thread;
27
- close(): void;
28
- }
29
- export declare const currentProcess: CurrentProcess;
30
- //# sourceMappingURL=process.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAIL,mBAAmB,EAGnB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC;;GAEG;AACH,qBAAa,OAAQ,SAAQ,MAAM;IACjC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IAKnE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiC,GAAG,OAAO;IAU5E,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBjD,IAAI,YAlBgB,MAAM,QAAQ,MAAM,KAAG,MAAM,CAkB1B;IAEvB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBlD,KAAK,YAlBgB,MAAM,UAAU,MAAM,KAAG,IAAI,CAkBzB;IAEzB,YAAY,CACV,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,SAAS,GAAE,MAAoB,EAC/B,KAAK,GAAE,mBAAmB,GAAG,MAAsC,EACnE,UAAU,GAAE,kBAAkB,GAAG,MAAM,GAAG,IAAW,GACpD,MAAM;IAsBT,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;IAkBrD,KAAK,YAlBiB,MAAM,KAAG,sBAAsB,CAkB3B;IAE1B,MAAM,CAAC,OAAO,IAAI,cAAc;IAIhC,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO;;IAMhC,YAAY,CACnB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,SAAS,GAAE,MAAoB,EAC/B,KAAK,CAAC,EAAE,mBAAmB,GAAG,MAAM,EACpC,UAAU,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,GAC9C,MAAM;IAIA,KAAK;CAGf;AAID,eAAO,MAAM,cAAc,EAAE,cAU3B,CAAC"}
@@ -1,104 +0,0 @@
1
- import { Thread } from './thread';
2
- import { Kernel32Impl, ffi, ProcessAccess, ThreadCreationFlags, MEMORY_BASIC_INFORMATION, MBI_SIZE, } from '@cheatron/native-bindings';
3
- import { Handle } from './handle';
4
- import { log } from './logger';
5
- const processLog = log.child('Process');
6
- /**
7
- * Represents a process handle
8
- */
9
- export class Process extends Handle {
10
- _pid;
11
- constructor(handle, pid, autoClose = true) {
12
- super(handle, autoClose);
13
- this._pid = pid ?? Kernel32Impl.GetProcessId(handle);
14
- }
15
- static open(pid, access = ProcessAccess.ALL_ACCESS) {
16
- processLog.debug(`Opening process ${pid} with access ${access}`);
17
- const handle = Kernel32Impl.OpenProcess(access, 0, pid);
18
- if (!handle) {
19
- processLog.warn(`Failed to open process ${pid}`);
20
- throw new Error(`Failed to open process ${pid}`);
21
- }
22
- return new Process(handle, pid);
23
- }
24
- readMemory(address, size) {
25
- if (!this.isValid())
26
- throw new Error('Process handle is closed');
27
- const buf = Buffer.alloc(size);
28
- const success = Kernel32Impl.ReadProcessMemory(this._handle, address, buf, size, null);
29
- if (!success) {
30
- processLog.error(`ReadProcessMemory failed at 0x${address.toString(16)}`);
31
- throw new Error(`ReadProcessMemory failed at 0x${address.toString(16)}`);
32
- }
33
- return buf;
34
- }
35
- read = this.readMemory;
36
- writeMemory(address, buffer) {
37
- if (!this.isValid())
38
- throw new Error('Process handle is closed');
39
- const success = Kernel32Impl.WriteProcessMemory(this._handle, address, buffer, buffer.length, null);
40
- if (!success) {
41
- processLog.error(`WriteProcessMemory failed at 0x${address.toString(16)}`);
42
- throw new Error(`WriteProcessMemory failed at 0x${address.toString(16)}`);
43
- }
44
- }
45
- write = this.writeMemory;
46
- createThread(startAddress, parameter = null, stackSize = 0, flags = ThreadCreationFlags.IMMEDIATE, attributes = null) {
47
- if (!this.isValid())
48
- throw new Error('Process handle is closed');
49
- processLog.debug(`Creating remote thread at 0x${startAddress.toString(16)} (PID: ${this._pid})`);
50
- const handle = Kernel32Impl.CreateRemoteThread(this._handle, attributes, stackSize, startAddress, parameter, flags, null);
51
- if (!handle) {
52
- processLog.error('CreateRemoteThread failed');
53
- throw new Error('CreateRemoteThread failed');
54
- }
55
- return new Thread(handle);
56
- }
57
- virtualQuery(address) {
58
- if (!this.isValid())
59
- throw new Error('Process handle is closed');
60
- const buf = Buffer.alloc(MBI_SIZE);
61
- const result = Kernel32Impl.VirtualQueryEx(this._handle, address, buf, MBI_SIZE);
62
- if (result === 0) {
63
- processLog.error(`VirtualQueryEx failed at 0x${address.toString(16)}`);
64
- throw new Error(`VirtualQueryEx failed at 0x${address.toString(16)}`);
65
- }
66
- return ffi.decode(buf, MEMORY_BASIC_INFORMATION);
67
- }
68
- query = this.virtualQuery;
69
- static current() {
70
- return currentProcess;
71
- }
72
- get pid() {
73
- return this._pid;
74
- }
75
- }
76
- /**
77
- * Represents the current process (singleton)
78
- */
79
- export class CurrentProcess extends Process {
80
- constructor() {
81
- // Current process uses a pseudo-handle that doesn't need closing
82
- super(Kernel32Impl.GetCurrentProcess(), Kernel32Impl.GetCurrentProcessId());
83
- }
84
- createThread(startAddress, parameter, stackSize = 0, flags, attributes) {
85
- return Thread.create(startAddress, parameter, stackSize, flags, attributes);
86
- }
87
- close() {
88
- this._handle = null;
89
- }
90
- }
91
- // Export a pre-initialized instance of the current process (lazy via Proxy)
92
- let _currentProcess;
93
- export const currentProcess = new Proxy({}, {
94
- get(_target, prop, receiver) {
95
- if (!_currentProcess) {
96
- _currentProcess = new CurrentProcess();
97
- }
98
- return Reflect.get(_currentProcess, prop, receiver);
99
- },
100
- getPrototypeOf() {
101
- return CurrentProcess.prototype;
102
- },
103
- });
104
- //# sourceMappingURL=process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/process.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,mBAAmB,EAGnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC;;GAEG;AACH,qBAAa,MAAO,SAAQ,MAAM;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IAKnE,MAAM,CAAC,IAAI,CACT,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAgC,GACvC,MAAM;IAUT,MAAM,CAAC,MAAM,CACX,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,SAAS,GAAE,MAAoB,EAC/B,KAAK,GAAE,mBAAmB,GAAG,MAAsC,EACnE,UAAU,GAAE,kBAAkB,GAAG,MAAM,GAAG,IAAW,GACpD,MAAM;IAqBT,MAAM,CAAC,OAAO,IAAI,aAAa;IAI/B,MAAM,CAAC,SAAS,IAAI,MAAM;IAI1B,OAAO,IAAI,MAAM;IAajB,MAAM,IAAI,MAAM;IAahB,UAAU,CAAC,KAAK,GAAE,MAA0B,GAAG,aAAa;IAmB5D,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAgBpC;;;OAGG;IACH,WAAW,IAAI,MAAM;IAWrB,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;CAEvB,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAc,SAAQ,MAAM;;IAU9B,KAAK;CAGf;AAID,eAAO,MAAM,aAAa,EAAE,aAU1B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/thread.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=memory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/memory.test.ts"],"names":[],"mappings":""}
@@ -1,82 +0,0 @@
1
- import { expect, it, describe } from 'bun:test';
2
- import { currentProcess, Kernel32Impl, MemoryProtection, MemoryState, } from '@cheatron/native';
3
- import { ffi } from '@cheatron/win32-ext';
4
- describe('Memory Integration Tests', () => {
5
- it('should read and write uint32', () => {
6
- const ptr = ffi.alloc('uint32', 4);
7
- const address = ffi.address(ptr);
8
- // Allocate memory in simulation
9
- Kernel32Impl.VirtualAlloc(address, 4096, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.READWRITE);
10
- // Write 0xDEADBEEF
11
- const writeBuf = Buffer.alloc(4);
12
- writeBuf.writeUInt32LE(0xdeadbeef, 0);
13
- currentProcess.write(address, writeBuf);
14
- // Read it back
15
- const readBuf = currentProcess.read(address, 4);
16
- expect(readBuf.readUInt32LE(0)).toBe(0xdeadbeef);
17
- ffi.free(ptr);
18
- });
19
- it('should read and write int64', () => {
20
- const ptr = ffi.alloc('int64', 8);
21
- const address = ffi.address(ptr);
22
- Kernel32Impl.VirtualAlloc(address, 4096, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.READWRITE);
23
- const writeBuf = Buffer.alloc(8);
24
- writeBuf.writeBigInt64LE(0x1234567890abn, 0);
25
- currentProcess.write(address, writeBuf);
26
- const readBuf = currentProcess.read(address, 8);
27
- expect(readBuf.readBigInt64LE(0)).toBe(0x1234567890abn);
28
- ffi.free(ptr);
29
- });
30
- it('should read and write float', () => {
31
- const ptr = ffi.alloc('float32', 4);
32
- const address = ffi.address(ptr);
33
- Kernel32Impl.VirtualAlloc(address, 4096, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.READWRITE);
34
- const writeBuf = Buffer.alloc(4);
35
- writeBuf.writeFloatLE(3.14, 0);
36
- currentProcess.write(address, writeBuf);
37
- const readBuf = currentProcess.read(address, 4);
38
- expect(Math.abs(readBuf.readFloatLE(0) - 3.14)).toBeLessThan(0.001);
39
- ffi.free(ptr);
40
- });
41
- it('should read and write double', () => {
42
- const ptr = ffi.alloc('float64', 8);
43
- const address = ffi.address(ptr);
44
- Kernel32Impl.VirtualAlloc(address, 4096, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.READWRITE);
45
- const writeBuf = Buffer.alloc(8);
46
- writeBuf.writeDoubleLE(3.141592653589793, 0);
47
- currentProcess.write(address, writeBuf);
48
- const readBuf = currentProcess.read(address, 8);
49
- expect(readBuf.readDoubleLE(0)).toBe(3.141592653589793);
50
- ffi.free(ptr);
51
- });
52
- it('should query memory info of an allocated region', () => {
53
- const ptr = ffi.alloc('uint32', 4);
54
- const address = ffi.address(ptr);
55
- Kernel32Impl.VirtualAlloc(address, 4096, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.READWRITE);
56
- const info = currentProcess.query(address);
57
- expect(info).toBeDefined();
58
- expect(info.BaseAddress).toBeDefined();
59
- expect(info.RegionSize).toBeDefined();
60
- expect(info.State).toBe(MemoryState.COMMIT);
61
- expect(info.Protect).toBeTruthy();
62
- ffi.free(ptr);
63
- });
64
- it('should query memory info of a known address', () => {
65
- // Query the PEB region (always mapped)
66
- // Note: We haven't simulated PEB, so this might fail unless we pre-map it or expect failure/free
67
- // In real Windows, 0x7ffe0000 might be valid (SharedUserData), but in our empty sim it's not.
68
- // The previous test passed because query returned garbage or mock values?
69
- // Old mock VirtualQuery returned fixed values.
70
- // New MemoryManager.query returns MEM_FREE if not found.
71
- // Let's allocate it to make the test pass or update expectation
72
- // But this test says "known address", implying something system-mapped.
73
- // Let's allocate it for the test.
74
- const pebAddr = 0x7ffe0000n;
75
- Kernel32Impl.VirtualAlloc(pebAddr, 4096, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.READONLY);
76
- const info = currentProcess.query(pebAddr);
77
- expect(info).toBeDefined();
78
- expect(info.State).toBe(MemoryState.COMMIT);
79
- expect(info.RegionSize).toBeGreaterThan(0);
80
- });
81
- });
82
- //# sourceMappingURL=memory.test.js.map