@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/src/process.ts DELETED
@@ -1,137 +0,0 @@
1
- import { help } from "./helper.js";
2
-
3
-
4
- // frida-gum/index.d.ts
5
- interface RangeDetails {
6
- /**
7
- * Base address.
8
- */
9
- base: NativePointer;
10
-
11
- /**
12
- * Size in bytes.
13
- */
14
- size: number;
15
-
16
- /**
17
- * Protection.
18
- */
19
- protection: PageProtection;
20
-
21
- /**
22
- * File mapping details, if available.
23
- */
24
- file?: FileMapping | undefined;
25
-
26
- }
27
-
28
-
29
- export class ProcMapItem {
30
- start_page: NativePointer
31
- end_page: NativePointer
32
- prots: string
33
- offset: number
34
- main_dev: string
35
- slave_dev: string
36
- inode: number
37
- pathname: string
38
-
39
- constructor(
40
- start_page: string,
41
- end_page: string,
42
- prots: string,
43
- offset: string,
44
- main_dev: string,
45
- slave_dev: string,
46
- inode: string,
47
- pathname: string,
48
- ) {
49
- this.start_page = ptr(parseInt(start_page, 16))
50
- this.end_page = ptr(parseInt(end_page, 16))
51
- this.prots = prots
52
- this.offset = parseInt(offset, 16)
53
- this.main_dev = main_dev
54
- this.slave_dev = slave_dev
55
- this.inode = parseInt(inode)
56
- this.pathname = pathname.trim()
57
- }
58
-
59
- toString(): string {
60
- return `${this.start_page.toString(16)}-${this.end_page.toString(16)} ${this.prots} ${this.offset.toString(16)} ${this.main_dev}:${this.slave_dev} ${this.inode} ${this.pathname}`
61
- }
62
- }
63
-
64
- const REGEXP_PROC_MAPS_LINE = /^([a-fA-F0-9]+)-([a-fA-F0-9]+)\s+([rwx\-p]+)\s+(\w+)\s+(\w+):(\d+)\s+(\d+)\s+(.*)$/
65
-
66
- export class ProcMap {
67
- public text: string
68
- public items: ProcMapItem[]
69
-
70
- constructor(text: string) {
71
- this.text = text
72
- this.items = []
73
- const lines = text.split('\n')
74
- for (const line of lines) {
75
- if (!line.trim()) continue
76
- const result = ProcMap.parseLine(line)
77
- if (!result || result.length !== 8) continue
78
- const item = new ProcMapItem(
79
- ...result as [string, string, string, string, string, string, string, string]
80
- )
81
- this.items.push(item)
82
- }
83
- }
84
-
85
- static parseLine(line: string): string[] | null {
86
- const m = REGEXP_PROC_MAPS_LINE.exec(line)
87
- if (!m) return null
88
- return m.slice(1)
89
- }
90
-
91
- find(start_addr: NativePointer, end_addr: NativePointer): ProcMapItem[] {
92
- return this.items.filter(item => {
93
- return !(item.start_page >= end_addr || item.end_page <= start_addr)
94
- })
95
- }
96
- }
97
-
98
-
99
-
100
- class Proc {
101
- private static _mapCache: RangeDetails[] = []
102
-
103
-
104
- static findMapCache(addr: NativePointer): RangeDetails | null {
105
- const result = this._mapCache.find((v, i) => {
106
- return addr >= v.base && addr < v.base.add(v.size)
107
- })
108
- if (result) {
109
- return result || null
110
- }
111
- const range = Process.findRangeByAddress(addr)
112
- if(!range) {
113
- return null
114
- }
115
- let hitIndex = -1
116
- const hit = this._mapCache.find((v, i) => {
117
- const ok = v.base == range.base
118
- if (ok) hitIndex = i
119
- return ok
120
- })
121
- if (hitIndex !== -1) {
122
- this._mapCache[hitIndex] = range
123
- }else{
124
- this._mapCache.push(range)
125
- }
126
- return range
127
- }
128
-
129
-
130
- static loadProcMap(pid: number | string = 'self'): ProcMap{
131
- return new ProcMap(help.readProcMaps(pid))
132
- }
133
-
134
- }
135
-
136
-
137
- export { Proc as proc }
package/src/rpc.ts DELETED
@@ -1,268 +0,0 @@
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
-
10
- const _BASE_CONTEXT = {
11
- Java,
12
- Process,
13
- Module,
14
- Memory,
15
- ObjC,
16
- Swift,
17
- File,
18
- hexdump,
19
- ApiResolver,
20
- Arm64Relocator,
21
- Arm64Writer,
22
- Stalker,
23
- Thread,
24
- Interceptor,
25
- ModuleMap,
26
- Frida,
27
- Script,
28
- Backtracer,
29
- UInt64,
30
- Int64,
31
- Worker,
32
-
33
- help,
34
- proc,
35
- JNIEnv,
36
- SSLTools,
37
- ElfTools,
38
- Libssl,
39
-
40
- Object, Array, String, Number, Boolean, Symbol, BigInt, Function,
41
- Math, Date, RegExp, Map, Set, WeakMap, WeakSet,
42
- Error, TypeError, SyntaxError,
43
- JSON, console,
44
- isNaN, isFinite, parseInt, parseFloat,
45
- setTimeout, clearTimeout, setInterval, clearInterval,
46
- encodeURI, decodeURI, encodeURIComponent, decodeURIComponent,
47
- Reflect, Proxy,
48
-
49
-
50
- ArrayBuffer,
51
- Int8Array,
52
- Int16Array,
53
- Int32Array,
54
- Uint8Array,
55
- Uint16Array,
56
- Uint32Array,
57
- NativePointer,
58
- NativeFunction,
59
- NativeCallback,
60
-
61
-
62
- }
63
-
64
-
65
- const EVAL_SCOPES: { [key: string]: { [key: string]: any } } = {}
66
- const SCOPE_GETTER_PREFIX = '__get__$$'
67
-
68
- let ID_INCR = 0
69
-
70
- function gen_id(): string {
71
- ID_INCR++
72
- return `${SCOPE_GETTER_PREFIX}${ID_INCR.toString(16)}`
73
- }
74
-
75
-
76
- function getValueByPath(path: string, bind: boolean = false, root: any = globalThis): any {
77
- let obj: any = root
78
- let parent = obj
79
- for(let key of path.split('/')) {
80
- parent = obj
81
- obj = obj[key]
82
- }
83
- if (parent !== root && typeof (obj) === 'function') {
84
- obj = bind ? obj.bind(parent) : obj
85
- }
86
- return obj
87
- }
88
-
89
- function getObj(instIdOrObjChain: string, scopeId: string, bind: boolean = false): any {
90
- let value: any
91
- if (instIdOrObjChain.startsWith(SCOPE_GETTER_PREFIX)) {
92
- const scope = EVAL_SCOPES[scopeId]
93
- value = getValueByPath(instIdOrObjChain, bind, scope)
94
- } else {
95
- value = getValueByPath(instIdOrObjChain, bind)
96
- }
97
- return value
98
- }
99
-
100
-
101
- function enumerateObjProps(instIdOrObjChain: string | Array<string>, scopeId: string) {
102
- const propsList: Array<{ [key: string]: string }> = []
103
- const objList: Array<string> = []
104
- if(typeof(instIdOrObjChain) === 'string') {
105
- objList.push(instIdOrObjChain)
106
- }else{
107
- objList.push(...instIdOrObjChain)
108
- }
109
- for (let v of objList) {
110
- const props: { [key: string]: string } = {}
111
- let obj
112
- try{
113
- obj = getObj(v, scopeId)
114
- }catch(e){}
115
- try {
116
- const numKeys: Array<number> = []
117
- while (obj && obj !== Object.prototype) {
118
- for (const key of Reflect.ownKeys(obj)) {
119
- if (typeof (key) === 'symbol') {
120
- continue
121
- }
122
- if(/^\d+$/.test(key)){
123
- numKeys.push(parseInt(key))
124
- continue
125
- }
126
- let type
127
- const desc = Reflect.getOwnPropertyDescriptor(obj, key)
128
- if (desc?.get) {
129
- type = 'getter'
130
- }else if (desc?.set) {
131
- type = 'setter'
132
- }else{
133
- type = typeof(obj[key])
134
- }
135
- props[String(key)] = type
136
- }
137
- obj = Object.getPrototypeOf(obj)
138
- }
139
- if(numKeys.length > 0) {
140
- if(numKeys.length <= 50) {
141
- for(let n of numKeys) {
142
- const key = n.toString()
143
- const desc = Reflect.getOwnPropertyDescriptor(obj, key)
144
- let type
145
- if (desc?.get) {
146
- type = 'getter'
147
- } else if (desc?.set) {
148
- type = 'setter'
149
- } else {
150
- type = typeof (obj[key])
151
- }
152
- props[String(key)] = type
153
- }
154
- }else{
155
- const minN: number = Math.min(...numKeys)
156
- const maxN: number = Math.max(...numKeys)
157
- props[`[${minN}:${maxN+1}]`] = 'index'
158
- }
159
- }
160
- } catch (e) {
161
- }
162
-
163
- propsList.push(props)
164
- }
165
- return {
166
- type: RPCMsgType.ENUMERATE_OBJ_PROPS,
167
- data: {
168
- props: propsList,
169
- },
170
- }
171
- }
172
-
173
-
174
- function iterScopeGet(v: any, scopeId: string, bind: boolean = false): any {
175
- switch(typeof(v)) {
176
- case 'string':
177
- if (v.startsWith(SCOPE_GETTER_PREFIX)) {
178
- return getObj(v, scopeId, bind)
179
- }
180
- break
181
- case 'object':
182
- const nv: { [key: string]: any } = {}
183
- for(const [kk, vv] of Object.entries(v)) {
184
- nv[kk] = iterScopeGet(vv, scopeId, bind)
185
- }
186
- return nv
187
- }
188
- return v
189
- }
190
-
191
-
192
- function scopeCall(instIdOrObjChain: string, args: Array<any>, scopeId: string){
193
- const obj = getObj(instIdOrObjChain, scopeId, true)
194
- const nargs = args.map(v => {
195
- return iterScopeGet(v, scopeId, false)
196
- })
197
- const result = obj(...nargs)
198
- const id = gen_id()
199
- scopeSave(result, id, scopeId)
200
- return {
201
- type: RPCMsgType.SCOPE_CALL,
202
- data: {
203
- id,
204
- type: typeof (result),
205
- result
206
- }
207
- }
208
- }
209
-
210
- function scopeSave(obj: any, instId: string, scopeId: string) {
211
- let scope = EVAL_SCOPES[scopeId]
212
- if (scope === undefined) {
213
- scope = {}
214
- EVAL_SCOPES[scopeId] = scope
215
- }
216
- scope[instId] = obj
217
- }
218
-
219
- function scopeGet(instIdOrObjChain: string, scopeId: string, bind: boolean = false): any {
220
- const value = getObj(instIdOrObjChain, scopeId, bind)
221
- return {
222
- type: RPCMsgType.SCOPE_GET,
223
- data: {
224
- value,
225
- }
226
- }
227
- }
228
-
229
- function scopeClear(scopeId: string) {
230
- delete (EVAL_SCOPES[scopeId])
231
- }
232
-
233
- function scopeDel(instId: string, scopeId: string) {
234
- const scope = EVAL_SCOPES[scopeId]
235
- if(scope) {
236
- delete(scope[instId])
237
- }
238
- }
239
-
240
- function evalWithContext(code: string, context: any = {}){
241
- const mergeContext = { ..._BASE_CONTEXT, ...context}
242
- return Function(...Object.keys(mergeContext), code)(...Object.values(mergeContext))
243
- }
244
-
245
- function scopeEval(source: string, scopeId: string) {
246
- const result = evalWithContext(source, EVAL_SCOPES[scopeId] || {})
247
- const id = gen_id()
248
- scopeSave(result, id, scopeId)
249
- return {
250
- type: RPCMsgType.SCOPE_EVAL,
251
- data: {
252
- id,
253
- type: typeof (result),
254
- result
255
- }
256
- }
257
- }
258
-
259
-
260
- rpc.exports = {
261
- enumerateObjProps,
262
- scopeCall,
263
- scopeEval,
264
- scopeClear,
265
- scopeGet,
266
- scopeSave,
267
- scopeDel,
268
- }
@@ -1,11 +0,0 @@
1
- export {}
2
-
3
- declare global {
4
- const console: {
5
- log: (...args: unknown[]) => void
6
- info: (...args: unknown[]) => void
7
- warn: (...args: unknown[]) => void
8
- error: (...args: unknown[]) => void
9
- debug: (...args: unknown[]) => void
10
- }
11
- }
@@ -1,102 +0,0 @@
1
-
2
-
3
-
4
- export class ArrayPointer extends Number {
5
- buff: ArrayBuffer | undefined
6
- constructor(val: any, buff?: ArrayBuffer) {
7
- super(val)
8
- this.buff = buff
9
- }
10
-
11
- isNull(): boolean {
12
- return !this.buff?.byteLength
13
- }
14
-
15
- add(val: number | ArrayPointer): ArrayPointer {
16
- return new ArrayPointer(this.toNumber() + Number(val), this.buff)
17
- }
18
-
19
- sub(val: number | ArrayPointer): ArrayPointer {
20
- return new ArrayPointer(this.toNumber() - Number(val), this.buff)
21
- }
22
-
23
- toNumber(): number {
24
- return Number(this)
25
- }
26
-
27
- getViewer(size: number): DataView {
28
- const off = this.toNumber()
29
- const view = new DataView(this.buff!.slice(off, off + size))
30
- return view
31
- }
32
-
33
- readS8(): number {
34
- const view = this.getViewer(1)
35
- return view.getInt8(0)
36
- }
37
-
38
- readU8(): number {
39
- const view = this.getViewer(1)
40
- return view.getUint8(0)
41
- }
42
-
43
- readS16(): number {
44
- const view = this.getViewer(2)
45
- return view.getInt16(0, true)
46
- }
47
-
48
- readU16(): number {
49
- const view = this.getViewer(2)
50
- return view.getUint16(0, true)
51
- }
52
-
53
- readS32(): number {
54
- const view = this.getViewer(4)
55
- return view.getInt32(0, true)
56
- }
57
-
58
- readU32(): number {
59
- const view = this.getViewer(4)
60
- return view.getUint32(0, true)
61
- }
62
-
63
- readS64(): BigInt {
64
- const view = this.getViewer(8)
65
- return view.getBigInt64(0, true)
66
- }
67
-
68
- readU64(): BigInt {
69
- const view = this.getViewer(8)
70
- return view.getBigUint64(0, true)
71
- }
72
-
73
- readCString(): string {
74
- if(this.isNull()) {
75
- return ''
76
- }
77
- const off = this.toNumber()
78
- let str = ''
79
- const bview = new DataView(this.buff!)
80
- for (let i = off; i < this.buff!.byteLength; i++) {
81
- const b = bview.getUint8(i)
82
- if (b === 0x00) {
83
- break
84
- }
85
- str += String.fromCharCode(b)
86
- }
87
- return str
88
- }
89
-
90
- readByteArray(length: number): ArrayBuffer {
91
- const off = this.toNumber()
92
- return this.buff!.slice(off, off + length)
93
- }
94
-
95
- readPointer(): NativePointer {
96
- return ptr(Number(this.readU64())).readPointer()
97
- }
98
-
99
- toString(): string {
100
- return this.readU64().toString(16)
101
- }
102
- }
@@ -1,102 +0,0 @@
1
-
2
-
3
- export class FixedQueue<T> {
4
- private _index = -1
5
- private $depth = 0
6
- private $list: (T | undefined)[]
7
- private $length = 0
8
- private $overflowCallback?: (elements: T[]) => void
9
-
10
- constructor(length: number) {
11
- this.$list = Array.from({ length: length }, () => undefined)
12
- this.$length = 0
13
- this.$depth = length
14
- }
15
-
16
- push(elm: T): T | undefined {
17
- let popElm = undefined
18
- this._index = (this._index + 1) % this.$depth
19
- if (this.$length === this.$depth) {
20
- popElm = this.$list[this._index]
21
- } else {
22
- this.$length++
23
- }
24
- this.$list[this._index] = elm
25
- if(popElm !== undefined) {
26
- this.$onOverflow(popElm)
27
- }
28
- return popElm
29
- }
30
-
31
- pop(): T | undefined {
32
- if (this.$length === this.$depth) {
33
- const head = this.$headIndex
34
- const elm = this.$list[head]
35
- this.$length--
36
- this.$list[head] = undefined
37
- return elm
38
- } else if (this.$length > 0) {
39
- let head = this.$headIndex
40
- const elm = this.$list[head]
41
- this.$length--
42
- if (this.$length < 0) this.$length = 0
43
- this.$list[head] = undefined
44
- return elm
45
- }
46
- return undefined
47
- }
48
-
49
- clear() {
50
- this.$length = 0
51
- this._index = 0
52
- }
53
-
54
- get $headIndex(): number {
55
- let head = this._index + 1 - this.$length
56
- if (head < 0) {
57
- head += this.$depth
58
- }
59
- return head
60
- }
61
-
62
- get $tailIndex(): number {
63
- return this._index
64
- }
65
-
66
- get list(): T[] {
67
- if (this.$length <= 0) {
68
- return []
69
- }
70
- const head = this.$headIndex
71
- const tail = this.$tailIndex + 1
72
- if (head >= tail) {
73
- return [...this.$list.slice(head), ...this.$list.slice(0, tail)] as T[]
74
- }
75
- return this.$list.slice(head, tail) as T[]
76
- }
77
-
78
- get length() {
79
- return this.$length
80
- }
81
-
82
- index(offset: number): T | undefined {
83
- const idx = (this._index + 1 + offset) % this.$depth
84
- return this.$list[idx]
85
- }
86
-
87
- flush(): Array<T> {
88
- const list = this.list
89
- this.clear()
90
- return list
91
- }
92
-
93
- registerOverflowCallback(callback: (elements: T[]) => void){
94
- this.$overflowCallback = callback
95
- }
96
-
97
- $onOverflow(element: T) {
98
- if(!this.$overflowCallback) return
99
- this.$overflowCallback([element, ...this.flush()])
100
- }
101
-
102
- }
package/src/utils/scan.ts DELETED
@@ -1,103 +0,0 @@
1
-
2
-
3
- import { NativePointerObject } from "../helper.js"
4
- import {
5
- binaryPointer,
6
- binaryReadPointer,
7
- binaryReadU32,
8
- } from "./utils.js"
9
-
10
-
11
- export const GArray_structOf = {
12
- B64: {
13
- data: binaryReadPointer(0),
14
- len: binaryReadU32(8),
15
- },
16
- // B32
17
- B32: {}
18
- }
19
-
20
-
21
-
22
-
23
-
24
- class GArrayPtr extends NativePointerObject {
25
-
26
- constructor(handle: NativePointer) {
27
- super(handle)
28
- }
29
-
30
- static cast(handle: NativePointer): GArrayPtr {
31
- return new GArrayPtr(handle)
32
- }
33
-
34
- get data(): NativePointer {
35
- const obj = this.$handle.readPointer()
36
- if (obj.isNull()) return NULL
37
- return GArray_structOf.B64.data(obj)
38
- }
39
-
40
- get length(): number {
41
- const obj = this.$handle.readPointer()
42
- if (obj.isNull()) return 0
43
- return GArray_structOf.B64.len(obj)
44
- }
45
-
46
- [Symbol.iterator]() {
47
- let nextPtr = this.data
48
- const length = this.length
49
- let inc = 0
50
- return {
51
- next() {
52
- const result = {
53
- value: nextPtr,
54
- done: inc >= length,
55
- }
56
- nextPtr = nextPtr.add(Process.pointerSize)
57
- inc++
58
- return result
59
- }
60
- }
61
- }
62
-
63
- toArray(): NativePointer[] {
64
- const list = []
65
- for (let v of this) {
66
- list.push(v)
67
- }
68
- return list
69
- }
70
- }
71
-
72
-
73
-
74
-
75
- export const MemoryScanRes_structOf = {
76
- B64: {
77
- results: binaryPointer(0),
78
- user_data: binaryPointer(8),
79
- SIZE: 16,
80
- },
81
- // B32
82
- B32: {}
83
- }
84
-
85
-
86
- export class CMemoryScanRes extends NativePointerObject {
87
- readonly data: GArrayPtr
88
- readonly user_data: NativePointer
89
-
90
- constructor(userData: NativePointer) {
91
- const structOf = MemoryScanRes_structOf.B64
92
-
93
- const handle = Memory.alloc(structOf.SIZE)
94
-
95
- super(handle)
96
-
97
- this.data = new GArrayPtr(structOf.results(handle))
98
- structOf.user_data(handle).writePointer(userData)
99
- this.user_data = userData
100
- }
101
-
102
- }
103
-