@isopodlabs/binary_libs 0.1.4 → 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 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
- constructor(data: Uint8Array);
19
- getSymbols(type: binary.Type, data: Uint8Array, names: Uint8Array): [string, any][];
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
- constructor(data: Uint8Array);
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: any;
47
- table_info: any;
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.Module): ({ generation: number; name: string; mvid: string; encid: string; encbaseid: string; } & {})[];
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(): {} | undefined;
56
+ allResources(): any;
95
57
  }
96
58
  ```
97
59
  ### mach
98
60
  Apple libraries
99
61
  ```typescript
100
- declare function segment(bits: 32 | 64): {
101
- get(s: mach_stream): Promise<{
102
- data: binary.utils.MappedMemory | undefined;
103
- segname: string;
104
- vmaddr: number | bigint;
105
- vmsize: number | bigint;
106
- fileoff: number | bigint;
107
- filesize: number | bigint;
108
- maxprot: number;
109
- initprot: number;
110
- nsects: number;
111
- flags: Record<string, bigint | boolean> | Record<string, number | boolean>;
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
- export declare class MachFile {
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
- load(data: Uint8Array, be: boolean, bits: 32 | 64, mem?: binary.utils.memory): Promise<void>;
122
- getCommand(cmd: number): any;
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: ({ cputype: string; cpusubtype: string | number; offset: number; size: number; align: number; contents: MachFile | undefined; } & {})[];
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));