@zsa233/frida-analykit-agent 2.0.0 → 2.0.2

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 (87) hide show
  1. package/dist/api/android.d.ts +41 -0
  2. package/dist/api/android.js +1 -0
  3. package/dist/bridges.d.ts +4 -0
  4. package/dist/bridges.js +8 -0
  5. package/dist/cmodule/scan_adrp.d.ts +9 -0
  6. package/{src/cmodule/scan_adrp.ts → dist/cmodule/scan_adrp.js} +19 -30
  7. package/dist/config.d.ts +26 -0
  8. package/dist/config.js +27 -0
  9. package/dist/consts.d.ts +18 -0
  10. package/dist/consts.js +23 -0
  11. package/dist/elf/insn.d.ts +10 -0
  12. package/dist/elf/insn.js +43 -0
  13. package/dist/elf/module.d.ts +95 -0
  14. package/dist/elf/module.js +632 -0
  15. package/dist/elf/struct.d.ts +235 -0
  16. package/{src/elf/struct.ts → dist/elf/struct.js} +63 -149
  17. package/dist/elf/tools.d.ts +6 -0
  18. package/dist/elf/tools.js +25 -0
  19. package/dist/elf/verifier.d.ts +11 -0
  20. package/dist/elf/verifier.js +57 -0
  21. package/dist/elf/xref.d.ts +32 -0
  22. package/dist/elf/xref.js +271 -0
  23. package/dist/func.d.ts +7 -0
  24. package/dist/func.js +23 -0
  25. package/dist/helper.d.ts +130 -0
  26. package/dist/helper.js +527 -0
  27. package/{src/index.ts → dist/index.d.ts} +0 -1
  28. package/dist/index.js +9 -0
  29. package/dist/jni/env.d.ts +821 -0
  30. package/dist/jni/env.js +1054 -0
  31. package/{src/jni/struct.ts → dist/jni/struct.d.ts} +8 -54
  32. package/dist/jni/struct.js +173 -0
  33. package/dist/lib/libc.d.ts +68 -0
  34. package/dist/lib/libc.js +125 -0
  35. package/dist/lib/libssl.d.ts +23 -0
  36. package/dist/lib/libssl.js +60 -0
  37. package/dist/message.d.ts +18 -0
  38. package/dist/message.js +21 -0
  39. package/dist/net/ssl.d.ts +29 -0
  40. package/dist/net/ssl.js +249 -0
  41. package/dist/net/struct.d.ts +34 -0
  42. package/{src/net/struct.ts → dist/net/struct.js} +4 -18
  43. package/dist/net/tools.js +1 -0
  44. package/dist/process.d.ts +43 -0
  45. package/dist/process.js +77 -0
  46. package/dist/rpc.d.ts +1 -0
  47. package/dist/rpc.js +248 -0
  48. package/dist/utils/array_pointer.d.ts +21 -0
  49. package/dist/utils/array_pointer.js +81 -0
  50. package/dist/utils/queue.d.ts +19 -0
  51. package/dist/utils/queue.js +89 -0
  52. package/dist/utils/scan.d.ts +35 -0
  53. package/dist/utils/scan.js +72 -0
  54. package/dist/utils/std.d.ts +40 -0
  55. package/dist/utils/std.js +128 -0
  56. package/dist/utils/text_endec.d.ts +8 -0
  57. package/dist/utils/text_endec.js +29 -0
  58. package/dist/utils/utils.d.ts +28 -0
  59. package/dist/utils/utils.js +66 -0
  60. package/package.json +18 -5
  61. package/src/api/android.ts +0 -80
  62. package/src/bridges.ts +0 -18
  63. package/src/cmodule/scan_adrp.c +0 -81
  64. package/src/config.ts +0 -56
  65. package/src/consts.ts +0 -31
  66. package/src/elf/insn.ts +0 -61
  67. package/src/elf/module.ts +0 -751
  68. package/src/elf/tools.ts +0 -33
  69. package/src/elf/verifier.ts +0 -74
  70. package/src/elf/xref.ts +0 -360
  71. package/src/func.ts +0 -32
  72. package/src/helper.ts +0 -685
  73. package/src/jni/env.ts +0 -1439
  74. package/src/lib/libc.ts +0 -161
  75. package/src/lib/libssl.ts +0 -95
  76. package/src/message.ts +0 -26
  77. package/src/net/ssl.ts +0 -360
  78. package/src/process.ts +0 -137
  79. package/src/rpc.ts +0 -268
  80. package/src/runtime-globals.d.ts +0 -11
  81. package/src/utils/array_pointer.ts +0 -102
  82. package/src/utils/queue.ts +0 -102
  83. package/src/utils/scan.ts +0 -103
  84. package/src/utils/std.ts +0 -165
  85. package/src/utils/text_endec.ts +0 -35
  86. package/src/utils/utils.ts +0 -111
  87. /package/{src/net/tools.ts → dist/net/tools.d.ts} +0 -0
