@cheatron/nthread 1.0.2 → 1.0.4
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/README.md +198 -46
- package/dist/crt.d.ts +1 -0
- package/dist/crt.d.ts.map +1 -1
- package/dist/crt.js +1 -0
- package/dist/crt.js.map +1 -1
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/heap.d.ts +2 -2
- package/dist/memory/heap.d.ts.map +1 -1
- package/dist/memory/heap.js +5 -5
- package/dist/memory/heap.js.map +1 -1
- package/dist/memory/romem.d.ts +3 -3
- package/dist/memory/romem.d.ts.map +1 -1
- package/dist/memory/romem.js +2 -1
- package/dist/memory/romem.js.map +1 -1
- package/dist/nthread-file.d.ts +82 -0
- package/dist/nthread-file.d.ts.map +1 -0
- package/dist/nthread-file.js +164 -0
- package/dist/nthread-file.js.map +1 -0
- package/dist/nthread-heap.d.ts +1 -1
- package/dist/nthread-heap.d.ts.map +1 -1
- package/dist/nthread.d.ts +45 -2
- package/dist/nthread.d.ts.map +1 -1
- package/dist/nthread.js +108 -7
- package/dist/nthread.js.map +1 -1
- package/dist/thread/captured-thread.d.ts.map +1 -1
- package/dist/thread/captured-thread.js +5 -4
- package/dist/thread/captured-thread.js.map +1 -1
- package/dist/thread/proxy-thread.d.ts +8 -3
- package/dist/thread/proxy-thread.d.ts.map +1 -1
- package/dist/thread/proxy-thread.js +13 -6
- package/dist/thread/proxy-thread.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -14,23 +14,36 @@
|
|
|
14
14
|
NThread reuses two tiny instruction sequences (gadgets) already present in loaded modules:
|
|
15
15
|
|
|
16
16
|
| Gadget | Pattern | Purpose |
|
|
17
|
-
|
|
17
|
+
|--------|---------|---------|
|
|
18
18
|
| **Sleep** | `jmp .` (`EB FE`) | Parks the thread in an infinite loop |
|
|
19
19
|
| **Pivot** | `push reg; ret` | Redirects `RIP` to the sleep gadget |
|
|
20
20
|
|
|
21
21
|
Hijack sequence: suspend → capture context → redirect RIP through pivot → spin until RIP lands on sleep gadget. No shellcode, no remote allocation — just register writes.
|
|
22
22
|
|
|
23
|
+
```
|
|
24
|
+
suspend thread
|
|
25
|
+
→ save full register context
|
|
26
|
+
→ set RIP = pushret gadget
|
|
27
|
+
→ set RSP = safe scratch area (current RSP − 8192, 16-aligned)
|
|
28
|
+
→ set target register = sleep address
|
|
29
|
+
→ apply context → resume
|
|
30
|
+
→ poll until RIP == sleep address
|
|
31
|
+
→ thread is now parked and ready for commands
|
|
32
|
+
```
|
|
33
|
+
|
|
23
34
|
---
|
|
24
35
|
|
|
25
36
|
## Features
|
|
26
37
|
|
|
27
38
|
- **No code injection** — reuses gadgets in `ntdll`, `kernel32`, `kernelbase`, `msvcrt`
|
|
28
|
-
- **No `WriteProcessMemory`** — memory ops
|
|
29
|
-
- **Auto-discovery** — scans modules lazily via `Module.scan()`
|
|
39
|
+
- **No `WriteProcessMemory`** — memory ops use the target thread's own `msvcrt` functions
|
|
40
|
+
- **Auto-discovery** — scans loaded modules lazily via `Module.scan()`
|
|
30
41
|
- **Reversible** — saves full register context before hijacking; restores on `proxy.close()`
|
|
31
|
-
- **CRT bridge** — resolves `msvcrt
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
42
|
+
- **CRT bridge** — resolves `msvcrt` exports (`malloc`, `calloc`, `memset`, `fopen`, `fread`, etc.) and calls them *from inside the target thread*
|
|
43
|
+
- **String args** — pass strings directly to `proxy.call()`, automatically allocated and freed
|
|
44
|
+
- **Write optimization** — `romem` tracks known region contents and skips unchanged bytes automatically
|
|
45
|
+
- **Heap allocator** — `NThreadHeap` pre-allocates a heap block in the target and sub-allocates from it, minimising CRT round-trips
|
|
46
|
+
- **File channel** — `NThreadFile` replaces RPM/WPM with bidirectional filesystem I/O through a single temp file
|
|
34
47
|
|
|
35
48
|
---
|
|
36
49
|
|
|
@@ -44,12 +57,12 @@ bun add @cheatron/nthread
|
|
|
44
57
|
|
|
45
58
|
## Quick Start
|
|
46
59
|
|
|
60
|
+
### Basic — `NThread`
|
|
61
|
+
|
|
47
62
|
```typescript
|
|
48
|
-
import { NThread,
|
|
63
|
+
import { NThread, crt } from '@cheatron/nthread';
|
|
49
64
|
|
|
50
65
|
const nthread = new NThread();
|
|
51
|
-
|
|
52
|
-
// Hijack an existing thread by TID
|
|
53
66
|
const [proxy, captured] = await nthread.inject(tid);
|
|
54
67
|
|
|
55
68
|
// Call a function inside the target thread (x64 calling convention)
|
|
@@ -58,9 +71,6 @@ const ptr = await proxy.call(crt.malloc, 1024n);
|
|
|
58
71
|
// Write memory via hijacked memset calls
|
|
59
72
|
await proxy.write(ptr, Buffer.from([0xDE, 0xAD, 0xBE, 0xEF]));
|
|
60
73
|
|
|
61
|
-
// Allocate and write a wide string in one step
|
|
62
|
-
const strPtr = await proxy.allocString('Hello, target!');
|
|
63
|
-
|
|
64
74
|
// Read memory back
|
|
65
75
|
const buf = await proxy.read(ptr, 4);
|
|
66
76
|
|
|
@@ -68,9 +78,82 @@ const buf = await proxy.read(ptr, 4);
|
|
|
68
78
|
await proxy.close();
|
|
69
79
|
```
|
|
70
80
|
|
|
81
|
+
### Heap — `NThreadHeap`
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { NThreadHeap } from '@cheatron/nthread';
|
|
85
|
+
|
|
86
|
+
const nt = new NThreadHeap();
|
|
87
|
+
const [proxy] = await nt.inject(tid);
|
|
88
|
+
|
|
89
|
+
// alloc/free go through the local heap — fewer CRT calls
|
|
90
|
+
const ptr = await proxy.alloc(256, { fill: 0 });
|
|
91
|
+
await proxy.write(ptr, myData);
|
|
92
|
+
await proxy.free(ptr);
|
|
93
|
+
|
|
94
|
+
// Allocate and write a null-terminated string in one step
|
|
95
|
+
const strPtr = await proxy.allocString('Hello, target!');
|
|
96
|
+
|
|
97
|
+
await proxy.close(); // frees all heap blocks atomically
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### File Channel — `NThreadFile`
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { NThreadFile } from '@cheatron/nthread';
|
|
104
|
+
|
|
105
|
+
const nt = new NThreadFile();
|
|
106
|
+
const [proxy] = await nt.inject(tid);
|
|
107
|
+
|
|
108
|
+
// read/write now go through a temp file — no RPM/WPM
|
|
109
|
+
const ptr = await proxy.alloc(4096, { fill: 0 });
|
|
110
|
+
await proxy.write(ptr, largeBuffer); // fs.writeFileSync → fread
|
|
111
|
+
const data = await proxy.read(ptr, 4096); // fwrite + fflush → fs.readFileSync
|
|
112
|
+
|
|
113
|
+
await proxy.close(); // closes FILE*, deletes temp file, destroys heaps, restores thread
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### File I/O Helpers
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
// Open a file in the target process
|
|
120
|
+
const stream = await nthread.fileOpen(proxy, 'C:\\data\\log.txt', 'rb');
|
|
121
|
+
|
|
122
|
+
// Read 512 bytes from the stream → local Buffer
|
|
123
|
+
const buf = await nthread.fileRead(proxy, stream, 512);
|
|
124
|
+
|
|
125
|
+
// Write data to a stream (string, Buffer, or NativeMemory)
|
|
126
|
+
await nthread.fileWrite(proxy, stream, 'hello');
|
|
127
|
+
|
|
128
|
+
// Flush and close
|
|
129
|
+
await nthread.fileFlush(proxy, stream);
|
|
130
|
+
await nthread.fileClose(proxy, stream);
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Read-Only Memory (`romem`)
|
|
134
|
+
|
|
135
|
+
Tracks a known-content region as a `(remote, local)` pair. `proxy.write()` auto-detects overlaps and skips unchanged bytes.
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { createReadOnlyMemory, unregisterReadOnlyMemory } from '@cheatron/nthread';
|
|
139
|
+
|
|
140
|
+
const romem = await createReadOnlyMemory(proxy, 256); // calloc in target
|
|
141
|
+
const data = Buffer.alloc(256);
|
|
142
|
+
data.writeUInt32LE(0xDEADBEEF, 0);
|
|
143
|
+
await proxy.write(romem.remote, data); // only the 4 changed bytes are written
|
|
144
|
+
|
|
145
|
+
unregisterReadOnlyMemory(romem);
|
|
146
|
+
```
|
|
147
|
+
|
|
71
148
|
---
|
|
72
149
|
|
|
73
|
-
##
|
|
150
|
+
## Class Hierarchy
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
NThread — Orchestrator: inject, threadCall, writeMemory, CRT helpers
|
|
154
|
+
└─ NThreadHeap — Heap sub-allocator per proxy (doubles up to maxSize)
|
|
155
|
+
└─ NThreadFile — Filesystem-based I/O channel (single temp file)
|
|
156
|
+
```
|
|
74
157
|
|
|
75
158
|
### `NThread`
|
|
76
159
|
|
|
@@ -83,8 +166,13 @@ new NThread(processId?, sleepAddress?, pushretAddress?, regKey?)
|
|
|
83
166
|
| Method | Description |
|
|
84
167
|
|--------|-------------|
|
|
85
168
|
| `inject(thread)` | Hijack a thread (TID or `Thread`), returns `[ProxyThread, CapturedThread]` |
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
169
|
+
| `allocString(proxy, str, opts?)` | Allocate + write a null-terminated string |
|
|
170
|
+
| `writeString(proxy, dest, str)` | Write a null-terminated string to an existing address |
|
|
171
|
+
| `fileOpen(proxy, path, mode)` | `fopen` in the target; auto-allocates/frees string args |
|
|
172
|
+
| `fileWrite(proxy, stream, data)` | `fwrite` — accepts `Buffer`, `string`, or `NativeMemory` |
|
|
173
|
+
| `fileRead(proxy, stream, dest)` | `fread` — `NativeMemory` or byte-count → `Buffer` |
|
|
174
|
+
| `fileFlush(proxy, stream)` | `fflush` |
|
|
175
|
+
| `fileClose(proxy, stream)` | `fclose` |
|
|
88
176
|
|
|
89
177
|
Overridable hooks (for subclasses):
|
|
90
178
|
- `threadClose(proxy, captured, suicide?)` — called by `proxy.close()`
|
|
@@ -93,18 +181,49 @@ Overridable hooks (for subclasses):
|
|
|
93
181
|
|
|
94
182
|
### `NThreadHeap`
|
|
95
183
|
|
|
96
|
-
Subclass of `NThread`. Pre-allocates a
|
|
184
|
+
Subclass of `NThread`. Pre-allocates a heap block in the target and sub-allocates from it. The block doubles on full (up to `maxSize`); oversized requests fall back to `msvcrt!malloc`.
|
|
97
185
|
|
|
98
186
|
```typescript
|
|
99
187
|
new NThreadHeap(heapSize?, maxSize?, processId?, sleepAddress?, pushretAddress?, regKey?)
|
|
100
|
-
// Defaults: heapSize = 65536, maxSize =
|
|
188
|
+
// Defaults: heapSize = 65536, maxSize = 524288
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
All heap blocks are **freed atomically on `proxy.close()`**.
|
|
192
|
+
|
|
193
|
+
### `NThreadFile`
|
|
194
|
+
|
|
195
|
+
Subclass of `NThreadHeap`. Replaces `ReadProcessMemory`/`WriteProcessMemory` (and the base class's decomposed `memset` writes) with a bidirectional filesystem channel.
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
new NThreadFile(heapSize?, maxSize?, processId?, sleepAddress?, pushretAddress?, regKey?)
|
|
101
199
|
```
|
|
102
200
|
|
|
103
|
-
|
|
201
|
+
- Opens a single temp file in the target with `fopen(path, "w+b")` during `inject()`
|
|
202
|
+
- **Write** (attacker → target): write locally → `fseek(0)` + `fread` in target
|
|
203
|
+
- **Read** (target → attacker): `fseek(0)` + `fwrite` + `fflush` in target → read locally
|
|
204
|
+
- `proxy.close()` calls `fclose`, deletes the temp file, then destroys heaps and restores the thread
|
|
205
|
+
|
|
206
|
+
### `ProxyThread`
|
|
207
|
+
|
|
208
|
+
High-level interface returned by `inject()`. Each operation is a replaceable delegate.
|
|
209
|
+
|
|
210
|
+
| Method | Description |
|
|
211
|
+
|--------|-------------|
|
|
212
|
+
| `read(address, size)` | Read memory from the target |
|
|
213
|
+
| `write(address, data, size?)` | Write memory to the target |
|
|
214
|
+
| `call(address, ...args)` | Call a function (up to 4 args: RCX, RDX, R8, R9) |
|
|
215
|
+
| `alloc(size, opts?)` | Allocate memory (`AllocOptions`: `fill`, `readonly`, `address`) |
|
|
216
|
+
| `free(ptr)` | Free memory |
|
|
217
|
+
| `allocString(str, encoding?, opts?)` | Alloc + write null-terminated string (default `utf16le`) |
|
|
218
|
+
| `close(suicide?)` | Release thread, or terminate with exit code |
|
|
219
|
+
|
|
220
|
+
**Delegate setters**: `setReader`, `setWriter`, `setCaller`, `setCloser`, `setAllocer`, `setFreer` — replace any operation with a custom function.
|
|
221
|
+
|
|
222
|
+
**CRT auto-binding**: All resolved `msvcrt` functions are bound as methods on the proxy (e.g. `proxy.malloc(size)`, `proxy.fopen(path, mode)`).
|
|
104
223
|
|
|
105
224
|
### `CapturedThread`
|
|
106
225
|
|
|
107
|
-
Extends `Native.Thread`. Owns the hardware context cache, suspend tracking, and register manipulation
|
|
226
|
+
Extends `Native.Thread`. Owns the hardware context cache, suspend tracking, and register manipulation.
|
|
108
227
|
|
|
109
228
|
| Method | Description |
|
|
110
229
|
|--------|-------------|
|
|
@@ -114,48 +233,77 @@ Extends `Native.Thread`. Owns the hardware context cache, suspend tracking, and
|
|
|
114
233
|
| `release()` | Restore saved context without closing handle |
|
|
115
234
|
| `close()` | `release()` → drain suspends → close handle |
|
|
116
235
|
|
|
117
|
-
### `
|
|
118
|
-
|
|
119
|
-
High-level interface for a captured thread. Each operation is a replaceable delegate.
|
|
236
|
+
### `AllocOptions`
|
|
120
237
|
|
|
121
238
|
```typescript
|
|
122
|
-
|
|
239
|
+
interface AllocOptions {
|
|
240
|
+
fill?: number; // byte value to fill allocated memory
|
|
241
|
+
readonly?: boolean; // allocate in the readonly zone of the heap
|
|
242
|
+
address?: NativePointer; // realloc mode: resize an existing allocation
|
|
243
|
+
}
|
|
123
244
|
```
|
|
124
245
|
|
|
125
|
-
|
|
126
|
-
|--------|-------------|
|
|
127
|
-
| `read(address, size)` | Read memory |
|
|
128
|
-
| `write(address, data, size?)` | Write memory |
|
|
129
|
-
| `call(address, ...args)` | Call a function |
|
|
130
|
-
| `alloc(size, opts?)` | Allocate memory (`malloc`/`calloc`/realloc) |
|
|
131
|
-
| `free(ptr)` | Free memory |
|
|
132
|
-
| `allocString(str, encoding?, opts?)` | Alloc + write a string; null-terminated; default encoding `utf16le` |
|
|
133
|
-
| `close(suicide?)` | Release the thread (or terminate with exit code) |
|
|
134
|
-
| `setReader/setWriter/setCaller/setCloser/setAllocer/setFreer` | Replace delegates |
|
|
246
|
+
---
|
|
135
247
|
|
|
136
|
-
|
|
248
|
+
## Gadget Auto-Discovery
|
|
137
249
|
|
|
138
|
-
|
|
250
|
+
Gadgets are discovered lazily on first `inject()`. The scanner searches `ntdll`, `kernel32`, `kernelbase`, and `msvcrt` for:
|
|
139
251
|
|
|
140
|
-
|
|
252
|
+
- **Sleep**: `EB FE` (`jmp .`)
|
|
253
|
+
- **Pushret**: `push reg; ret` — register priority: `Rbx → Rbp → Rdi → Rsi` (least-clobbered by `msvcrt` calls)
|
|
141
254
|
|
|
142
|
-
|
|
255
|
+
You can also provide explicit gadget addresses in the constructor if you prefer manual control:
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
const nt = new NThread(pid, mySleepAddr, myPushretAddr, 'Rbx');
|
|
259
|
+
```
|
|
143
260
|
|
|
144
261
|
---
|
|
145
262
|
|
|
146
|
-
##
|
|
263
|
+
## CRT Bridge
|
|
147
264
|
|
|
148
|
-
`
|
|
265
|
+
`crt.ts` resolves `msvcrt.dll` exports at load time. All values are `NativePointer` — used as `RIP` targets for `threadCall`.
|
|
149
266
|
|
|
150
267
|
```typescript
|
|
151
|
-
import {
|
|
268
|
+
import { crt } from '@cheatron/nthread';
|
|
269
|
+
|
|
270
|
+
crt.malloc // msvcrt!malloc
|
|
271
|
+
crt.calloc // msvcrt!calloc
|
|
272
|
+
crt.realloc // msvcrt!realloc
|
|
273
|
+
crt.free // msvcrt!free
|
|
274
|
+
crt.memset // msvcrt!memset
|
|
275
|
+
crt.fopen // msvcrt!fopen
|
|
276
|
+
crt.fread // msvcrt!fread
|
|
277
|
+
crt.fwrite // msvcrt!fwrite
|
|
278
|
+
crt.fseek // msvcrt!fseek
|
|
279
|
+
crt.fflush // msvcrt!fflush
|
|
280
|
+
crt.fclose // msvcrt!fclose
|
|
281
|
+
```
|
|
152
282
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
await proxy.write(romem.remote, data); // only changed bytes are written
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Error Hierarchy
|
|
157
286
|
|
|
158
|
-
|
|
287
|
+
```
|
|
288
|
+
NThreadError
|
|
289
|
+
├─ NoSleepAddressError — no sleep gadget found
|
|
290
|
+
├─ NoPushretAddressError — no pushret gadget found
|
|
291
|
+
├─ InjectError
|
|
292
|
+
│ ├─ InjectTimeoutError — thread didn't reach sleep in time
|
|
293
|
+
│ └─ MsvcrtNotLoadedError — msvcrt.dll not in target process
|
|
294
|
+
├─ CallError
|
|
295
|
+
│ ├─ CallNotInjectedError — call before inject
|
|
296
|
+
│ ├─ CallTooManyArgsError — more than 4 args
|
|
297
|
+
│ ├─ CallRipMismatchError — RIP not at sleep before call
|
|
298
|
+
│ ├─ CallTimeoutError — function didn't return in time
|
|
299
|
+
│ └─ CallThreadDiedError — thread exited during call (e.g. ExitThread)
|
|
300
|
+
├─ WriteError
|
|
301
|
+
│ └─ WriteSizeRequiredError — NativePointer write without size
|
|
302
|
+
├─ AllocError
|
|
303
|
+
│ └─ ReallocNullError — realloc with null address
|
|
304
|
+
├─ FileError — fopen returned NULL
|
|
305
|
+
└─ GadgetError
|
|
306
|
+
└─ GadgetScanError — pattern scan failed
|
|
159
307
|
```
|
|
160
308
|
|
|
161
309
|
---
|
|
@@ -165,7 +313,11 @@ unregisterReadOnlyMemory(romem);
|
|
|
165
313
|
```bash
|
|
166
314
|
bun install
|
|
167
315
|
bun run build
|
|
168
|
-
|
|
316
|
+
bun run lint
|
|
317
|
+
bun run format
|
|
318
|
+
|
|
319
|
+
# Tests require Wine (Windows x64 on Linux)
|
|
320
|
+
wine /path/to/bun-windows-x64/bun.exe test
|
|
169
321
|
```
|
|
170
322
|
|
|
171
323
|
---
|
package/dist/crt.d.ts
CHANGED
package/dist/crt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crt.d.ts","sourceRoot":"","sources":["../src/crt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;CAC5B;AAYD;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"crt.d.ts","sourceRoot":"","sources":["../src/crt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;CAC5B;AAYD;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,YAYjB,CAAC"}
|
package/dist/crt.js
CHANGED
package/dist/crt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crt.js","sourceRoot":"","sources":["../src/crt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"crt.js","sourceRoot":"","sources":["../src/crt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAqBlC;;;GAGG;AACH,MAAM,GAAG,GAAG,CAAC,IAAY,EAAwB,EAAE;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACpD,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAiB;IAC/B,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;IACrB,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;CAClB,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -43,6 +43,18 @@ export declare class CallThreadDiedError extends CallError {
|
|
|
43
43
|
}
|
|
44
44
|
export declare class WriteError extends NThreadError {
|
|
45
45
|
}
|
|
46
|
+
export declare class WriteSizeRequiredError extends WriteError {
|
|
47
|
+
constructor();
|
|
48
|
+
}
|
|
49
|
+
export declare class AllocError extends NThreadError {
|
|
50
|
+
}
|
|
51
|
+
export declare class ReallocNullError extends AllocError {
|
|
52
|
+
readonly address: bigint;
|
|
53
|
+
readonly size: number;
|
|
54
|
+
constructor(address: bigint, size: number);
|
|
55
|
+
}
|
|
56
|
+
export declare class FileError extends NThreadError {
|
|
57
|
+
}
|
|
46
58
|
export declare class GadgetError extends NThreadError {
|
|
47
59
|
}
|
|
48
60
|
export declare class GadgetScanError extends GadgetError {
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,uBAAe,SAAU,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAID,qBAAa,YAAa,SAAQ,SAAS;CAAG;AAE9C,qBAAa,mBAAoB,SAAQ,YAAY;;CAIpD;AAED,qBAAa,qBAAsB,SAAQ,YAAY;;CAItD;AAED,qBAAa,WAAY,SAAQ,YAAY;CAAG;AAEhD,qBAAa,kBAAmB,SAAQ,WAAW;aACrB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAG/C;AAED,qBAAa,oBAAqB,SAAQ,WAAW;;CAIpD;AAID,qBAAa,SAAU,SAAQ,YAAY;IACzC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5C;AAED,qBAAa,oBAAqB,SAAQ,SAAS;;CAIlD;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,QAAQ,EAAE,MAAM;CAO7B;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAQpE;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAO/C;AAED,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,MAAM,EAAE,MAAM;CAM3B;AAID,qBAAa,UAAW,SAAQ,YAAY;CAAG;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,uBAAe,SAAU,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAID,qBAAa,YAAa,SAAQ,SAAS;CAAG;AAE9C,qBAAa,mBAAoB,SAAQ,YAAY;;CAIpD;AAED,qBAAa,qBAAsB,SAAQ,YAAY;;CAItD;AAED,qBAAa,WAAY,SAAQ,YAAY;CAAG;AAEhD,qBAAa,kBAAmB,SAAQ,WAAW;aACrB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAG/C;AAED,qBAAa,oBAAqB,SAAQ,WAAW;;CAIpD;AAID,qBAAa,SAAU,SAAQ,YAAY;IACzC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5C;AAED,qBAAa,oBAAqB,SAAQ,SAAS;;CAIlD;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAErB,QAAQ,EAAE,MAAM;CAO7B;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAQpE;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAO/C;AAED,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,MAAM,EAAE,MAAM;CAM3B;AAID,qBAAa,UAAW,SAAQ,YAAY;CAAG;AAE/C,qBAAa,sBAAuB,SAAQ,UAAU;;CAIrD;AAID,qBAAa,UAAW,SAAQ,YAAY;CAAG;AAE/C,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAID,qBAAa,SAAU,SAAQ,YAAY;CAAG;AAI9C,qBAAa,WAAY,SAAQ,YAAY;CAAG;AAEhD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/errors.js
CHANGED
|
@@ -76,6 +76,26 @@ export class CallThreadDiedError extends CallError {
|
|
|
76
76
|
// ── Write errors ─────────────────────────────────────────────────────────────────
|
|
77
77
|
export class WriteError extends NThreadError {
|
|
78
78
|
}
|
|
79
|
+
export class WriteSizeRequiredError extends WriteError {
|
|
80
|
+
constructor() {
|
|
81
|
+
super('Size must be specified when writing from a NativePointer source');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ── Alloc errors ─────────────────────────────────────────────────────────────
|
|
85
|
+
export class AllocError extends NThreadError {
|
|
86
|
+
}
|
|
87
|
+
export class ReallocNullError extends AllocError {
|
|
88
|
+
address;
|
|
89
|
+
size;
|
|
90
|
+
constructor(address, size) {
|
|
91
|
+
super(`realloc(0x${address.toString(16)}, ${size}) returned NULL`);
|
|
92
|
+
this.address = address;
|
|
93
|
+
this.size = size;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ── File I/O errors ───────────────────────────────────────────────────────────
|
|
97
|
+
export class FileError extends NThreadError {
|
|
98
|
+
}
|
|
79
99
|
// ── Gadget errors ─────────────────────────────────────────────────────────────
|
|
80
100
|
export class GadgetError extends NThreadError {
|
|
81
101
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,MAAe,SAAU,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,OAAO,YAAa,SAAQ,SAAS;CAAG;AAE9C,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD;QACE,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACpE,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IACrD;QACE,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACrE,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;CAAG;AAEhD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACrB;IAA5B,YAA4B,UAAkB;QAC5C,KAAK,CAAC,oDAAoD,UAAU,GAAG,CAAC,CAAC;QAD/C,eAAU,GAAV,UAAU,CAAQ;IAE9C,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD;QACE,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACnE,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,OAAO,SAAU,SAAQ,YAAY;IACzB,MAAM,CAAS;IAE/B,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjD;QACE,KAAK,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjC,QAAQ,CAAS;IAEjC,YAAY,QAAgB;QAC1B,KAAK,CACH,oFAAoF,QAAQ,EAAE,EAC9F,EAAE,CACH,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjC,UAAU,CAAS;IACnB,WAAW,CAAS;IAEpC,YAAY,MAAc,EAAE,UAAkB,EAAE,WAAmB;QACjE,KAAK,CACH,iBAAiB,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,gCAAgC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EACnG,MAAM,CACP,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7B,UAAU,CAAS;IAEnC,YAAY,MAAc,EAAE,UAAkB;QAC5C,KAAK,CACH,wDAAwD,UAAU,GAAG,EACrE,MAAM,CACP,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAChD,YAAY,MAAc;QACxB,KAAK,CACH,+DAA+D,EAC/D,MAAM,CACP,CAAC;IACJ,CAAC;CACF;AAED,oFAAoF;AAEpF,MAAM,OAAO,UAAW,SAAQ,YAAY;CAAG;AAE/C,iFAAiF;AAEjF,MAAM,OAAO,WAAY,SAAQ,YAAY;CAAG;AAEhD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9B,OAAO,CAAS;IAEhC,YAAY,OAAe;QACzB,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,MAAe,SAAU,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,OAAO,YAAa,SAAQ,SAAS;CAAG;AAE9C,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD;QACE,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACpE,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IACrD;QACE,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACrE,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;CAAG;AAEhD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACrB;IAA5B,YAA4B,UAAkB;QAC5C,KAAK,CAAC,oDAAoD,UAAU,GAAG,CAAC,CAAC;QAD/C,eAAU,GAAV,UAAU,CAAQ;IAE9C,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD;QACE,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACnE,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,OAAO,SAAU,SAAQ,YAAY;IACzB,MAAM,CAAS;IAE/B,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjD;QACE,KAAK,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjC,QAAQ,CAAS;IAEjC,YAAY,QAAgB;QAC1B,KAAK,CACH,oFAAoF,QAAQ,EAAE,EAC9F,EAAE,CACH,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjC,UAAU,CAAS;IACnB,WAAW,CAAS;IAEpC,YAAY,MAAc,EAAE,UAAkB,EAAE,WAAmB;QACjE,KAAK,CACH,iBAAiB,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,gCAAgC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EACnG,MAAM,CACP,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7B,UAAU,CAAS;IAEnC,YAAY,MAAc,EAAE,UAAkB;QAC5C,KAAK,CACH,wDAAwD,UAAU,GAAG,EACrE,MAAM,CACP,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAChD,YAAY,MAAc;QACxB,KAAK,CACH,+DAA+D,EAC/D,MAAM,CACP,CAAC;IACJ,CAAC;CACF;AAED,oFAAoF;AAEpF,MAAM,OAAO,UAAW,SAAQ,YAAY;CAAG;AAE/C,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD;QACE,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAC3E,CAAC;CACF;AAED,gFAAgF;AAEhF,MAAM,OAAO,UAAW,SAAQ,YAAY;CAAG;AAE/C,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9B,OAAO,CAAS;IAChB,IAAI,CAAS;IAE7B,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,aAAa,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,OAAO,SAAU,SAAQ,YAAY;CAAG;AAE9C,iFAAiF;AAEjF,MAAM,OAAO,WAAY,SAAQ,YAAY;CAAG;AAEhD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9B,OAAO,CAAS;IAEhC,YAAY,OAAe;QACzB,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './logger.js';
|
|
|
4
4
|
export * from './thread/captured-thread.js';
|
|
5
5
|
export * from './nthread.js';
|
|
6
6
|
export * from './nthread-heap.js';
|
|
7
|
+
export * from './nthread-file.js';
|
|
7
8
|
export * from './globals.js';
|
|
8
9
|
export * from './thread/proxy-thread.js';
|
|
9
10
|
export * from './memory/romem.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export * from './logger.js';
|
|
|
4
4
|
export * from './thread/captured-thread.js';
|
|
5
5
|
export * from './nthread.js';
|
|
6
6
|
export * from './nthread-heap.js';
|
|
7
|
+
export * from './nthread-file.js';
|
|
7
8
|
export * from './globals.js';
|
|
8
9
|
export * from './thread/proxy-thread.js';
|
|
9
10
|
export * from './memory/romem.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC"}
|
package/dist/memory/heap.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ import { type ReadOnlyMemory } from './romem.js';
|
|
|
5
5
|
export declare const DEFAULT_HEAP_SIZE = 16384;
|
|
6
6
|
/** Result of a heap allocation — pointer into the pre-allocated region */
|
|
7
7
|
export interface HeapAlloc {
|
|
8
|
-
/** Remote address in the target process */
|
|
9
|
-
readonly remote: Native.
|
|
8
|
+
/** Remote address in the target process (includes allocation size) */
|
|
9
|
+
readonly remote: Native.NativeMemory;
|
|
10
10
|
/** Size of this allocation */
|
|
11
11
|
readonly size: number;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap.d.ts","sourceRoot":"","sources":["../../src/memory/heap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAGpB,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,
|
|
1
|
+
{"version":3,"file":"heap.d.ts","sourceRoot":"","sources":["../../src/memory/heap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAGpB,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;IACrC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,IAAI;IACf,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAE/B,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAK;IACrB,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAAK;IAErB,yDAAyD;IACzD,OAAO,CAAC,UAAU,CAAmB;IACrC,0DAA0D;IAC1D,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO;IAcP;;;;;;;;OAQG;WACU,MAAM,CACjB,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,MAA0B,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAuBhB,qDAAqD;IACrD,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,CAEjC;IAED,gFAAgF;IAChF,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,iFAAiF;IACjF,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAmB7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqChC;;;;;;;;;;OAUG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IA6BtC;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IA6B9B;;;;;;;;;OASG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAqB5B;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAQb;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjD"}
|
package/dist/memory/heap.js
CHANGED
|
@@ -77,7 +77,7 @@ export class Heap {
|
|
|
77
77
|
throw new Error(`calloc(1, ${totalSize}) returned NULL`);
|
|
78
78
|
}
|
|
79
79
|
// Register the readonly zone as romem for snapshot-based write optimization
|
|
80
|
-
const roRemote = base;
|
|
80
|
+
const roRemote = new Native.NativeMemory(base.address, actualRoSize);
|
|
81
81
|
const roLocal = Buffer.alloc(actualRoSize); // zero-filled — matches calloc
|
|
82
82
|
const romem = registerReadOnlyMemory(roRemote, roLocal);
|
|
83
83
|
return new Heap(base, totalSize, actualRoSize, rwSize, romem);
|
|
@@ -183,14 +183,14 @@ export class Heap {
|
|
|
183
183
|
const freeIdx = Heap.findFreeBlock(this.roFreeList, size);
|
|
184
184
|
if (freeIdx !== -1) {
|
|
185
185
|
const offset = Heap.splitFreeBlock(this.roFreeList, freeIdx, size);
|
|
186
|
-
const remote = new Native.
|
|
186
|
+
const remote = new Native.NativeMemory(this.base.address + BigInt(offset), size);
|
|
187
187
|
return { remote, size };
|
|
188
188
|
}
|
|
189
189
|
// Bump allocate
|
|
190
190
|
if (this.roOffset + size > this.roSize) {
|
|
191
191
|
throw new Error(`Readonly zone exhausted: requested ${size}, available ${this.roAvailable}`);
|
|
192
192
|
}
|
|
193
|
-
const remote = new Native.
|
|
193
|
+
const remote = new Native.NativeMemory(this.base.address + BigInt(this.roOffset), size);
|
|
194
194
|
this.roOffset += size;
|
|
195
195
|
return { remote, size };
|
|
196
196
|
}
|
|
@@ -211,14 +211,14 @@ export class Heap {
|
|
|
211
211
|
const freeIdx = Heap.findFreeBlock(this.rwFreeList, size);
|
|
212
212
|
if (freeIdx !== -1) {
|
|
213
213
|
const offset = Heap.splitFreeBlock(this.rwFreeList, freeIdx, size);
|
|
214
|
-
const remote = new Native.
|
|
214
|
+
const remote = new Native.NativeMemory(this.base.address + BigInt(this.roSize) + BigInt(offset), size);
|
|
215
215
|
return { remote, size };
|
|
216
216
|
}
|
|
217
217
|
// Bump allocate
|
|
218
218
|
if (this.rwOffset + size > this.rwSize) {
|
|
219
219
|
throw new Error(`ReadWrite zone exhausted: requested ${size}, available ${this.rwAvailable}`);
|
|
220
220
|
}
|
|
221
|
-
const remote = this.base.
|
|
221
|
+
const remote = new Native.NativeMemory(this.base.address + BigInt(this.roSize) + BigInt(this.rwOffset), size);
|
|
222
222
|
this.rwOffset += size;
|
|
223
223
|
return { remote, size };
|
|
224
224
|
}
|
package/dist/memory/heap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap.js","sourceRoot":"","sources":["../../src/memory/heap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,sCAAsC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAkBvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,IAAI;IACf,mDAAmD;IAC1C,IAAI,CAAuB;IACpC,6BAA6B;IACpB,SAAS,CAAS;IAC3B,gCAAgC;IACvB,MAAM,CAAS;IACxB,iCAAiC;IACxB,MAAM,CAAS;IAExB,6CAA6C;IACpC,KAAK,CAAiB;IAE/B,mDAAmD;IAC3C,QAAQ,GAAG,CAAC,CAAC;IACrB,oDAAoD;IAC5C,QAAQ,GAAG,CAAC,CAAC;IAErB,yDAAyD;IACjD,UAAU,GAAgB,EAAE,CAAC;IACrC,0DAA0D;IAClD,UAAU,GAAgB,EAAE,CAAC;IAErC,YACE,IAA0B,EAC1B,SAAiB,EACjB,MAAc,EACd,MAAc,EACd,KAAqB;QAErB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,KAAkB,EAClB,YAAoB,iBAAiB,EACrC,MAAe;QAEf,MAAM,YAAY,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;QAExC,IAAI,YAAY,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,8BAA8B,YAAY,YAAY,MAAM,EAAE,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,iBAAiB,CAAC,CAAC;QAC3D,CAAC;QAED,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"heap.js","sourceRoot":"","sources":["../../src/memory/heap.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/romem.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ import type { ProxyThread } from '../thread/proxy-thread.js';
|
|
|
7
7
|
* this lets writeMemory skip unchanged bytes automatically.
|
|
8
8
|
*/
|
|
9
9
|
export interface ReadOnlyMemory {
|
|
10
|
-
/** Remote address in the target process (allocated via calloc) */
|
|
11
|
-
readonly remote: Native.
|
|
10
|
+
/** Remote address in the target process (allocated via calloc, size included) */
|
|
11
|
+
readonly remote: Native.NativeMemory;
|
|
12
12
|
/** Local copy of the data — always mirrors what is on the remote side */
|
|
13
13
|
readonly local: Buffer;
|
|
14
14
|
}
|
|
@@ -29,7 +29,7 @@ export declare function createReadOnlyMemory(proxy: ProxyThread, size: number):
|
|
|
29
29
|
* @param remote Address in the target process.
|
|
30
30
|
* @param local Buffer that mirrors the remote contents exactly.
|
|
31
31
|
*/
|
|
32
|
-
export declare function registerReadOnlyMemory(remote: Native.
|
|
32
|
+
export declare function registerReadOnlyMemory(remote: Native.NativeMemory, local: Buffer): ReadOnlyMemory;
|
|
33
33
|
/**
|
|
34
34
|
* Removes a read-only memory region from the registry.
|
|
35
35
|
* Does NOT free the remote allocation — call `free` separately if needed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"romem.d.ts","sourceRoot":"","sources":["../../src/memory/romem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,
|
|
1
|
+
{"version":3,"file":"romem.d.ts","sourceRoot":"","sources":["../../src/memory/romem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;IACrC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAKD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,YAAY,EAC3B,KAAK,EAAE,MAAM,GACZ,cAAc,CAIhB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,SAAS,CAW5B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GACpB;IACD,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;CAClB,CAiBA;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,IAAI,CAeN"}
|
package/dist/memory/romem.js
CHANGED
|
@@ -15,8 +15,9 @@ export async function createReadOnlyMemory(proxy, size) {
|
|
|
15
15
|
if (ptr.address === 0n) {
|
|
16
16
|
throw new Error(`calloc(1, ${size}) returned NULL`);
|
|
17
17
|
}
|
|
18
|
+
const remote = Native.NativeMemory.createFromPointer(ptr, undefined, size);
|
|
18
19
|
const local = Buffer.alloc(size); // zero-filled — matches calloc
|
|
19
|
-
const romem = { remote
|
|
20
|
+
const romem = { remote, local };
|
|
20
21
|
regions.push(romem);
|
|
21
22
|
return romem;
|
|
22
23
|
}
|
package/dist/memory/romem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"romem.js","sourceRoot":"","sources":["../../src/memory/romem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAehC,4DAA4D;AAC5D,MAAM,OAAO,GAAqB,EAAE,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAkB,EAClB,IAAY;IAEZ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,GAAG,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B;IACjE,MAAM,KAAK,GAAmB,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"romem.js","sourceRoot":"","sources":["../../src/memory/romem.ts"],"names":[],"mappings":"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"}
|