@isopodlabs/binary_libs 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -85
- package/dist/CompoundDocument.d copy.ts +95 -0
- package/dist/CompoundDocument.d.ts +2 -36
- package/dist/arch.d copy.ts +18 -0
- package/dist/arch.d.ts +1 -1
- package/dist/arch.js +1 -1
- package/dist/clr.d copy.ts +409 -0
- package/dist/clr.d.ts +223 -18
- package/dist/clr.js +224 -276
- package/dist/elf.d copy.ts +152 -0
- package/dist/elf.d.ts +1 -1
- package/dist/elf.js +4 -4
- package/dist/mach.d copy.ts +505 -0
- package/dist/mach.d.ts +11 -7
- package/dist/mach.js +9 -10
- package/dist/pe.d copy.ts +144 -0
- package/dist/pe.d.ts +4 -19
- package/dist/pe.js +4 -6
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -9,16 +9,15 @@ This package provides readers for various library formats, using the @isopodlabs
|
|
|
9
9
|
ELF
|
|
10
10
|
```typescript
|
|
11
11
|
class ELFFile {
|
|
12
|
-
segments: [string, any][];
|
|
13
|
-
sections: [string, any][];
|
|
14
|
-
symbols?: [string, any][];
|
|
15
|
-
dynamic_symbols?: [string, any][];
|
|
16
|
-
header: any;
|
|
17
12
|
static check(data: Uint8Array): boolean;
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
segments: [string, Segment][];
|
|
14
|
+
sections: [string, Section][];
|
|
15
|
+
header: Header;
|
|
16
|
+
getSymbols(): [string, Symbol][];
|
|
17
|
+
getDynamicSymbols(): [string, Symbol][];
|
|
18
|
+
getSegmentByType(type: string): Segment | undefined;
|
|
19
|
+
getSectionByType(type: string): Section | undefined;
|
|
20
20
|
}
|
|
21
|
-
|
|
22
21
|
```
|
|
23
22
|
|
|
24
23
|
### pe
|
|
@@ -26,7 +25,9 @@ Portable Executable
|
|
|
26
25
|
```typescript
|
|
27
26
|
class PE {
|
|
28
27
|
static check(data: Uint8Array): boolean;
|
|
29
|
-
|
|
28
|
+
header: Header;
|
|
29
|
+
opt?: OptHeader;
|
|
30
|
+
sections: Section[];
|
|
30
31
|
get directories(): {
|
|
31
32
|
[k: string]: any;
|
|
32
33
|
} | undefined;
|
|
@@ -43,87 +44,51 @@ class PE {
|
|
|
43
44
|
Common Language Runtime (embedded in pe files)
|
|
44
45
|
```typescript
|
|
45
46
|
class CLR {
|
|
46
|
-
header:
|
|
47
|
-
table_info:
|
|
47
|
+
header: Header;
|
|
48
|
+
table_info: TableInfo;
|
|
48
49
|
heaps: Uint8Array[];
|
|
49
50
|
tables: Record<TABLE, Table>;
|
|
50
|
-
raw?: Uint8Array;
|
|
51
51
|
Resources?: Uint8Array;
|
|
52
|
-
constructor(pe: pe.PE, clr_data: Uint8Array);
|
|
53
52
|
getEntry(t: TABLE, i: number): any;
|
|
54
|
-
getTable(t: TABLE
|
|
55
|
-
getTable(t: TABLE.TypeRef): ({ scope: number; name: string; namespce: string; } & {})[];
|
|
56
|
-
getTable(t: TABLE.TypeDef): ({ flags: number; name: string; namespce: string; extends: number; fields: number; methods: number; } & {})[];
|
|
57
|
-
getTable(t: TABLE.Field): ({ flags: number; name: string; signature: Uint8Array; } & {})[];
|
|
58
|
-
getTable(t: TABLE.MethodDef): ({ code: number; implflags: number; flags: number; name: string; signature: Uint8Array; paramlist: number; } & {})[];
|
|
59
|
-
getTable(t: TABLE.Param): ({ flags: number; sequence: number; name: string; } & {})[];
|
|
60
|
-
getTable(t: TABLE.InterfaceImpl): ({ clss: number; interfce: number; } & {})[];
|
|
61
|
-
getTable(t: TABLE.MemberRef): ({ clss: number; name: string; signature: Uint8Array; } & {})[];
|
|
62
|
-
getTable(t: TABLE.Constant): ({ type: number; parent: number; value: Uint8Array; } & {})[];
|
|
63
|
-
getTable(t: TABLE.CustomAttribute): ({ parent: number; type: number; value: Uint8Array; } & {})[];
|
|
64
|
-
getTable(t: TABLE.FieldMarshal): ({ parent: number; native_type: Uint8Array; } & {})[];
|
|
65
|
-
getTable(t: TABLE.DeclSecurity): ({ action: number; parent: number; permission_set: Uint8Array; } & {})[];
|
|
66
|
-
getTable(t: TABLE.ClassLayout): ({ packing_size: number; class_size: number; parent: number; } & {})[];
|
|
67
|
-
getTable(t: TABLE.FieldLayout): ({ offset: number; field: number; } & {})[];
|
|
68
|
-
getTable(t: TABLE.StandAloneSig): ({ signature: Uint8Array; } & {})[];
|
|
69
|
-
getTable(t: TABLE.EventMap): ({ parent: number; event_list: number; } & {})[];
|
|
70
|
-
getTable(t: TABLE.Event): ({ flags: number; name: string; event_type: number; } & {})[];
|
|
71
|
-
getTable(t: TABLE.PropertyMap): ({ parent: number; property_list: number; } & {})[];
|
|
72
|
-
getTable(t: TABLE.Property): ({ flags: number; name: string; type: Uint8Array; } & {})[];
|
|
73
|
-
getTable(t: TABLE.MethodSemantics): ({ flags: number; method: number; association: number; } & {})[];
|
|
74
|
-
getTable(t: TABLE.MethodImpl): ({ clss: number; method_body: number; method_declaration: number; } & {})[];
|
|
75
|
-
getTable(t: TABLE.ModuleRef): ({ name: string; } & {})[];
|
|
76
|
-
getTable(t: TABLE.TypeSpec): ({ signature: Uint8Array; } & {})[];
|
|
77
|
-
getTable(t: TABLE.ImplMap): ({ flags: number; member_forwarded: number; name: string; scope: number; } & {})[];
|
|
78
|
-
getTable(t: TABLE.FieldRVA): ({ rva: number; field: number; } & {})[];
|
|
79
|
-
getTable(t: TABLE.Assembly): ({ hashalg: number; major: number; minor: number; build: number; rev: number; flags: number; publickey: Uint8Array; name: string; culture: string; } & {})[];
|
|
80
|
-
getTable(t: TABLE.AssemblyProcessor): ({ processor: number; } & {})[];
|
|
81
|
-
getTable(t: TABLE.AssemblyOS): ({ platform: number; minor: number; major: number; } & {})[];
|
|
82
|
-
getTable(t: TABLE.AssemblyRef): ({ major: number; minor: number; build: number; rev: number; flags: number; publickey: Uint8Array; name: string; culture: string; hashvalue: Uint8Array; } & {})[];
|
|
83
|
-
getTable(t: TABLE.AssemblyRefProcessor): ({ processor: number; assembly: number; } & {})[];
|
|
84
|
-
getTable(t: TABLE.AssemblyRefOS): ({ platform: number; major: number; minor: number; assembly: number; } & {})[];
|
|
85
|
-
getTable(t: TABLE.File): ({ flags: number; name: string; hash: Uint8Array; } & {})[];
|
|
86
|
-
getTable(t: TABLE.ExportedType): ({ flags: number; typedef_id: number; name: string; namespce: string; implementation: number; } & {})[];
|
|
87
|
-
getTable(t: TABLE.ManifestResource): ({ data: number; flags: number; name: string; implementation: number; } & {})[];
|
|
88
|
-
getTable(t: TABLE.NestedClass): ({ nested_class: number; enclosing_class: number; } & {})[];
|
|
89
|
-
getTable(t: TABLE.GenericParam): ({ number: number; flags: number; owner: number; name: string; } & {})[];
|
|
90
|
-
getTable(t: TABLE.MethodSpec): ({ method: number; instantiation: Uint8Array; } & {})[];
|
|
91
|
-
getTable(t: TABLE.GenericParamConstraint): ({ owner: number; constraint: number; } & {})[];
|
|
53
|
+
getTable(t: TABLE): any;
|
|
92
54
|
getResources(block: string): Record<string, any> | undefined;
|
|
93
55
|
getResource(block: string, name: string): any;
|
|
94
|
-
allResources():
|
|
56
|
+
allResources(): any;
|
|
95
57
|
}
|
|
96
58
|
```
|
|
97
59
|
### mach
|
|
98
60
|
Apple libraries
|
|
99
61
|
```typescript
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
sections: Record<string, any> | undefined;
|
|
113
|
-
} & {}>;
|
|
62
|
+
interface Segment {
|
|
63
|
+
data: binary.utils.MappedMemory | undefined;
|
|
64
|
+
segname: string;
|
|
65
|
+
vmaddr: number | bigint;
|
|
66
|
+
vmsize: number | bigint;
|
|
67
|
+
fileoff: number | bigint;
|
|
68
|
+
filesize: number | bigint;
|
|
69
|
+
maxprot: number;
|
|
70
|
+
initprot: number;
|
|
71
|
+
nsects: number;
|
|
72
|
+
flags: Record<string, bigint | boolean> | Record<string, number | boolean>;
|
|
73
|
+
sections: Record<string, any> | undefined;
|
|
114
74
|
};
|
|
115
|
-
|
|
116
|
-
header: any;
|
|
117
|
-
commands: { cmd: CMD; data: any; }[];
|
|
118
|
-
ready: Promise<void>;
|
|
75
|
+
class MachFile {
|
|
119
76
|
static check(data: Uint8Array): boolean;
|
|
77
|
+
header: Header;
|
|
78
|
+
commands: { cmd: CMD; data: any; }[];
|
|
120
79
|
constructor(data: Uint8Array, mem?: binary.utils.memory);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
getSegment(name: string): Promise<{ data: binary.utils.MappedMemory | undefined; segname: string; vmaddr: number | bigint; vmsize: number | bigint; fileoff: number | bigint; filesize: number | bigint; maxprot: number; initprot: number; nsects: number; flags: Record<string, bigint | boolean> | Record<string, number | boolean>; sections: Record<string, any> | undefined; } & {}> | undefined;
|
|
80
|
+
getCommand(cmd: CMD): any;
|
|
81
|
+
getSegment(name: string): Segment;
|
|
124
82
|
}
|
|
125
83
|
class FATMachFile {
|
|
126
|
-
archs:
|
|
84
|
+
archs: {
|
|
85
|
+
cputype: string;
|
|
86
|
+
cpusubtype: string | number;
|
|
87
|
+
offset: number;
|
|
88
|
+
size: number;
|
|
89
|
+
align: number;
|
|
90
|
+
contents: MachFile | undefined;
|
|
91
|
+
}[];
|
|
127
92
|
static check(data: Uint8Array): boolean;
|
|
128
93
|
constructor(data: Uint8Array, mem?: binary.utils.memory);
|
|
129
94
|
load(file: binary.stream_endian, mem?: binary.utils.memory): void;
|
|
@@ -134,19 +99,18 @@ class FATMachFile {
|
|
|
134
99
|
Archive files for static linking
|
|
135
100
|
|
|
136
101
|
```typescript
|
|
137
|
-
type HEADER = {
|
|
138
|
-
name: string;
|
|
139
|
-
date: number;
|
|
140
|
-
uid: number;
|
|
141
|
-
gid: number;
|
|
142
|
-
mode: number;
|
|
143
|
-
size: number;
|
|
144
|
-
fmag: string;
|
|
145
|
-
contents: any;
|
|
146
|
-
};
|
|
147
102
|
declare class ArchFile {
|
|
148
|
-
members: HEADER[];
|
|
149
103
|
static check(data: Uint8Array): boolean;
|
|
104
|
+
members: {
|
|
105
|
+
name: string;
|
|
106
|
+
date: number;
|
|
107
|
+
uid: number;
|
|
108
|
+
gid: number;
|
|
109
|
+
mode: number;
|
|
110
|
+
size: number;
|
|
111
|
+
fmag: string;
|
|
112
|
+
contents: any;
|
|
113
|
+
}[];
|
|
150
114
|
constructor(data: Uint8Array);
|
|
151
115
|
}
|
|
152
116
|
```
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import * as binary from '@isopodlabs/binary';
|
|
2
|
+
declare class FAT {
|
|
3
|
+
shift: number;
|
|
4
|
+
sectors: Uint8Array;
|
|
5
|
+
fat: Int32Array;
|
|
6
|
+
freed: number[];
|
|
7
|
+
dirty_fat: Set<number>;
|
|
8
|
+
dirty_sec: Set<number>;
|
|
9
|
+
constructor(size: number, shift: number, sectors: Uint8Array);
|
|
10
|
+
private free;
|
|
11
|
+
private alloc;
|
|
12
|
+
get_chain(id: number): number[];
|
|
13
|
+
resize_chain(chain: number[], data_size: number): void;
|
|
14
|
+
clear_dirty(): void;
|
|
15
|
+
read_chain(chain: number[], dest: Uint8Array): void;
|
|
16
|
+
read_chain_alloc(chain: number[]): Uint8Array;
|
|
17
|
+
read(id: number, dest: Uint8Array): void;
|
|
18
|
+
write_chain(chain: number[], source: Uint8Array): void;
|
|
19
|
+
dirty_chain_part(chain: number[], offset: number): Uint8Array;
|
|
20
|
+
}
|
|
21
|
+
declare const Header_base: (new (s: binary._stream) => {
|
|
22
|
+
magic: bigint;
|
|
23
|
+
id: Uint8Array;
|
|
24
|
+
revision: number;
|
|
25
|
+
version: number;
|
|
26
|
+
byteorder: number;
|
|
27
|
+
sector_shift: number;
|
|
28
|
+
mini_shift: number;
|
|
29
|
+
unused1: void;
|
|
30
|
+
num_directory: number;
|
|
31
|
+
num_fat: number;
|
|
32
|
+
first_directory: number;
|
|
33
|
+
transaction: void;
|
|
34
|
+
mini_cutoff: number;
|
|
35
|
+
first_mini: number;
|
|
36
|
+
num_mini: number;
|
|
37
|
+
first_difat: number;
|
|
38
|
+
num_difat: number;
|
|
39
|
+
difat: Uint8Array;
|
|
40
|
+
} & {
|
|
41
|
+
write(w: binary._stream): void;
|
|
42
|
+
}) & {
|
|
43
|
+
get: <X extends abstract new (...args: any) => any>(this: X, s: binary._stream) => InstanceType<X>;
|
|
44
|
+
put: (s: binary._stream, v: any) => void;
|
|
45
|
+
};
|
|
46
|
+
export declare class Header extends Header_base {
|
|
47
|
+
sector_size(): number;
|
|
48
|
+
use_mini(size: number): boolean;
|
|
49
|
+
valid(): boolean;
|
|
50
|
+
}
|
|
51
|
+
declare const DirEntry_base: (new (s: binary._stream) => {
|
|
52
|
+
name: string;
|
|
53
|
+
name_size: number;
|
|
54
|
+
type: number;
|
|
55
|
+
colour: number;
|
|
56
|
+
left: number;
|
|
57
|
+
right: number;
|
|
58
|
+
root: number;
|
|
59
|
+
guid: Uint8Array;
|
|
60
|
+
flags: number;
|
|
61
|
+
creation: bigint;
|
|
62
|
+
modification: bigint;
|
|
63
|
+
sec_id: number;
|
|
64
|
+
size: number;
|
|
65
|
+
unused: number;
|
|
66
|
+
} & {
|
|
67
|
+
write(w: binary._stream): void;
|
|
68
|
+
}) & {
|
|
69
|
+
get: <X extends abstract new (...args: any) => any>(this: X, s: binary._stream) => InstanceType<X>;
|
|
70
|
+
put: (s: binary._stream, v: any) => void;
|
|
71
|
+
};
|
|
72
|
+
declare class DirEntry extends DirEntry_base {
|
|
73
|
+
index: number;
|
|
74
|
+
constructor(index: number, r: binary.stream);
|
|
75
|
+
load(fat: FAT): Uint8Array;
|
|
76
|
+
}
|
|
77
|
+
declare class Master {
|
|
78
|
+
header: Header;
|
|
79
|
+
difat: Int32Array;
|
|
80
|
+
fat: FAT;
|
|
81
|
+
mini_fat: FAT;
|
|
82
|
+
mini_chain: number[];
|
|
83
|
+
constructor(sectors: Uint8Array, header: Header);
|
|
84
|
+
get_fat(mini: boolean): FAT;
|
|
85
|
+
flush(filename: string): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
export declare class Reader extends Master {
|
|
88
|
+
entries: DirEntry[];
|
|
89
|
+
private entry_chain;
|
|
90
|
+
constructor(sectors: Uint8Array, header: Header);
|
|
91
|
+
find(name: string, i?: number): DirEntry | undefined;
|
|
92
|
+
read(e: DirEntry): Uint8Array;
|
|
93
|
+
write(e: DirEntry, data: Uint8Array): void;
|
|
94
|
+
}
|
|
95
|
+
export {};
|
|
@@ -40,26 +40,7 @@ declare const Header_base: (new (s: binary._stream) => {
|
|
|
40
40
|
} & {
|
|
41
41
|
write(w: binary._stream): void;
|
|
42
42
|
}) & {
|
|
43
|
-
get: (s: binary._stream) =>
|
|
44
|
-
magic: bigint;
|
|
45
|
-
id: Uint8Array;
|
|
46
|
-
revision: number;
|
|
47
|
-
version: number;
|
|
48
|
-
byteorder: number;
|
|
49
|
-
sector_shift: number;
|
|
50
|
-
mini_shift: number;
|
|
51
|
-
unused1: void;
|
|
52
|
-
num_directory: number;
|
|
53
|
-
num_fat: number;
|
|
54
|
-
first_directory: number;
|
|
55
|
-
transaction: void;
|
|
56
|
-
mini_cutoff: number;
|
|
57
|
-
first_mini: number;
|
|
58
|
-
num_mini: number;
|
|
59
|
-
first_difat: number;
|
|
60
|
-
num_difat: number;
|
|
61
|
-
difat: Uint8Array;
|
|
62
|
-
};
|
|
43
|
+
get: <X extends abstract new (...args: any) => any>(this: X, s: binary._stream) => InstanceType<X>;
|
|
63
44
|
put: (s: binary._stream, v: any) => void;
|
|
64
45
|
};
|
|
65
46
|
export declare class Header extends Header_base {
|
|
@@ -85,22 +66,7 @@ declare const DirEntry_base: (new (s: binary._stream) => {
|
|
|
85
66
|
} & {
|
|
86
67
|
write(w: binary._stream): void;
|
|
87
68
|
}) & {
|
|
88
|
-
get: (s: binary._stream) =>
|
|
89
|
-
name: string;
|
|
90
|
-
name_size: number;
|
|
91
|
-
type: number;
|
|
92
|
-
colour: number;
|
|
93
|
-
left: number;
|
|
94
|
-
right: number;
|
|
95
|
-
root: number;
|
|
96
|
-
guid: Uint8Array;
|
|
97
|
-
flags: number;
|
|
98
|
-
creation: bigint;
|
|
99
|
-
modification: bigint;
|
|
100
|
-
sec_id: number;
|
|
101
|
-
size: number;
|
|
102
|
-
unused: number;
|
|
103
|
-
};
|
|
69
|
+
get: <X extends abstract new (...args: any) => any>(this: X, s: binary._stream) => InstanceType<X>;
|
|
104
70
|
put: (s: binary._stream, v: any) => void;
|
|
105
71
|
};
|
|
106
72
|
declare class DirEntry extends DirEntry_base {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as binary from '@isopodlabs/binary';
|
|
2
|
+
declare const _HEADER: {
|
|
3
|
+
name: binary.TypeT<string>;
|
|
4
|
+
date: binary.TypeT<number>;
|
|
5
|
+
uid: binary.TypeT<number>;
|
|
6
|
+
gid: binary.TypeT<number>;
|
|
7
|
+
mode: binary.TypeT<number>;
|
|
8
|
+
size: binary.TypeT<number>;
|
|
9
|
+
fmag: binary.TypeT<string>;
|
|
10
|
+
contents: binary.TypeT<any>;
|
|
11
|
+
};
|
|
12
|
+
export type HEADER = binary.ReadType<typeof _HEADER>;
|
|
13
|
+
export declare class ArchFile {
|
|
14
|
+
members: HEADER[];
|
|
15
|
+
static check(data: Uint8Array): boolean;
|
|
16
|
+
constructor(data: Uint8Array);
|
|
17
|
+
}
|
|
18
|
+
export {};
|
package/dist/arch.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type HEADER = {
|
|
|
10
10
|
contents: any;
|
|
11
11
|
};
|
|
12
12
|
export declare class ArchFile {
|
|
13
|
+
static check(data: Uint8Array): boolean;
|
|
13
14
|
members: {
|
|
14
15
|
name: string;
|
|
15
16
|
date: number;
|
|
@@ -20,7 +21,6 @@ export declare class ArchFile {
|
|
|
20
21
|
fmag: string;
|
|
21
22
|
contents: any;
|
|
22
23
|
}[];
|
|
23
|
-
static check(data: Uint8Array): boolean;
|
|
24
24
|
constructor(data: Uint8Array);
|
|
25
25
|
}
|
|
26
26
|
export {};
|
package/dist/arch.js
CHANGED
|
@@ -43,10 +43,10 @@ const SYM64 = {
|
|
|
43
43
|
offset: binary.asInt(binary.StringType(4))
|
|
44
44
|
};
|
|
45
45
|
class ArchFile {
|
|
46
|
-
members = [];
|
|
47
46
|
static check(data) {
|
|
48
47
|
return binary.utils.decodeText(data.subarray(0, 8), 'utf8') == '!<arch>\n';
|
|
49
48
|
}
|
|
49
|
+
members = [];
|
|
50
50
|
constructor(data) {
|
|
51
51
|
const s = new binary.stream(data);
|
|
52
52
|
const header = binary.read(s, binary.StringType(8));
|