package/dist/rpc.js ADDED
@@ -0,0 +1,248 @@
1
+ import { Java, ObjC, Swift } from "./bridges.js";
2
+ import { JNIEnv } from "./jni/env.js";
3
+ import { RPCMsgType } from "./message.js";
4
+ import { SSLTools } from "./net/ssl.js";
5
+ import { help } from "./helper.js";
6
+ import { Libssl } from "./lib/libssl.js";
7
+ import { proc } from "./process.js";
8
+ import { ElfTools } from "./elf/tools.js";
9
+ const _BASE_CONTEXT = {
10
+ Java,
11
+ Process,
12
+ Module,
13
+ Memory,
14
+ ObjC,
15
+ Swift,
16
+ File,
17
+ hexdump,
18
+ ApiResolver,
19
+ Arm64Relocator,
20
+ Arm64Writer,
21
+ Stalker,
22
+ Thread,
23
+ Interceptor,
24
+ ModuleMap,
25
+ Frida,
26
+ Script,
27
+ Backtracer,
28
+ UInt64,
29
+ Int64,
30
+ Worker,
31
+ help,
32
+ proc,
33
+ JNIEnv,
34
+ SSLTools,
35
+ ElfTools,
36
+ Libssl,
37
+ Object, Array, String, Number, Boolean, Symbol, BigInt, Function,
38
+ Math, Date, RegExp, Map, Set, WeakMap, WeakSet,
39
+ Error, TypeError, SyntaxError,
40
+ JSON, console,
41
+ isNaN, isFinite, parseInt, parseFloat,
42
+ setTimeout, clearTimeout, setInterval, clearInterval,
43
+ encodeURI, decodeURI, encodeURIComponent, decodeURIComponent,
44
+ Reflect, Proxy,
45
+ ArrayBuffer,
46
+ Int8Array,
47
+ Int16Array,
48
+ Int32Array,
49
+ Uint8Array,
50
+ Uint16Array,
51
+ Uint32Array,
52
+ NativePointer,
53
+ NativeFunction,
54
+ NativeCallback,
55
+ };
56
+ const EVAL_SCOPES = {};
57
+ const SCOPE_GETTER_PREFIX = '__get__$$';
58
+ let ID_INCR = 0;
59
+ function gen_id() {
60
+ ID_INCR++;
61
+ return `${SCOPE_GETTER_PREFIX}${ID_INCR.toString(16)}`;
62
+ }
63
+ function getValueByPath(path, bind = false, root = globalThis) {
64
+ let obj = root;
65
+ let parent = obj;
66
+ for (let key of path.split('/')) {
67
+ parent = obj;
68
+ obj = obj[key];
69
+ }
70
+ if (parent !== root && typeof (obj) === 'function') {
71
+ obj = bind ? obj.bind(parent) : obj;
72
+ }
73
+ return obj;
74
+ }
75
+ function getObj(instIdOrObjChain, scopeId, bind = false) {
76
+ let value;
77
+ if (instIdOrObjChain.startsWith(SCOPE_GETTER_PREFIX)) {
78
+ const scope = EVAL_SCOPES[scopeId];
79
+ value = getValueByPath(instIdOrObjChain, bind, scope);
80
+ }
81
+ else {
82
+ value = getValueByPath(instIdOrObjChain, bind);
83
+ }
84
+ return value;
85
+ }
86
+ function enumerateObjProps(instIdOrObjChain, scopeId) {
87
+ const propsList = [];
88
+ const objList = [];
89
+ if (typeof (instIdOrObjChain) === 'string') {
90
+ objList.push(instIdOrObjChain);
91
+ }
92
+ else {
93
+ objList.push(...instIdOrObjChain);
94
+ }
95
+ for (let v of objList) {
96
+ const props = {};
97
+ let obj;
98
+ try {
99
+ obj = getObj(v, scopeId);
100
+ }
101
+ catch (e) { }
102
+ try {
103
+ const numKeys = [];
104
+ while (obj && obj !== Object.prototype) {
105
+ for (const key of Reflect.ownKeys(obj)) {
106
+ if (typeof (key) === 'symbol') {
107
+ continue;
108
+ }
109
+ if (/^\d+$/.test(key)) {
110
+ numKeys.push(parseInt(key));
111
+ continue;
112
+ }
113
+ let type;
114
+ const desc = Reflect.getOwnPropertyDescriptor(obj, key);
115
+ if (desc?.get) {
116
+ type = 'getter';
117
+ }
118
+ else if (desc?.set) {
119
+ type = 'setter';
120
+ }
121
+ else {
122
+ type = typeof (obj[key]);
123
+ }
124
+ props[String(key)] = type;
125
+ }
126
+ obj = Object.getPrototypeOf(obj);
127
+ }
128
+ if (numKeys.length > 0) {
129
+ if (numKeys.length <= 50) {
130
+ for (let n of numKeys) {
131
+ const key = n.toString();
132
+ const desc = Reflect.getOwnPropertyDescriptor(obj, key);
133
+ let type;
134
+ if (desc?.get) {
135
+ type = 'getter';
136
+ }
137
+ else if (desc?.set) {
138
+ type = 'setter';
139
+ }
140
+ else {
141
+ type = typeof (obj[key]);
142
+ }
143
+ props[String(key)] = type;
144
+ }
145
+ }
146
+ else {
147
+ const minN = Math.min(...numKeys);
148
+ const maxN = Math.max(...numKeys);
149
+ props[`[${minN}:${maxN + 1}]`] = 'index';
150
+ }
151
+ }
152
+ }
153
+ catch (e) {
154
+ }
155
+ propsList.push(props);
156
+ }
157
+ return {
158
+ type: RPCMsgType.ENUMERATE_OBJ_PROPS,
159
+ data: {
160
+ props: propsList,
161
+ },
162
+ };
163
+ }
164
+ function iterScopeGet(v, scopeId, bind = false) {
165
+ switch (typeof (v)) {
166
+ case 'string':
167
+ if (v.startsWith(SCOPE_GETTER_PREFIX)) {
168
+ return getObj(v, scopeId, bind);
169
+ }
170
+ break;
171
+ case 'object':
172
+ const nv = {};
173
+ for (const [kk, vv] of Object.entries(v)) {
174
+ nv[kk] = iterScopeGet(vv, scopeId, bind);
175
+ }
176
+ return nv;
177
+ }
178
+ return v;
179
+ }
180
+ function scopeCall(instIdOrObjChain, args, scopeId) {
181
+ const obj = getObj(instIdOrObjChain, scopeId, true);
182
+ const nargs = args.map(v => {
183
+ return iterScopeGet(v, scopeId, false);
184
+ });
185
+ const result = obj(...nargs);
186
+ const id = gen_id();
187
+ scopeSave(result, id, scopeId);
188
+ return {
189
+ type: RPCMsgType.SCOPE_CALL,
190
+ data: {
191
+ id,
192
+ type: typeof (result),
193
+ result
194
+ }
195
+ };
196
+ }
197
+ function scopeSave(obj, instId, scopeId) {
198
+ let scope = EVAL_SCOPES[scopeId];
199
+ if (scope === undefined) {
200
+ scope = {};
201
+ EVAL_SCOPES[scopeId] = scope;
202
+ }
203
+ scope[instId] = obj;
204
+ }
205
+ function scopeGet(instIdOrObjChain, scopeId, bind = false) {
206
+ const value = getObj(instIdOrObjChain, scopeId, bind);
207
+ return {
208
+ type: RPCMsgType.SCOPE_GET,
209
+ data: {
210
+ value,
211
+ }
212
+ };
213
+ }
214
+ function scopeClear(scopeId) {
215
+ delete (EVAL_SCOPES[scopeId]);
216
+ }
217
+ function scopeDel(instId, scopeId) {
218
+ const scope = EVAL_SCOPES[scopeId];
219
+ if (scope) {
220
+ delete (scope[instId]);
221
+ }
222
+ }
223
+ function evalWithContext(code, context = {}) {
224
+ const mergeContext = { ..._BASE_CONTEXT, ...context };
225
+ return Function(...Object.keys(mergeContext), code)(...Object.values(mergeContext));
226
+ }
227
+ function scopeEval(source, scopeId) {
228
+ const result = evalWithContext(source, EVAL_SCOPES[scopeId] || {});
229
+ const id = gen_id();
230
+ scopeSave(result, id, scopeId);
231
+ return {
232
+ type: RPCMsgType.SCOPE_EVAL,
233
+ data: {
234
+ id,
235
+ type: typeof (result),
236
+ result
237
+ }
238
+ };
239
+ }
240
+ rpc.exports = {
241
+ enumerateObjProps,
242
+ scopeCall,
243
+ scopeEval,
244
+ scopeClear,
245
+ scopeGet,
246
+ scopeSave,
247
+ scopeDel,
248
+ };
@@ -0,0 +1,21 @@
1
+ export declare class ArrayPointer extends Number {
2
+ buff: ArrayBuffer | undefined;
3
+ constructor(val: any, buff?: ArrayBuffer);
4
+ isNull(): boolean;
5
+ add(val: number | ArrayPointer): ArrayPointer;
6
+ sub(val: number | ArrayPointer): ArrayPointer;
7
+ toNumber(): number;
8
+ getViewer(size: number): DataView;
9
+ readS8(): number;
10
+ readU8(): number;
11
+ readS16(): number;
12
+ readU16(): number;
13
+ readS32(): number;
14
+ readU32(): number;
15
+ readS64(): BigInt;
16
+ readU64(): BigInt;
17
+ readCString(): string;
18
+ readByteArray(length: number): ArrayBuffer;
19
+ readPointer(): NativePointer;
20
+ toString(): string;
21
+ }
@@ -0,0 +1,81 @@
1
+ export class ArrayPointer extends Number {
2
+ constructor(val, buff) {
3
+ super(val);
4
+ this.buff = buff;
5
+ }
6
+ isNull() {
7
+ return !this.buff?.byteLength;
8
+ }
9
+ add(val) {
10
+ return new ArrayPointer(this.toNumber() + Number(val), this.buff);
11
+ }
12
+ sub(val) {
13
+ return new ArrayPointer(this.toNumber() - Number(val), this.buff);
14
+ }
15
+ toNumber() {
16
+ return Number(this);
17
+ }
18
+ getViewer(size) {
19
+ const off = this.toNumber();
20
+ const view = new DataView(this.buff.slice(off, off + size));
21
+ return view;
22
+ }
23
+ readS8() {
24
+ const view = this.getViewer(1);
25
+ return view.getInt8(0);
26
+ }
27
+ readU8() {
28
+ const view = this.getViewer(1);
29
+ return view.getUint8(0);
30
+ }
31
+ readS16() {
32
+ const view = this.getViewer(2);
33
+ return view.getInt16(0, true);
34
+ }
35
+ readU16() {
36
+ const view = this.getViewer(2);
37
+ return view.getUint16(0, true);
38
+ }
39
+ readS32() {
40
+ const view = this.getViewer(4);
41
+ return view.getInt32(0, true);
42
+ }
43
+ readU32() {
44
+ const view = this.getViewer(4);
45
+ return view.getUint32(0, true);
46
+ }
47
+ readS64() {
48
+ const view = this.getViewer(8);
49
+ return view.getBigInt64(0, true);
50
+ }
51
+ readU64() {
52
+ const view = this.getViewer(8);
53
+ return view.getBigUint64(0, true);
54
+ }
55
+ readCString() {
56
+ if (this.isNull()) {
57
+ return '';
58
+ }
59
+ const off = this.toNumber();
60
+ let str = '';
61
+ const bview = new DataView(this.buff);
62
+ for (let i = off; i < this.buff.byteLength; i++) {
63
+ const b = bview.getUint8(i);
64
+ if (b === 0x00) {
65
+ break;
66
+ }
67
+ str += String.fromCharCode(b);
68
+ }
69
+ return str;
70
+ }
71
+ readByteArray(length) {
72
+ const off = this.toNumber();
73
+ return this.buff.slice(off, off + length);
74
+ }
75
+ readPointer() {
76
+ return ptr(Number(this.readU64())).readPointer();
77
+ }
78
+ toString() {
79
+ return this.readU64().toString(16);
80
+ }
81
+ }
@@ -0,0 +1,19 @@
1
+ export declare class FixedQueue<T> {
2
+ private _index;
3
+ private $depth;
4
+ private $list;
5
+ private $length;
6
+ private $overflowCallback?;
7
+ constructor(length: number);
8
+ push(elm: T): T | undefined;
9
+ pop(): T | undefined;
10
+ clear(): void;
11
+ get $headIndex(): number;
12
+ get $tailIndex(): number;
13
+ get list(): T[];
14
+ get length(): number;
15
+ index(offset: number): T | undefined;
16
+ flush(): Array<T>;
17
+ registerOverflowCallback(callback: (elements: T[]) => void): void;
18
+ $onOverflow(element: T): void;
19
+ }
@@ -0,0 +1,89 @@
1
+ export class FixedQueue {
2
+ constructor(length) {
3
+ this._index = -1;
4
+ this.$depth = 0;
5
+ this.$length = 0;
6
+ this.$list = Array.from({ length: length }, () => undefined);
7
+ this.$length = 0;
8
+ this.$depth = length;
9
+ }
10
+ push(elm) {
11
+ let popElm = undefined;
12
+ this._index = (this._index + 1) % this.$depth;
13
+ if (this.$length === this.$depth) {
14
+ popElm = this.$list[this._index];
15
+ }
16
+ else {
17
+ this.$length++;
18
+ }
19
+ this.$list[this._index] = elm;
20
+ if (popElm !== undefined) {
21
+ this.$onOverflow(popElm);
22
+ }
23
+ return popElm;
24
+ }
25
+ pop() {
26
+ if (this.$length === this.$depth) {
27
+ const head = this.$headIndex;
28
+ const elm = this.$list[head];
29
+ this.$length--;
30
+ this.$list[head] = undefined;
31
+ return elm;
32
+ }
33
+ else if (this.$length > 0) {
34
+ let head = this.$headIndex;
35
+ const elm = this.$list[head];
36
+ this.$length--;
37
+ if (this.$length < 0)
38
+ this.$length = 0;
39
+ this.$list[head] = undefined;
40
+ return elm;
41
+ }
42
+ return undefined;
43
+ }
44
+ clear() {
45
+ this.$length = 0;
46
+ this._index = 0;
47
+ }
48
+ get $headIndex() {
49
+ let head = this._index + 1 - this.$length;
50
+ if (head < 0) {
51
+ head += this.$depth;
52
+ }
53
+ return head;
54
+ }
55
+ get $tailIndex() {
56
+ return this._index;
57
+ }
58
+ get list() {
59
+ if (this.$length <= 0) {
60
+ return [];
61
+ }
62
+ const head = this.$headIndex;
63
+ const tail = this.$tailIndex + 1;
64
+ if (head >= tail) {
65
+ return [...this.$list.slice(head), ...this.$list.slice(0, tail)];
66
+ }
67
+ return this.$list.slice(head, tail);
68
+ }
69
+ get length() {
70
+ return this.$length;
71
+ }
72
+ index(offset) {
73
+ const idx = (this._index + 1 + offset) % this.$depth;
74
+ return this.$list[idx];
75
+ }
76
+ flush() {
77
+ const list = this.list;
78
+ this.clear();
79
+ return list;
80
+ }
81
+ registerOverflowCallback(callback) {
82
+ this.$overflowCallback = callback;
83
+ }
84
+ $onOverflow(element) {
85
+ if (!this.$overflowCallback)
86
+ return;
87
+ this.$overflowCallback([element, ...this.flush()]);
88
+ }
89
+ }
@@ -0,0 +1,35 @@
1
+ import { NativePointerObject } from "../helper.js";
2
+ export declare const GArray_structOf: {
3
+ B64: {
4
+ data: (base: NativePointer | import("./array_pointer.js").ArrayPointer) => NativePointer;
5
+ len: (base: NativePointer | import("./array_pointer.js").ArrayPointer) => number;
6
+ };
7
+ B32: {};
8
+ };
9
+ declare class GArrayPtr extends NativePointerObject {
10
+ constructor(handle: NativePointer);
11
+ static cast(handle: NativePointer): GArrayPtr;
12
+ get data(): NativePointer;
13
+ get length(): number;
14
+ [Symbol.iterator](): {
15
+ next(): {
16
+ value: NativePointer;
17
+ done: boolean;
18
+ };
19
+ };
20
+ toArray(): NativePointer[];
21
+ }
22
+ export declare const MemoryScanRes_structOf: {
23
+ B64: {
24
+ results: (base: NativePointer | import("./array_pointer.js").ArrayPointer) => NativePointer;
25
+ user_data: (base: NativePointer | import("./array_pointer.js").ArrayPointer) => NativePointer;
26
+ SIZE: number;
27
+ };
28
+ B32: {};
29
+ };
30
+ export declare class CMemoryScanRes extends NativePointerObject {
31
+ readonly data: GArrayPtr;
32
+ readonly user_data: NativePointer;
33
+ constructor(userData: NativePointer);
34
+ }
35
+ export {};
@@ -0,0 +1,72 @@
1
+ import { NativePointerObject } from "../helper.js";
2
+ import { binaryPointer, binaryReadPointer, binaryReadU32, } from "./utils.js";
3
+ export const GArray_structOf = {
4
+ B64: {
5
+ data: binaryReadPointer(0),
6
+ len: binaryReadU32(8),
7
+ },
8
+ // B32
9
+ B32: {}
10
+ };
11
+ class GArrayPtr extends NativePointerObject {
12
+ constructor(handle) {
13
+ super(handle);
14
+ }
15
+ static cast(handle) {
16
+ return new GArrayPtr(handle);
17
+ }
18
+ get data() {
19
+ const obj = this.$handle.readPointer();
20
+ if (obj.isNull())
21
+ return NULL;
22
+ return GArray_structOf.B64.data(obj);
23
+ }
24
+ get length() {
25
+ const obj = this.$handle.readPointer();
26
+ if (obj.isNull())
27
+ return 0;
28
+ return GArray_structOf.B64.len(obj);
29
+ }
30
+ [Symbol.iterator]() {
31
+ let nextPtr = this.data;
32
+ const length = this.length;
33
+ let inc = 0;
34
+ return {
35
+ next() {
36
+ const result = {
37
+ value: nextPtr,
38
+ done: inc >= length,
39
+ };
40
+ nextPtr = nextPtr.add(Process.pointerSize);
41
+ inc++;
42
+ return result;
43
+ }
44
+ };
45
+ }
46
+ toArray() {
47
+ const list = [];
48
+ for (let v of this) {
49
+ list.push(v);
50
+ }
51
+ return list;
52
+ }
53
+ }
54
+ export const MemoryScanRes_structOf = {
55
+ B64: {
56
+ results: binaryPointer(0),
57
+ user_data: binaryPointer(8),
58
+ SIZE: 16,
59
+ },
60
+ // B32
61
+ B32: {}
62
+ };
63
+ export class CMemoryScanRes extends NativePointerObject {
64
+ constructor(userData) {
65
+ const structOf = MemoryScanRes_structOf.B64;
66
+ const handle = Memory.alloc(structOf.SIZE);
67
+ super(handle);
68
+ this.data = new GArrayPtr(structOf.results(handle));
69
+ structOf.user_data(handle).writePointer(userData);
70
+ this.user_data = userData;
71
+ }
72
+ }
@@ -0,0 +1,40 @@
1
+ import { NativePointerObject } from '../helper.js';
2
+ export declare class StdVector extends NativePointerObject {
3
+ private readonly _start;
4
+ private readonly _finish;
5
+ private readonly _end_of_storage;
6
+ constructor(handle?: NativePointer);
7
+ static cast(handle: NativePointer): StdVector;
8
+ get start(): NativePointer;
9
+ set start(val: NativePointer);
10
+ get finish(): NativePointer;
11
+ set finish(val: NativePointer);
12
+ get end_of_storage(): NativePointer;
13
+ set end_of_storage(val: NativePointer);
14
+ get length(): number;
15
+ get capacity(): number;
16
+ [Symbol.iterator](): {
17
+ next(): {
18
+ value: NativePointer;
19
+ done: boolean;
20
+ };
21
+ };
22
+ toArray(): NativePointer[];
23
+ }
24
+ export declare class StdString extends NativePointerObject {
25
+ private readonly _cap;
26
+ private readonly _size;
27
+ private readonly _data;
28
+ constructor(handle?: NativePointer);
29
+ static cast(handle: NativePointer): StdString;
30
+ get size(): number;
31
+ get data(): ArrayBuffer | null;
32
+ get length(): number;
33
+ get capacity(): number;
34
+ get longMode(): boolean;
35
+ get stringPtr(): NativePointer;
36
+ toString(): string;
37
+ toCString(): string;
38
+ toUtf8String(): string;
39
+ toUtf16String(): string;
40
+ }