@zsa233/frida-analykit-agent 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/android.d.ts +41 -0
- package/dist/api/android.js +1 -0
- package/dist/bridges.d.ts +4 -0
- package/dist/bridges.js +8 -0
- package/dist/cmodule/scan_adrp.d.ts +9 -0
- package/{src/cmodule/scan_adrp.ts → dist/cmodule/scan_adrp.js} +19 -30
- package/dist/config.d.ts +26 -0
- package/dist/config.js +27 -0
- package/dist/consts.d.ts +18 -0
- package/dist/consts.js +23 -0
- package/dist/elf/insn.d.ts +10 -0
- package/dist/elf/insn.js +43 -0
- package/dist/elf/module.d.ts +95 -0
- package/dist/elf/module.js +632 -0
- package/dist/elf/struct.d.ts +235 -0
- package/{src/elf/struct.ts → dist/elf/struct.js} +63 -149
- package/dist/elf/tools.d.ts +6 -0
- package/dist/elf/tools.js +25 -0
- package/dist/elf/verifier.d.ts +11 -0
- package/dist/elf/verifier.js +57 -0
- package/dist/elf/xref.d.ts +32 -0
- package/dist/elf/xref.js +271 -0
- package/dist/func.d.ts +7 -0
- package/dist/func.js +23 -0
- package/dist/helper.d.ts +130 -0
- package/dist/helper.js +527 -0
- package/{src/index.ts → dist/index.d.ts} +0 -1
- package/dist/index.js +9 -0
- package/dist/jni/env.d.ts +821 -0
- package/dist/jni/env.js +1054 -0
- package/{src/jni/struct.ts → dist/jni/struct.d.ts} +8 -54
- package/dist/jni/struct.js +173 -0
- package/dist/lib/libc.d.ts +68 -0
- package/dist/lib/libc.js +125 -0
- package/dist/lib/libssl.d.ts +23 -0
- package/dist/lib/libssl.js +60 -0
- package/dist/message.d.ts +18 -0
- package/dist/message.js +21 -0
- package/dist/net/ssl.d.ts +29 -0
- package/dist/net/ssl.js +249 -0
- package/dist/net/struct.d.ts +34 -0
- package/{src/net/struct.ts → dist/net/struct.js} +4 -18
- package/dist/net/tools.js +1 -0
- package/dist/process.d.ts +43 -0
- package/dist/process.js +77 -0
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.js +248 -0
- package/dist/utils/array_pointer.d.ts +21 -0
- package/dist/utils/array_pointer.js +81 -0
- package/dist/utils/queue.d.ts +19 -0
- package/dist/utils/queue.js +89 -0
- package/dist/utils/scan.d.ts +35 -0
- package/dist/utils/scan.js +72 -0
- package/dist/utils/std.d.ts +40 -0
- package/dist/utils/std.js +128 -0
- package/dist/utils/text_endec.d.ts +8 -0
- package/dist/utils/text_endec.js +29 -0
- package/dist/utils/utils.d.ts +28 -0
- package/dist/utils/utils.js +66 -0
- package/package.json +18 -5
- package/src/api/android.ts +0 -80
- package/src/bridges.ts +0 -18
- package/src/cmodule/scan_adrp.c +0 -81
- package/src/config.ts +0 -56
- package/src/consts.ts +0 -31
- package/src/elf/insn.ts +0 -61
- package/src/elf/module.ts +0 -751
- package/src/elf/tools.ts +0 -33
- package/src/elf/verifier.ts +0 -74
- package/src/elf/xref.ts +0 -360
- package/src/func.ts +0 -32
- package/src/helper.ts +0 -685
- package/src/jni/env.ts +0 -1439
- package/src/lib/libc.ts +0 -161
- package/src/lib/libssl.ts +0 -95
- package/src/message.ts +0 -26
- package/src/net/ssl.ts +0 -360
- package/src/process.ts +0 -137
- package/src/rpc.ts +0 -268
- package/src/runtime-globals.d.ts +0 -11
- package/src/utils/array_pointer.ts +0 -102
- package/src/utils/queue.ts +0 -102
- package/src/utils/scan.ts +0 -103
- package/src/utils/std.ts +0 -165
- package/src/utils/text_endec.ts +0 -35
- package/src/utils/utils.ts +0 -111
- /package/{src/net/tools.ts → dist/net/tools.d.ts} +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type NP = NativePointer;
|
|
2
|
+
export interface EnvJvmti {
|
|
3
|
+
handle: NP;
|
|
4
|
+
vm: NP;
|
|
5
|
+
vtable: NP;
|
|
6
|
+
}
|
|
7
|
+
export interface VMApi {
|
|
8
|
+
vm: NP;
|
|
9
|
+
module: Module;
|
|
10
|
+
flavor: 'art' | 'dalvik';
|
|
11
|
+
addLocalRefrence: null;
|
|
12
|
+
find(name: string): NativePointer;
|
|
13
|
+
artRuntime: NativePointer;
|
|
14
|
+
artClassLinker: {
|
|
15
|
+
address: NativePointer;
|
|
16
|
+
quickResolutionTrampoline: NativePointer;
|
|
17
|
+
quickImtConflictTrampoline: NativePointer;
|
|
18
|
+
quickGenericJniTrampoline: NativePointer;
|
|
19
|
+
quickToInterpreterBridgeTrampoline: NativePointer;
|
|
20
|
+
};
|
|
21
|
+
jvmti: EnvJvmti;
|
|
22
|
+
$new(size: number): NativePointer;
|
|
23
|
+
$delete(pointer: NativePointer): void;
|
|
24
|
+
JNI_GetCreateJavaVMs(vmBuf: NP, bufLen: number, nVMs: NP): number;
|
|
25
|
+
['art::JavaVMExt::AddGlobalRef']: (vm: NP, self: NP, obj: NP) => NP;
|
|
26
|
+
['art::ReaderWriterMutex::ExclusiveLock']: (lock: NP, self: NP) => void;
|
|
27
|
+
['art::IndirectReferenceTable::Add']: (table: NP, previous_state: NP, obj: number, error_msg: NP) => NP;
|
|
28
|
+
['art::JavaVMExt::DecodeGlobal']: (vm: NP, thread: NP, ref: NP) => NP;
|
|
29
|
+
['art::Thread::DecodeJObject']: (thread: NP, obj: NP) => NP;
|
|
30
|
+
}
|
|
31
|
+
declare global {
|
|
32
|
+
namespace Java {
|
|
33
|
+
const api: VMApi, Env: {
|
|
34
|
+
handle: NativePointer;
|
|
35
|
+
vm: Java.VM & {
|
|
36
|
+
handle: NativePointer;
|
|
37
|
+
};
|
|
38
|
+
throwIfExceptionPending(): Error;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/bridges.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class ScanAdrpCMod {
|
|
2
|
+
static readonly cm: CModule;
|
|
3
|
+
static readonly $scan: NativeFunction<NativePointer, [NativePointerValue, number | UInt64, NativePointerValue, NativePointerValue]>;
|
|
4
|
+
static scan(scanRange: {
|
|
5
|
+
base: NativePointer;
|
|
6
|
+
size: number;
|
|
7
|
+
}, pattern: string, targetAddr: NativePointer, alignOffset: number): NativePointer[];
|
|
8
|
+
static readonly $dispose: NativeFunction<void, [NativePointerValue]>;
|
|
9
|
+
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import { nativeFunctionOptions } from "../consts.js"
|
|
3
|
-
import { CMemoryScanRes } from "../utils/scan.js"
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var _a;
|
|
2
|
+
import { nativeFunctionOptions } from "../consts.js";
|
|
3
|
+
import { CMemoryScanRes } from "../utils/scan.js";
|
|
6
4
|
const CM = new CModule(`
|
|
7
5
|
#include <glib.h>
|
|
8
6
|
#include <gum/gummemory.h>
|
|
@@ -86,33 +84,24 @@ gpointer scan(const GumAddress base_address,
|
|
|
86
84
|
return scan_res->results;
|
|
87
85
|
}
|
|
88
86
|
|
|
89
|
-
`)
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
`);
|
|
92
88
|
export class ScanAdrpCMod {
|
|
93
|
-
static
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
userData.writePointer(targetAddr)
|
|
102
|
-
userData.add(8).writeU32(alignOffset)
|
|
103
|
-
|
|
104
|
-
const scanRes = new CMemoryScanRes(userData)
|
|
105
|
-
const { base, size } = scanRange
|
|
106
|
-
this.$scan(
|
|
107
|
-
base, size, Memory.allocUtf8String(pattern), scanRes.$handle,
|
|
108
|
-
)
|
|
89
|
+
static scan(scanRange, pattern, targetAddr, alignOffset) {
|
|
90
|
+
let matcheResults = [];
|
|
91
|
+
const userData = Memory.alloc(8 + 4);
|
|
92
|
+
userData.writePointer(targetAddr);
|
|
93
|
+
userData.add(8).writeU32(alignOffset);
|
|
94
|
+
const scanRes = new CMemoryScanRes(userData);
|
|
95
|
+
const { base, size } = scanRange;
|
|
96
|
+
this.$scan(base, size, Memory.allocUtf8String(pattern), scanRes.$handle);
|
|
109
97
|
if (scanRes.data.length > 0) {
|
|
110
|
-
matcheResults = scanRes.data.toArray().map(v => v.readPointer())
|
|
98
|
+
matcheResults = scanRes.data.toArray().map(v => v.readPointer());
|
|
111
99
|
}
|
|
112
|
-
this.$dispose(scanRes.$handle)
|
|
113
|
-
return matcheResults
|
|
100
|
+
this.$dispose(scanRes.$handle);
|
|
101
|
+
return matcheResults;
|
|
114
102
|
}
|
|
115
|
-
|
|
116
|
-
static readonly $dispose = new NativeFunction(this.cm._dispose, 'void', ['pointer'], nativeFunctionOptions)
|
|
117
103
|
}
|
|
118
|
-
|
|
104
|
+
_a = ScanAdrpCMod;
|
|
105
|
+
ScanAdrpCMod.cm = CM;
|
|
106
|
+
ScanAdrpCMod.$scan = new NativeFunction(_a.cm.scan, 'pointer', ['pointer', 'size_t', 'pointer', 'pointer'], nativeFunctionOptions);
|
|
107
|
+
ScanAdrpCMod.$dispose = new NativeFunction(_a.cm._dispose, 'void', ['pointer'], nativeFunctionOptions);
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare function setGlobalProperties(keyValues: {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
}): void;
|
|
4
|
+
export declare const LogLevel: {
|
|
5
|
+
readonly DEBUG: 0;
|
|
6
|
+
readonly INFO: 1;
|
|
7
|
+
readonly WARN: 2;
|
|
8
|
+
readonly ERROR: 3;
|
|
9
|
+
readonly _MUST_LOG: 9999999;
|
|
10
|
+
};
|
|
11
|
+
export type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];
|
|
12
|
+
declare global {
|
|
13
|
+
const LogLevel: {
|
|
14
|
+
DEBUG: number;
|
|
15
|
+
INFO: number;
|
|
16
|
+
WARN: number;
|
|
17
|
+
ERROR: number;
|
|
18
|
+
_MUST_LOG: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare class Config {
|
|
22
|
+
static OnRPC: boolean;
|
|
23
|
+
static OutputDir?: string;
|
|
24
|
+
static LogLevel: number;
|
|
25
|
+
static LogCollapse: boolean;
|
|
26
|
+
}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const injectedConfig = (globalThis.__FRIDA_ANALYKIT_CONFIG__) || {};
|
|
2
|
+
export function setGlobalProperties(keyValues) {
|
|
3
|
+
for (let [k, v] of Object.entries(keyValues)) {
|
|
4
|
+
if (k in globalThis) {
|
|
5
|
+
throw new Error(`global property[${k}] exists already`);
|
|
6
|
+
}
|
|
7
|
+
;
|
|
8
|
+
globalThis[k] = v;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export const LogLevel = {
|
|
12
|
+
DEBUG: 0,
|
|
13
|
+
INFO: 1,
|
|
14
|
+
WARN: 2,
|
|
15
|
+
ERROR: 3,
|
|
16
|
+
_MUST_LOG: 9999999,
|
|
17
|
+
};
|
|
18
|
+
export class Config {
|
|
19
|
+
}
|
|
20
|
+
Config.OnRPC = injectedConfig.OnRPC ?? false;
|
|
21
|
+
Config.OutputDir = injectedConfig.OutputDir;
|
|
22
|
+
Config.LogLevel = injectedConfig.LogLevel ?? LogLevel.INFO;
|
|
23
|
+
Config.LogCollapse = injectedConfig.LogCollapse ?? true;
|
|
24
|
+
setGlobalProperties({
|
|
25
|
+
'Config': Config,
|
|
26
|
+
'LogLevel': LogLevel,
|
|
27
|
+
});
|
package/dist/consts.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const nativeFunctionOptions: NativeABI | NativeFunctionOptions;
|
|
2
|
+
export declare enum SYM_INFO_BIND {
|
|
3
|
+
STB_LOCAL = 0,
|
|
4
|
+
STB_GLOBAL = 1,
|
|
5
|
+
STB_WEAK = 2,
|
|
6
|
+
STB_GNU_UNIQUE = 3
|
|
7
|
+
}
|
|
8
|
+
export declare enum SYM_INFO_TYPE {
|
|
9
|
+
STT_NOTYPE = 0,
|
|
10
|
+
STT_OBJECT = 1,
|
|
11
|
+
STT_FUNC = 2,
|
|
12
|
+
STT_SECTION = 3,
|
|
13
|
+
STT_FILE = 4
|
|
14
|
+
}
|
|
15
|
+
export declare enum SYM_SHNDX {
|
|
16
|
+
SHN_UNDEF = 0,
|
|
17
|
+
SHN_ABS = 65521
|
|
18
|
+
}
|
package/dist/consts.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const nativeFunctionOptions = {
|
|
2
|
+
exceptions: 'propagate',
|
|
3
|
+
};
|
|
4
|
+
export var SYM_INFO_BIND;
|
|
5
|
+
(function (SYM_INFO_BIND) {
|
|
6
|
+
SYM_INFO_BIND[SYM_INFO_BIND["STB_LOCAL"] = 0] = "STB_LOCAL";
|
|
7
|
+
SYM_INFO_BIND[SYM_INFO_BIND["STB_GLOBAL"] = 1] = "STB_GLOBAL";
|
|
8
|
+
SYM_INFO_BIND[SYM_INFO_BIND["STB_WEAK"] = 2] = "STB_WEAK";
|
|
9
|
+
SYM_INFO_BIND[SYM_INFO_BIND["STB_GNU_UNIQUE"] = 3] = "STB_GNU_UNIQUE";
|
|
10
|
+
})(SYM_INFO_BIND || (SYM_INFO_BIND = {}));
|
|
11
|
+
export var SYM_INFO_TYPE;
|
|
12
|
+
(function (SYM_INFO_TYPE) {
|
|
13
|
+
SYM_INFO_TYPE[SYM_INFO_TYPE["STT_NOTYPE"] = 0] = "STT_NOTYPE";
|
|
14
|
+
SYM_INFO_TYPE[SYM_INFO_TYPE["STT_OBJECT"] = 1] = "STT_OBJECT";
|
|
15
|
+
SYM_INFO_TYPE[SYM_INFO_TYPE["STT_FUNC"] = 2] = "STT_FUNC";
|
|
16
|
+
SYM_INFO_TYPE[SYM_INFO_TYPE["STT_SECTION"] = 3] = "STT_SECTION";
|
|
17
|
+
SYM_INFO_TYPE[SYM_INFO_TYPE["STT_FILE"] = 4] = "STT_FILE";
|
|
18
|
+
})(SYM_INFO_TYPE || (SYM_INFO_TYPE = {}));
|
|
19
|
+
export var SYM_SHNDX;
|
|
20
|
+
(function (SYM_SHNDX) {
|
|
21
|
+
SYM_SHNDX[SYM_SHNDX["SHN_UNDEF"] = 0] = "SHN_UNDEF";
|
|
22
|
+
SYM_SHNDX[SYM_SHNDX["SHN_ABS"] = 65521] = "SHN_ABS";
|
|
23
|
+
})(SYM_SHNDX || (SYM_SHNDX = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NativePointerObject } from "../helper.js";
|
|
2
|
+
export declare class InstructionSequence extends NativePointerObject {
|
|
3
|
+
protected readonly entryInsn: Arm64Instruction;
|
|
4
|
+
protected readonly insns: Arm64Instruction[];
|
|
5
|
+
protected eoi?: Arm64Instruction;
|
|
6
|
+
constructor(entry: Arm64Instruction);
|
|
7
|
+
static loadFromPointer<T extends InstructionSequence>(this: new (insn: Arm64Instruction) => T, handle: NativePointer): T;
|
|
8
|
+
[Symbol.iterator](): Generator<Arm64Instruction, void, unknown>;
|
|
9
|
+
clearCache(): void;
|
|
10
|
+
}
|
package/dist/elf/insn.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { setGlobalProperties } from "../config.js";
|
|
2
|
+
import { NativePointerObject } from "../helper.js";
|
|
3
|
+
export class InstructionSequence extends NativePointerObject {
|
|
4
|
+
constructor(entry) {
|
|
5
|
+
const handle = entry.address;
|
|
6
|
+
super(handle);
|
|
7
|
+
this.insns = [];
|
|
8
|
+
this.entryInsn = entry;
|
|
9
|
+
this.insns = [entry];
|
|
10
|
+
}
|
|
11
|
+
static loadFromPointer(handle) {
|
|
12
|
+
const insn = Instruction.parse(handle);
|
|
13
|
+
return new this(insn);
|
|
14
|
+
}
|
|
15
|
+
*[Symbol.iterator]() {
|
|
16
|
+
let insns = this.insns;
|
|
17
|
+
let insn = this.entryInsn;
|
|
18
|
+
let inc = 0;
|
|
19
|
+
const that = this;
|
|
20
|
+
let value;
|
|
21
|
+
while (true) {
|
|
22
|
+
value = insns[inc];
|
|
23
|
+
if (value === undefined && that.eoi === undefined) {
|
|
24
|
+
try {
|
|
25
|
+
insn = Instruction.parse(insns[inc - 1].next);
|
|
26
|
+
insns.push(insn);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
that.eoi = insn;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
inc++;
|
|
34
|
+
yield insn;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
clearCache() {
|
|
38
|
+
this.insns.length = 0;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
setGlobalProperties({
|
|
42
|
+
InstructionSequence,
|
|
43
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Ehdr, Phdr, Dyn, Shdr, Soinfo, Sym, Rela } from './struct.js';
|
|
2
|
+
import { ArrayPointer } from '../utils/array_pointer.js';
|
|
3
|
+
interface ElfModuleX extends BaseModule {
|
|
4
|
+
}
|
|
5
|
+
declare global {
|
|
6
|
+
interface BaseModule {
|
|
7
|
+
name: string;
|
|
8
|
+
base: NativePointer;
|
|
9
|
+
size: number;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export interface ElfModuleFixer {
|
|
13
|
+
fixShdrs(modx: ElfModuleX): boolean;
|
|
14
|
+
}
|
|
15
|
+
declare class ElfModuleX {
|
|
16
|
+
module: BaseModule;
|
|
17
|
+
ehdr: Ehdr;
|
|
18
|
+
phdrs: Phdr[];
|
|
19
|
+
dyntabs: Dyn[] | null;
|
|
20
|
+
shdrs: Shdr[] | null;
|
|
21
|
+
soinfo: Soinfo | null;
|
|
22
|
+
dynSymbols: Sym[] | null;
|
|
23
|
+
rela: Rela[] | null;
|
|
24
|
+
plt_rela: Rela[] | null;
|
|
25
|
+
symtab: Sym[] | null;
|
|
26
|
+
strtab: {
|
|
27
|
+
[key: number]: string;
|
|
28
|
+
} | null;
|
|
29
|
+
private _keepNativeCb;
|
|
30
|
+
constructor(module: BaseModule, fixers?: ElfModuleFixer[], { symbolScanLimit }?: {
|
|
31
|
+
symbolScanLimit?: number;
|
|
32
|
+
});
|
|
33
|
+
static loadFromModule(mod: Module): ElfModuleX;
|
|
34
|
+
readEhdr(): {
|
|
35
|
+
ei_class: number;
|
|
36
|
+
e_type: number;
|
|
37
|
+
e_phoff: number;
|
|
38
|
+
e_shoff: number;
|
|
39
|
+
e_phnum: number;
|
|
40
|
+
e_shnum: number;
|
|
41
|
+
e_shstrndx: number;
|
|
42
|
+
};
|
|
43
|
+
readPhdrs(): Phdr[];
|
|
44
|
+
readDyntabs(): Dyn[] | null;
|
|
45
|
+
load_bias(value: number | NativePointer): NativePointer;
|
|
46
|
+
prelink_image(): Soinfo | null;
|
|
47
|
+
link_image(): void;
|
|
48
|
+
off2addr(offset: number): number | null;
|
|
49
|
+
readShdrs(): Shdr[] | null;
|
|
50
|
+
getSymString(index: number): string | null;
|
|
51
|
+
scanSymbols(cursor: number, limit: number): Sym[] | null;
|
|
52
|
+
readRela(): Rela[] | null;
|
|
53
|
+
readPltRela(): Rela[] | null;
|
|
54
|
+
attachSymbol<RetType extends NativeFunctionReturnType, ArgTypes extends any[]>(symName: string, fn: AnyFunction, retType: RetType, argTypes: ArgTypes, abi?: undefined): boolean;
|
|
55
|
+
findSymbol(symName: string): Sym | undefined;
|
|
56
|
+
fromAddress(addr: NativePointer): string | NativePointer | null;
|
|
57
|
+
isMyAddr(addr: NativePointer): boolean;
|
|
58
|
+
getSegment(seg: string): Shdr | null;
|
|
59
|
+
dump(tag: string): void;
|
|
60
|
+
}
|
|
61
|
+
export { ElfModuleX };
|
|
62
|
+
export declare class ElfFileFixer implements ElfModuleFixer {
|
|
63
|
+
path: string;
|
|
64
|
+
private modx?;
|
|
65
|
+
private fileBytes?;
|
|
66
|
+
private ehdr?;
|
|
67
|
+
private phdrs?;
|
|
68
|
+
private shdrs?;
|
|
69
|
+
private strtab?;
|
|
70
|
+
private shstrtabShdr?;
|
|
71
|
+
constructor(path: string);
|
|
72
|
+
getFilePtr(): ArrayPointer;
|
|
73
|
+
ensureEhdr(): void;
|
|
74
|
+
ensurePhdrs(): void;
|
|
75
|
+
ensureShdrs(): void;
|
|
76
|
+
ensureStrtab(): void;
|
|
77
|
+
readEhdr(): {
|
|
78
|
+
ei_class: number;
|
|
79
|
+
e_type: number;
|
|
80
|
+
e_phoff: number;
|
|
81
|
+
e_shoff: number;
|
|
82
|
+
e_phnum: number;
|
|
83
|
+
e_shnum: number;
|
|
84
|
+
e_shstrndx: number;
|
|
85
|
+
};
|
|
86
|
+
readPhdrs(): Phdr[];
|
|
87
|
+
readShdrs(): Shdr[];
|
|
88
|
+
readStrtab(): {
|
|
89
|
+
[key: number]: string;
|
|
90
|
+
} | undefined;
|
|
91
|
+
getShstrtabString(nameOff: number): string;
|
|
92
|
+
getSymString(nameIDX: number): string;
|
|
93
|
+
readSymtab(): Sym[] | null;
|
|
94
|
+
fixShdrs(modx: ElfModuleX): boolean;
|
|
95
|
+
}
|