net-pe-reader 0.1.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/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/src/BinaryHeap.d.ts +6 -0
- package/dist/src/BinaryHeap.d.ts.map +1 -0
- package/dist/src/BinaryHeap.js +10 -0
- package/dist/src/BinaryHeap.js.map +1 -0
- package/dist/src/CliFile.d.ts +19 -0
- package/dist/src/CliFile.d.ts.map +1 -0
- package/dist/src/CliFile.js +288 -0
- package/dist/src/CliFile.js.map +1 -0
- package/dist/src/Columns/BlobReferenceColumns.d.ts +12 -0
- package/dist/src/Columns/BlobReferenceColumns.d.ts.map +1 -0
- package/dist/src/Columns/BlobReferenceColumns.js +41 -0
- package/dist/src/Columns/BlobReferenceColumns.js.map +1 -0
- package/dist/src/Columns/CodedIndex.d.ts +15 -0
- package/dist/src/Columns/CodedIndex.d.ts.map +1 -0
- package/dist/src/Columns/CodedIndex.js +86 -0
- package/dist/src/Columns/CodedIndex.js.map +1 -0
- package/dist/src/Columns/CodedIndexColumn.d.ts +13 -0
- package/dist/src/Columns/CodedIndexColumn.d.ts.map +1 -0
- package/dist/src/Columns/CodedIndexColumn.js +59 -0
- package/dist/src/Columns/CodedIndexColumn.js.map +1 -0
- package/dist/src/Columns/Column.d.ts +4 -0
- package/dist/src/Columns/Column.d.ts.map +1 -0
- package/dist/src/Columns/Column.js +2 -0
- package/dist/src/Columns/Column.js.map +1 -0
- package/dist/src/Columns/GuidReferenceColumn.d.ts +9 -0
- package/dist/src/Columns/GuidReferenceColumn.d.ts.map +1 -0
- package/dist/src/Columns/GuidReferenceColumn.js +19 -0
- package/dist/src/Columns/GuidReferenceColumn.js.map +1 -0
- package/dist/src/Columns/StringReferenceColumn.d.ts +11 -0
- package/dist/src/Columns/StringReferenceColumn.d.ts.map +1 -0
- package/dist/src/Columns/StringReferenceColumn.js +22 -0
- package/dist/src/Columns/StringReferenceColumn.js.map +1 -0
- package/dist/src/Columns/TableIndexColumn.d.ts +11 -0
- package/dist/src/Columns/TableIndexColumn.d.ts.map +1 -0
- package/dist/src/Columns/TableIndexColumn.js +20 -0
- package/dist/src/Columns/TableIndexColumn.js.map +1 -0
- package/dist/src/Columns/UintColumn.d.ts +9 -0
- package/dist/src/Columns/UintColumn.d.ts.map +1 -0
- package/dist/src/Columns/UintColumn.js +27 -0
- package/dist/src/Columns/UintColumn.js.map +1 -0
- package/dist/src/GuidHeap.d.ts +6 -0
- package/dist/src/GuidHeap.d.ts.map +1 -0
- package/dist/src/GuidHeap.js +10 -0
- package/dist/src/GuidHeap.js.map +1 -0
- package/dist/src/HeapBase.d.ts +6 -0
- package/dist/src/HeapBase.d.ts.map +1 -0
- package/dist/src/HeapBase.js +9 -0
- package/dist/src/HeapBase.js.map +1 -0
- package/dist/src/Helpers.d.ts +10 -0
- package/dist/src/Helpers.d.ts.map +1 -0
- package/dist/src/Helpers.js +38 -0
- package/dist/src/Helpers.js.map +1 -0
- package/dist/src/StringHeap.d.ts +6 -0
- package/dist/src/StringHeap.d.ts.map +1 -0
- package/dist/src/StringHeap.js +11 -0
- package/dist/src/StringHeap.js.map +1 -0
- package/dist/src/Structures.d.ts +173 -0
- package/dist/src/Structures.d.ts.map +1 -0
- package/dist/src/Structures.js +96 -0
- package/dist/src/Structures.js.map +1 -0
- package/dist/src/TableColumns.d.ts +48 -0
- package/dist/src/TableColumns.d.ts.map +1 -0
- package/dist/src/TableColumns.js +283 -0
- package/dist/src/TableColumns.js.map +1 -0
- package/dist/src/Tables.d.ts +245 -0
- package/dist/src/Tables.d.ts.map +1 -0
- package/dist/src/Tables.js +262 -0
- package/dist/src/Tables.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Andrei Grigorev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# net-pe-parser
|
|
2
|
+
|
|
3
|
+
.NET PE executable parser to access the CLI metadata in TS/JS.
|
|
4
|
+
Mostly based on information in Part II of [ECMA-335](https://www.ecma-international.org/publications-and-standards/standards/ecma-335/).
|
|
5
|
+
Very early stages of development.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
const peFile = // obtain an ArrayBuffer with PE file content
|
|
11
|
+
const cliFile = new CliFile(peFile);
|
|
12
|
+
const metadataTables = cliFile.getCliMetadata();
|
|
13
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BinaryHeap.d.ts","sourceRoot":"","sources":["../../src/BinaryHeap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,UAAW,SAAQ,QAAQ;IACpC,YAAY,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAErD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE7D;CACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { HeapBase } from "./HeapBase.js";
|
|
2
|
+
export class BinaryHeap extends HeapBase {
|
|
3
|
+
constructor(heapData, indexSizeBytes) {
|
|
4
|
+
super(heapData, indexSizeBytes);
|
|
5
|
+
}
|
|
6
|
+
getBinaryData(offset, length) {
|
|
7
|
+
return new DataView(this.heapData.buffer, this.heapData.byteOffset + offset, length);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=BinaryHeap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BinaryHeap.js","sourceRoot":"","sources":["../../src/BinaryHeap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,UAAW,SAAQ,QAAQ;IACpC,YAAY,QAAkB,EAAE,cAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACpC,CAAC;IAEM,aAAa,CAAC,MAAc,EAAE,MAAc;QAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;CACJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CliHeader, CliMetadataRoot, CliMetadataTableStreamHeader, CliMetadataTables } from './Structures.js';
|
|
2
|
+
export declare class CliFile {
|
|
3
|
+
private exe;
|
|
4
|
+
private header;
|
|
5
|
+
private metadataRoot;
|
|
6
|
+
private metadataTableStreamHeader;
|
|
7
|
+
private metadata;
|
|
8
|
+
constructor(file: ArrayBuffer | ArrayBufferView);
|
|
9
|
+
getCliHeader(): Readonly<CliHeader>;
|
|
10
|
+
getCliMetadataRoot(): Readonly<CliMetadataRoot>;
|
|
11
|
+
getCliMetadataTableStreamHeader(): Readonly<CliMetadataTableStreamHeader>;
|
|
12
|
+
getCliMetadata(): CliMetadataTables;
|
|
13
|
+
private getMetadataStream;
|
|
14
|
+
private static readCliMetadataTableHeader;
|
|
15
|
+
private static getCliMetadataStreamHeader;
|
|
16
|
+
private static getSectionByRva;
|
|
17
|
+
private static getRVA;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=CliFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliFile.d.ts","sourceRoot":"","sources":["../../src/CliFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,eAAe,EAA2B,4BAA4B,EAAE,iBAAiB,EAA6B,MAAM,iBAAiB,CAAC;AAOlK,qBAAa,OAAO;IAChB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,yBAAyB,CAAuD;IACxF,OAAO,CAAC,QAAQ,CAAkC;IAElD,YAAY,IAAI,EAAE,WAAW,GAAG,eAAe,EAE9C;IAEM,YAAY,IAAI,QAAQ,CAAC,SAAS,CAAC,CA8BzC;IAEM,kBAAkB,IAAI,QAAQ,CAAC,eAAe,CAAC,CA0CrD;IAEM,+BAA+B,IAAI,QAAQ,CAAC,4BAA4B,CAAC,CAS/E;IAEM,cAAc,IAAK,iBAAiB,CAiH1C;IAED,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAkCzC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAgBzC,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,MAAM;CAMxB"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import * as PE from 'pe-library';
|
|
2
|
+
import { getBoolArrayFromBitmask, getNullTerminatedUtf8String, getUtf8String, roundUpToNearest } from './Helpers.js';
|
|
3
|
+
import { HeapSizes, MetadataTables } from './Structures.js';
|
|
4
|
+
import { ModuleTableRow, TypeRefTableRow, TypeDefTableRow, FieldTableRow, MethodDefRow, ParamRow, InterfaceImplRow, MemberRefRow, ConstantRow, CustomAttributeRow, FieldMarshalRow, DeclSecurityRow, ClassLayoutRow, FieldLayoutRow, StandAloneSigRow, EventMapRow, EventRow, PropertyMapRow, PropertyRow, MethodSemanticsRow, MethodImplRow, ModuleRefRow, TypeSpecRow, ImplMapRow, FieldRvaRow, AssemblyRow, AssemblyProcessorRow, getRowsFromBytes, AssemblyOsRow, AssemblyRefRow, AssemblyRefProcessorRow, AssemblyRefOsRow, FileRow, ExportedTypeRow, ManifestResourceRow, NestedClassRow, GenericParamRow, MethodSpecRow, GenericParamConstraintRow } from './Tables.js';
|
|
5
|
+
import { StringHeap } from './StringHeap.js';
|
|
6
|
+
import { GuidHeap } from './GuidHeap.js';
|
|
7
|
+
import * as Columns from './TableColumns.js';
|
|
8
|
+
import { BinaryHeap } from './BinaryHeap.js';
|
|
9
|
+
export class CliFile {
|
|
10
|
+
exe;
|
|
11
|
+
header = null;
|
|
12
|
+
metadataRoot = null;
|
|
13
|
+
metadataTableStreamHeader = null;
|
|
14
|
+
metadata = null;
|
|
15
|
+
constructor(file) {
|
|
16
|
+
this.exe = PE.NtExecutable.from(file);
|
|
17
|
+
}
|
|
18
|
+
getCliHeader() {
|
|
19
|
+
if (this.header) {
|
|
20
|
+
return this.header;
|
|
21
|
+
}
|
|
22
|
+
const cliHeaderDirectoryEntry = this.exe.newHeader.optionalHeaderDataDirectory.get(PE.Format.ImageDirectoryEntry.ComDescriptor);
|
|
23
|
+
const sectionContainingCliHeader = this.exe.getSectionByEntry(PE.Format.ImageDirectoryEntry.ComDescriptor);
|
|
24
|
+
if (!sectionContainingCliHeader || !sectionContainingCliHeader.data) {
|
|
25
|
+
throw new Error("Missing section containing CLI header");
|
|
26
|
+
}
|
|
27
|
+
const cliHeaderOffsetInSection = cliHeaderDirectoryEntry.virtualAddress - sectionContainingCliHeader.info.virtualAddress;
|
|
28
|
+
const view = new DataView(sectionContainingCliHeader.data, cliHeaderOffsetInSection, 72);
|
|
29
|
+
this.header = {
|
|
30
|
+
cbSize: view.getUint32(0, true),
|
|
31
|
+
majorRuntimeVersion: view.getUint16(4, true),
|
|
32
|
+
minorRuntimeVersion: view.getUint16(6, true),
|
|
33
|
+
metaData: CliFile.getRVA(view, 8),
|
|
34
|
+
flags: view.getUint32(16, true),
|
|
35
|
+
entryPointToken: view.getUint32(20, true),
|
|
36
|
+
resources: CliFile.getRVA(view, 24),
|
|
37
|
+
strongNameSignature: CliFile.getRVA(view, 32),
|
|
38
|
+
codeManagerTable: CliFile.getRVA(view, 40),
|
|
39
|
+
vTableFixups: CliFile.getRVA(view, 48),
|
|
40
|
+
exportAddressTableJumps: CliFile.getRVA(view, 56),
|
|
41
|
+
managedNativeHeader: CliFile.getRVA(view, 64),
|
|
42
|
+
};
|
|
43
|
+
return this.header;
|
|
44
|
+
}
|
|
45
|
+
getCliMetadataRoot() {
|
|
46
|
+
if (this.metadataRoot) {
|
|
47
|
+
return this.metadataRoot;
|
|
48
|
+
}
|
|
49
|
+
const header = this.getCliHeader();
|
|
50
|
+
const section = CliFile.getSectionByRva(this.exe, header.metaData);
|
|
51
|
+
if (!section || !section.data) {
|
|
52
|
+
throw new Error("Can't find section containing metadata root");
|
|
53
|
+
}
|
|
54
|
+
const metadataRootOffsetInSection = header.metaData.virtualAddress - section.info.virtualAddress;
|
|
55
|
+
const view = new DataView(section.data, metadataRootOffsetInSection);
|
|
56
|
+
const metadataRoot = {
|
|
57
|
+
signature: view.getUint32(0, true),
|
|
58
|
+
majorVersion: view.getUint16(4, true),
|
|
59
|
+
minorVersion: view.getUint16(6, true),
|
|
60
|
+
reserved: view.getUint32(8, true),
|
|
61
|
+
versionLength: view.getUint32(12, true),
|
|
62
|
+
version: "",
|
|
63
|
+
flags: 0,
|
|
64
|
+
streamCount: 0,
|
|
65
|
+
streamHeaders: [],
|
|
66
|
+
};
|
|
67
|
+
const flagsOffset = 16 + roundUpToNearest(metadataRoot.versionLength, 4);
|
|
68
|
+
metadataRoot.flags = view.getUint16(flagsOffset, true);
|
|
69
|
+
metadataRoot.streamCount = view.getUint16(flagsOffset + 2, true);
|
|
70
|
+
metadataRoot.version = getUtf8String(section.data, metadataRootOffsetInSection + 16, metadataRoot.versionLength);
|
|
71
|
+
let offset = flagsOffset + 4;
|
|
72
|
+
for (let i = 0; i < metadataRoot.streamCount; ++i) {
|
|
73
|
+
const result = CliFile.getCliMetadataStreamHeader(view, offset);
|
|
74
|
+
metadataRoot.streamHeaders.push(result.header);
|
|
75
|
+
offset += result.totalBytesRead;
|
|
76
|
+
}
|
|
77
|
+
this.metadataRoot = metadataRoot;
|
|
78
|
+
return this.metadataRoot;
|
|
79
|
+
}
|
|
80
|
+
getCliMetadataTableStreamHeader() {
|
|
81
|
+
if (this.metadataTableStreamHeader) {
|
|
82
|
+
return this.metadataTableStreamHeader;
|
|
83
|
+
}
|
|
84
|
+
const metadataStream = this.getMetadataStream("#~");
|
|
85
|
+
return CliFile.readCliMetadataTableHeader(metadataStream).header;
|
|
86
|
+
}
|
|
87
|
+
getCliMetadata() {
|
|
88
|
+
if (this.metadata) {
|
|
89
|
+
return this.metadata;
|
|
90
|
+
}
|
|
91
|
+
const metadataStream = this.getMetadataStream("#~");
|
|
92
|
+
const stringHeapStream = this.getMetadataStream("#Strings");
|
|
93
|
+
const guidHeapStream = this.getMetadataStream("#GUID");
|
|
94
|
+
const blobHeapStream = this.getMetadataStream("#Blob");
|
|
95
|
+
const headerReadResult = CliFile.readCliMetadataTableHeader(metadataStream);
|
|
96
|
+
const tableHeader = headerReadResult.header;
|
|
97
|
+
const stringHeap = new StringHeap(stringHeapStream, tableHeader.heapSizes & HeapSizes.StringStreamUses32BitIndexes ? 4 : 2);
|
|
98
|
+
const guidHeap = new GuidHeap(guidHeapStream, tableHeader.heapSizes & HeapSizes.GuidStreamUses32BitIndexes ? 4 : 2);
|
|
99
|
+
const blobHeap = new BinaryHeap(blobHeapStream, tableHeader.heapSizes & HeapSizes.BlobStreamUses32BitIndexes ? 4 : 2);
|
|
100
|
+
let offset = headerReadResult.totalBytesRead;
|
|
101
|
+
function readTable(table, createRow, getColumns) {
|
|
102
|
+
const columns = getColumns(tableHeader, stringHeap, blobHeap, guidHeap);
|
|
103
|
+
const result = getRowsFromBytes(table, metadataStream, offset, createRow, columns, tableHeader);
|
|
104
|
+
offset += result.bytesRead || 0;
|
|
105
|
+
return result.rows;
|
|
106
|
+
}
|
|
107
|
+
const module = readTable(MetadataTables.Module, () => new ModuleTableRow(), Columns.Module);
|
|
108
|
+
const typeRef = readTable(MetadataTables.TypeRef, () => new TypeRefTableRow(), Columns.TypeRef);
|
|
109
|
+
const typeDef = readTable(MetadataTables.TypeDef, () => new TypeDefTableRow(), Columns.TypeDef);
|
|
110
|
+
const field = readTable(MetadataTables.Field, () => new FieldTableRow(), Columns.Field);
|
|
111
|
+
const methodDef = readTable(MetadataTables.MethodDef, () => new MethodDefRow(), Columns.MethodDef);
|
|
112
|
+
const param = readTable(MetadataTables.Param, () => new ParamRow(), Columns.Param);
|
|
113
|
+
const interfaceImpl = readTable(MetadataTables.InterfaceImpl, () => new InterfaceImplRow(), Columns.Interface);
|
|
114
|
+
const memberRef = readTable(MetadataTables.MemberRef, () => new MemberRefRow, Columns.MemberRef);
|
|
115
|
+
const constant = readTable(MetadataTables.Constant, () => new ConstantRow(), Columns.Constant);
|
|
116
|
+
const customAttribute = readTable(MetadataTables.CustomAttribute, () => new CustomAttributeRow(), Columns.CustomAttribute);
|
|
117
|
+
const fieldMarshal = readTable(MetadataTables.FieldMarshal, () => new FieldMarshalRow(), Columns.FieldMarshal);
|
|
118
|
+
const declSecurity = readTable(MetadataTables.DeclSecurity, () => new DeclSecurityRow, Columns.DeclSecurity);
|
|
119
|
+
const classLayout = readTable(MetadataTables.ClassLayout, () => new ClassLayoutRow(), Columns.ClassLayout);
|
|
120
|
+
const fieldLayout = readTable(MetadataTables.FieldLayout, () => new FieldLayoutRow(), Columns.FieldLayout);
|
|
121
|
+
const standAloneSig = readTable(MetadataTables.StandAloneSig, () => new StandAloneSigRow(), Columns.StandAloneSig);
|
|
122
|
+
const eventMap = readTable(MetadataTables.EventMap, () => new EventMapRow(), Columns.EventMap);
|
|
123
|
+
const event = readTable(MetadataTables.Event, () => new EventRow(), Columns.Event);
|
|
124
|
+
const propertyMap = readTable(MetadataTables.PropertyMap, () => new PropertyMapRow(), Columns.PropertyMap);
|
|
125
|
+
const property = readTable(MetadataTables.Property, () => new PropertyRow(), Columns.Property);
|
|
126
|
+
const methodSemantics = readTable(MetadataTables.MethodSemantics, () => new MethodSemanticsRow(), Columns.MethodSemantics);
|
|
127
|
+
const methodImpl = readTable(MetadataTables.MethodImpl, () => new MethodImplRow(), Columns.MethodImpl);
|
|
128
|
+
const moduleRef = readTable(MetadataTables.ModuleRef, () => new ModuleRefRow(), Columns.ModuleRef);
|
|
129
|
+
const typeSpec = readTable(MetadataTables.TypeSpec, () => new TypeSpecRow, Columns.TypeSpec);
|
|
130
|
+
const implMap = readTable(MetadataTables.ImplMap, () => new ImplMapRow(), Columns.ImplMap);
|
|
131
|
+
const fieldRva = readTable(MetadataTables.FieldRVA, () => new FieldRvaRow(), Columns.FieldRva);
|
|
132
|
+
const assembly = readTable(MetadataTables.Assembly, () => new AssemblyRow(), Columns.Assembly);
|
|
133
|
+
const assemblyProcessor = readTable(MetadataTables.AssemblyProcessor, () => new AssemblyProcessorRow, Columns.AssemblyProcessor);
|
|
134
|
+
const assemblyOs = readTable(MetadataTables.AssemblyOS, () => new AssemblyOsRow(), Columns.AssemblyOs);
|
|
135
|
+
const assemblyRef = readTable(MetadataTables.AssemblyRef, () => new AssemblyRefRow(), Columns.AssemblyRef);
|
|
136
|
+
const assemblyRefProcessor = readTable(MetadataTables.AssemblyRefProcessor, () => new AssemblyRefProcessorRow(), Columns.AssemblyRefProcessor);
|
|
137
|
+
const assemblyRefOs = readTable(MetadataTables.AssemblyRefOS, () => new AssemblyRefOsRow(), Columns.AssemblyRefOs);
|
|
138
|
+
const file = readTable(MetadataTables.File, () => new FileRow(), Columns.File);
|
|
139
|
+
const exportedType = readTable(MetadataTables.ExportedType, () => new ExportedTypeRow(), Columns.ExportedType);
|
|
140
|
+
const manifestResource = readTable(MetadataTables.ManifestResource, () => new ManifestResourceRow(), Columns.ManifestResource);
|
|
141
|
+
const nestedClass = readTable(MetadataTables.NestedClass, () => new NestedClassRow(), Columns.NestedClass);
|
|
142
|
+
const genericParam = readTable(MetadataTables.GenericParam, () => new GenericParamRow(), Columns.GenericParam);
|
|
143
|
+
const methodSpec = readTable(MetadataTables.MethodSpec, () => new MethodSpecRow(), Columns.MethodSpec);
|
|
144
|
+
const genericParamConstraint = readTable(MetadataTables.GenericParamConstraint, () => new GenericParamConstraintRow(), Columns.GenericParamConstraint);
|
|
145
|
+
setupFieldsAndMethods(typeDef, field, methodDef);
|
|
146
|
+
this.metadata = {
|
|
147
|
+
module: module,
|
|
148
|
+
typeRef: typeRef,
|
|
149
|
+
typeDef: typeDef,
|
|
150
|
+
field: field,
|
|
151
|
+
methodDef: methodDef,
|
|
152
|
+
param: param,
|
|
153
|
+
interfaceImpl: interfaceImpl,
|
|
154
|
+
memberRef: memberRef,
|
|
155
|
+
constant: constant,
|
|
156
|
+
customAttribute: customAttribute,
|
|
157
|
+
fieldMarshal: fieldMarshal,
|
|
158
|
+
declSecurity: declSecurity,
|
|
159
|
+
classLayout: classLayout,
|
|
160
|
+
fieldLayout: fieldLayout,
|
|
161
|
+
standAloneSig: standAloneSig,
|
|
162
|
+
eventMap: eventMap,
|
|
163
|
+
event: event,
|
|
164
|
+
propertyMap: propertyMap,
|
|
165
|
+
property: property,
|
|
166
|
+
methodSemantics: methodSemantics,
|
|
167
|
+
methodImpl: methodImpl,
|
|
168
|
+
moduleRef: moduleRef,
|
|
169
|
+
typeSpec: typeSpec,
|
|
170
|
+
implMap: implMap,
|
|
171
|
+
fieldRva: fieldRva,
|
|
172
|
+
assembly: assembly,
|
|
173
|
+
assemblyProcessor: assemblyProcessor,
|
|
174
|
+
assemblyOs: assemblyOs,
|
|
175
|
+
assemblyRef: assemblyRef,
|
|
176
|
+
assemblyRefProcessor: assemblyRefProcessor,
|
|
177
|
+
assemblyRefOs: assemblyRefOs,
|
|
178
|
+
file: file,
|
|
179
|
+
exportedType: exportedType,
|
|
180
|
+
manifestResource: manifestResource,
|
|
181
|
+
nestedClass: nestedClass,
|
|
182
|
+
genericParam: genericParam,
|
|
183
|
+
methodSpec: methodSpec,
|
|
184
|
+
genericParamConstraint: genericParamConstraint,
|
|
185
|
+
};
|
|
186
|
+
return this.metadata;
|
|
187
|
+
}
|
|
188
|
+
getMetadataStream(streamName) {
|
|
189
|
+
const metadataRva = this.getCliHeader().metaData;
|
|
190
|
+
const metadataRoot = this.getCliMetadataRoot();
|
|
191
|
+
const metadataStreamHeader = metadataRoot.streamHeaders.find(h => h.streamName === streamName);
|
|
192
|
+
if (!metadataStreamHeader) {
|
|
193
|
+
throw new Error(`Can't find ${streamName} stream header`);
|
|
194
|
+
}
|
|
195
|
+
const section = CliFile.getSectionByRva(this.exe, metadataRva);
|
|
196
|
+
if (!section || !section.data) {
|
|
197
|
+
throw new Error(`Can't find section containing ${streamName} stream`);
|
|
198
|
+
}
|
|
199
|
+
const metadataRootOffsetInSection = metadataRva.virtualAddress - section.info.virtualAddress;
|
|
200
|
+
const metadataStreamOffset = metadataRootOffsetInSection + metadataStreamHeader.metadataRootOffset;
|
|
201
|
+
return new DataView(section.data, metadataStreamOffset, metadataStreamHeader.streamSize);
|
|
202
|
+
}
|
|
203
|
+
static readCliMetadataTableHeader(view) {
|
|
204
|
+
const header = {
|
|
205
|
+
reserved: view.getUint32(0, true),
|
|
206
|
+
majorVersion: view.getUint8(4),
|
|
207
|
+
minorVersion: view.getUint8(5),
|
|
208
|
+
heapSizes: view.getUint8(6),
|
|
209
|
+
reserved2: view.getUint8(7),
|
|
210
|
+
presentTables: getBoolArrayFromBitmask(view.getBigUint64(8, true)),
|
|
211
|
+
sortedTables: getBoolArrayFromBitmask(view.getBigUint64(16, true)),
|
|
212
|
+
tableRowCounts: [],
|
|
213
|
+
};
|
|
214
|
+
const numTables = header.presentTables.reduce((acc, val) => acc + (val ? 1 : 0), 0);
|
|
215
|
+
let tableIndex = 0;
|
|
216
|
+
for (let i = 0; i < header.presentTables.length; ++i) {
|
|
217
|
+
if (header.presentTables[i]) {
|
|
218
|
+
const rowCount = view.getUint32(24 + tableIndex * 4, true);
|
|
219
|
+
++tableIndex;
|
|
220
|
+
header.tableRowCounts.push(rowCount);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
header.tableRowCounts.push(0);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
header: header,
|
|
228
|
+
totalBytesRead: 24 + numTables * 4,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
static getCliMetadataStreamHeader(view, offset) {
|
|
232
|
+
const header = {
|
|
233
|
+
metadataRootOffset: view.getUint32(offset, true),
|
|
234
|
+
streamSize: view.getUint32(offset + 4, true),
|
|
235
|
+
streamName: "",
|
|
236
|
+
};
|
|
237
|
+
const stringReadResult = getNullTerminatedUtf8String(view, offset + 8);
|
|
238
|
+
header.streamName = stringReadResult.string;
|
|
239
|
+
return {
|
|
240
|
+
header: header,
|
|
241
|
+
totalBytesRead: 8 + roundUpToNearest(stringReadResult.bytesRead + 1, 4), // string must have at least one trailing \0 character
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
static getSectionByRva(exe, rva) {
|
|
245
|
+
const section = exe.getAllSections().find(s => {
|
|
246
|
+
const sectionEnd = s.info.virtualAddress + s.info.virtualSize;
|
|
247
|
+
return rva.virtualAddress >= s.info.virtualAddress && rva.virtualAddress < sectionEnd;
|
|
248
|
+
});
|
|
249
|
+
return section ? section : null;
|
|
250
|
+
}
|
|
251
|
+
static getRVA(dv, offset) {
|
|
252
|
+
return {
|
|
253
|
+
virtualAddress: dv.getUint32(offset, true),
|
|
254
|
+
size: dv.getUint32(offset + 4, true),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function setupFieldsAndMethods(typeDef, field, methodDef) {
|
|
259
|
+
if (typeDef === null) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
for (let i = 0; i < typeDef.length; ++i) {
|
|
263
|
+
(function () {
|
|
264
|
+
if (typeDef[i].fieldListIndex > 0 && field != null) {
|
|
265
|
+
const start = typeDef[i].fieldListIndex - 1;
|
|
266
|
+
if (start === field.length) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const end = i < typeDef.length - 1 ? typeDef[i + 1].fieldListIndex - 1 : field.length;
|
|
270
|
+
if (start === end) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
typeDef[i].fieldList = field.slice(start, end);
|
|
274
|
+
}
|
|
275
|
+
})();
|
|
276
|
+
(function () {
|
|
277
|
+
if (typeDef[i].methodListIndex > 0 && methodDef != null) {
|
|
278
|
+
const start = typeDef[i].methodListIndex - 1;
|
|
279
|
+
const end = i < typeDef.length - 1 ? typeDef[i + 1].methodListIndex - 1 : methodDef.length;
|
|
280
|
+
if (start === end) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
typeDef[i].methodList = methodDef.slice(start, end);
|
|
284
|
+
}
|
|
285
|
+
})();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=CliFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliFile.js","sourceRoot":"","sources":["../../src/CliFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BinaryHeap } from "src/BinaryHeap.js";
|
|
2
|
+
import { Column } from "./Column.js";
|
|
3
|
+
export declare class BlobReferenceColumn<TRow> implements Column<TRow> {
|
|
4
|
+
private readonly blobHeapSize;
|
|
5
|
+
private readonly readIndex;
|
|
6
|
+
private readonly setIndex;
|
|
7
|
+
private readonly setData;
|
|
8
|
+
private readonly blobHeap;
|
|
9
|
+
constructor(blobHeap: Readonly<BinaryHeap>, setIndex: (row: TRow, index: number) => void, setData: (row: TRow, data: DataView) => void);
|
|
10
|
+
read(view: DataView, offset: number, row: TRow): number;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=BlobReferenceColumns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobReferenceColumns.d.ts","sourceRoot":"","sources":["../../../src/Columns/BlobReferenceColumns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,mBAAmB,CAAC,IAAI,CAAE,YAAW,MAAM,CAAC,IAAI,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEhD,YACI,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,EAS/C;IAED,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAqBtD;CACJ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class BlobReferenceColumn {
|
|
2
|
+
blobHeapSize;
|
|
3
|
+
readIndex;
|
|
4
|
+
setIndex;
|
|
5
|
+
setData;
|
|
6
|
+
blobHeap;
|
|
7
|
+
constructor(blobHeap, setIndex, setData) {
|
|
8
|
+
this.blobHeapSize = blobHeap.indexSizeBytes;
|
|
9
|
+
this.blobHeap = blobHeap;
|
|
10
|
+
this.setIndex = setIndex;
|
|
11
|
+
this.setData = setData;
|
|
12
|
+
this.readIndex = this.blobHeapSize == 2
|
|
13
|
+
? (view, offset) => view.getUint16(offset, true)
|
|
14
|
+
: (view, offset) => view.getUint32(offset, true);
|
|
15
|
+
}
|
|
16
|
+
read(view, offset, row) {
|
|
17
|
+
const index = this.readIndex(view, offset);
|
|
18
|
+
this.setIndex(row, index);
|
|
19
|
+
const firstLengthByte = this.blobHeap.getBinaryData(index, 1).getUint8(0);
|
|
20
|
+
if ((firstLengthByte & 0x80) == 0) {
|
|
21
|
+
// single byte length
|
|
22
|
+
const length = firstLengthByte & 0x7F;
|
|
23
|
+
const data = this.blobHeap.getBinaryData(index + 1, length);
|
|
24
|
+
this.setData(row, data);
|
|
25
|
+
}
|
|
26
|
+
else if ((firstLengthByte & 0xC0) == 0x80) {
|
|
27
|
+
// two byte length
|
|
28
|
+
const length = this.blobHeap.getBinaryData(index, 2).getUint16(0, false) & 0x3FFF; // big endian!!!
|
|
29
|
+
const data = this.blobHeap.getBinaryData(index + 2, length);
|
|
30
|
+
this.setData(row, data);
|
|
31
|
+
}
|
|
32
|
+
else if ((firstLengthByte & 0xE0) == 0xC0) {
|
|
33
|
+
// four byte length
|
|
34
|
+
const length = this.blobHeap.getBinaryData(index, 4).getUint32(0, false) & 0x1FFFFFFF; // here, too!!!
|
|
35
|
+
const data = this.blobHeap.getBinaryData(index + 4, length);
|
|
36
|
+
this.setData(row, data);
|
|
37
|
+
}
|
|
38
|
+
return this.blobHeapSize;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=BlobReferenceColumns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobReferenceColumns.js","sourceRoot":"","sources":["../../../src/Columns/BlobReferenceColumns.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,mBAAmB;IACX,YAAY,CAAS;IACrB,SAAS,CAA6C;IACtD,QAAQ,CAAqC;IAC7C,OAAO,CAAsC;IAC7C,QAAQ,CAAuB;IAEhD,YACI,QAA8B,EAC9B,QAA4C,EAC5C,OAA4C;QAE5C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC;YACnC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;YAChD,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,IAAc,EAAE,MAAc,EAAE,GAAS;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,qBAAqB;YACrB,MAAM,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1C,kBAAkB;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,gBAAgB;YACnG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1C,mBAAmB;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,eAAe;YACtG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;CACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MetadataTables } from "src/Structures.js";
|
|
2
|
+
export declare const TypeDefOrRef: Array<MetadataTables>;
|
|
3
|
+
export declare const HasConstant: Array<MetadataTables>;
|
|
4
|
+
export declare const HasCustomAttribute: Array<MetadataTables>;
|
|
5
|
+
export declare const HasFieldMarshall: Array<MetadataTables>;
|
|
6
|
+
export declare const HasDeclSecurity: Array<MetadataTables>;
|
|
7
|
+
export declare const MemberRefParent: Array<MetadataTables>;
|
|
8
|
+
export declare const HasSemantics: Array<MetadataTables>;
|
|
9
|
+
export declare const MethodDefOrRef: Array<MetadataTables>;
|
|
10
|
+
export declare const MemberForwarded: Array<MetadataTables>;
|
|
11
|
+
export declare const Implementation: Array<MetadataTables>;
|
|
12
|
+
export declare const CustomAttributeType: Array<MetadataTables>;
|
|
13
|
+
export declare const ResolutionScope: Array<MetadataTables>;
|
|
14
|
+
export declare const TypeOrMethodDef: Array<MetadataTables>;
|
|
15
|
+
//# sourceMappingURL=CodedIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodedIndex.d.ts","sourceRoot":"","sources":["../../../src/Columns/CodedIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,cAAc,CAI9C,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,cAAc,CAI7C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,cAAc,CAuBpD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAGlD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,cAAc,CAIjD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,cAAc,CAMjD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,cAAc,CAG9C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,cAAc,CAGhD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,cAAc,CAGjD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,cAAc,CAIhD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,cAAc,CAMrD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,cAAc,CAKjD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,cAAc,CAGjD,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { MetadataTables } from "src/Structures.js";
|
|
2
|
+
export const TypeDefOrRef = [
|
|
3
|
+
MetadataTables.TypeDef,
|
|
4
|
+
MetadataTables.TypeRef,
|
|
5
|
+
MetadataTables.TypeSpec,
|
|
6
|
+
];
|
|
7
|
+
export const HasConstant = [
|
|
8
|
+
MetadataTables.Field,
|
|
9
|
+
MetadataTables.Param,
|
|
10
|
+
MetadataTables.Property,
|
|
11
|
+
];
|
|
12
|
+
export const HasCustomAttribute = [
|
|
13
|
+
MetadataTables.MethodDef,
|
|
14
|
+
MetadataTables.Field,
|
|
15
|
+
MetadataTables.TypeRef,
|
|
16
|
+
MetadataTables.TypeDef,
|
|
17
|
+
MetadataTables.Param,
|
|
18
|
+
MetadataTables.InterfaceImpl,
|
|
19
|
+
MetadataTables.MemberRef,
|
|
20
|
+
MetadataTables.Module,
|
|
21
|
+
MetadataTables.Permission,
|
|
22
|
+
MetadataTables.Property,
|
|
23
|
+
MetadataTables.Event,
|
|
24
|
+
MetadataTables.StandAloneSig,
|
|
25
|
+
MetadataTables.ModuleRef,
|
|
26
|
+
MetadataTables.TypeSpec,
|
|
27
|
+
MetadataTables.Assembly,
|
|
28
|
+
MetadataTables.AssemblyRef,
|
|
29
|
+
MetadataTables.File,
|
|
30
|
+
MetadataTables.ExportedType,
|
|
31
|
+
MetadataTables.ManifestResource,
|
|
32
|
+
MetadataTables.GenericParam,
|
|
33
|
+
MetadataTables.GenericParamConstraint,
|
|
34
|
+
MetadataTables.MethodSpec,
|
|
35
|
+
];
|
|
36
|
+
export const HasFieldMarshall = [
|
|
37
|
+
MetadataTables.Field,
|
|
38
|
+
MetadataTables.Param,
|
|
39
|
+
];
|
|
40
|
+
export const HasDeclSecurity = [
|
|
41
|
+
MetadataTables.TypeDef,
|
|
42
|
+
MetadataTables.MethodDef,
|
|
43
|
+
MetadataTables.Assembly,
|
|
44
|
+
];
|
|
45
|
+
export const MemberRefParent = [
|
|
46
|
+
MetadataTables.TypeDef,
|
|
47
|
+
MetadataTables.TypeRef,
|
|
48
|
+
MetadataTables.ModuleRef,
|
|
49
|
+
MetadataTables.MethodDef,
|
|
50
|
+
MetadataTables.TypeSpec,
|
|
51
|
+
];
|
|
52
|
+
export const HasSemantics = [
|
|
53
|
+
MetadataTables.Event,
|
|
54
|
+
MetadataTables.Property,
|
|
55
|
+
];
|
|
56
|
+
export const MethodDefOrRef = [
|
|
57
|
+
MetadataTables.MethodDef,
|
|
58
|
+
MetadataTables.MemberRef,
|
|
59
|
+
];
|
|
60
|
+
export const MemberForwarded = [
|
|
61
|
+
MetadataTables.Field,
|
|
62
|
+
MetadataTables.MethodDef,
|
|
63
|
+
];
|
|
64
|
+
export const Implementation = [
|
|
65
|
+
MetadataTables.File,
|
|
66
|
+
MetadataTables.AssemblyRef,
|
|
67
|
+
MetadataTables.ExportedType,
|
|
68
|
+
];
|
|
69
|
+
export const CustomAttributeType = [
|
|
70
|
+
MetadataTables.NotUsed,
|
|
71
|
+
MetadataTables.NotUsed,
|
|
72
|
+
MetadataTables.MethodDef,
|
|
73
|
+
MetadataTables.MemberRef,
|
|
74
|
+
MetadataTables.NotUsed,
|
|
75
|
+
];
|
|
76
|
+
export const ResolutionScope = [
|
|
77
|
+
MetadataTables.Module,
|
|
78
|
+
MetadataTables.ModuleRef,
|
|
79
|
+
MetadataTables.AssemblyRef,
|
|
80
|
+
MetadataTables.TypeRef,
|
|
81
|
+
];
|
|
82
|
+
export const TypeOrMethodDef = [
|
|
83
|
+
MetadataTables.TypeDef,
|
|
84
|
+
MetadataTables.MethodDef,
|
|
85
|
+
];
|
|
86
|
+
//# sourceMappingURL=CodedIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodedIndex.js","sourceRoot":"","sources":["../../../src/Columns/CodedIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAA0B;IAC/C,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,QAAQ;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAA0B;IAC9C,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,QAAQ;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAA0B;IACrD,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,aAAa;IAC5B,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,MAAM;IACrB,cAAc,CAAC,UAAU;IACzB,cAAc,CAAC,QAAQ;IACvB,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,aAAa;IAC5B,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,QAAQ;IACvB,cAAc,CAAC,QAAQ;IACvB,cAAc,CAAC,WAAW;IAC1B,cAAc,CAAC,IAAI;IACnB,cAAc,CAAC,YAAY;IAC3B,cAAc,CAAC,gBAAgB;IAC/B,cAAc,CAAC,YAAY;IAC3B,cAAc,CAAC,sBAAsB;IACrC,cAAc,CAAC,UAAU;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACnD,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,KAAK;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,QAAQ;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,QAAQ;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA0B;IAC/C,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,QAAQ;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA0B;IACjD,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,SAAS;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,cAAc,CAAC,KAAK;IACpB,cAAc,CAAC,SAAS;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA0B;IACjD,cAAc,CAAC,IAAI;IACnB,cAAc,CAAC,WAAW;IAC1B,cAAc,CAAC,YAAY;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA0B;IACtD,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,OAAO;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,cAAc,CAAC,MAAM;IACrB,cAAc,CAAC,SAAS;IACxB,cAAc,CAAC,WAAW;IAC1B,cAAc,CAAC,OAAO;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,cAAc,CAAC,OAAO;IACtB,cAAc,CAAC,SAAS;CAC3B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CliMetadataTableStreamHeader, MetadataTables } from "src/Structures.js";
|
|
2
|
+
import { Column } from "./Column.js";
|
|
3
|
+
export declare class CodedIndexColumn<TRow> implements Column<TRow> {
|
|
4
|
+
private indexSize;
|
|
5
|
+
private tables;
|
|
6
|
+
private readCodedIndex;
|
|
7
|
+
private setCodedIndex;
|
|
8
|
+
private getTag;
|
|
9
|
+
private getTableIndex;
|
|
10
|
+
constructor(tableStreamHeader: Readonly<CliMetadataTableStreamHeader>, tables: Array<MetadataTables>, setCodedIndex: (row: TRow, index: number) => void);
|
|
11
|
+
read(view: DataView, offset: number, row: TRow): number;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=CodedIndexColumn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodedIndexColumn.d.ts","sourceRoot":"","sources":["../../../src/Columns/CodedIndexColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,gBAAgB,CAAC,IAAI,CAAE,YAAW,MAAM,CAAC,IAAI,CAAC;IACvD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,aAAa,CAAiC;IAEtD,YACI,iBAAiB,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EACzD,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,EAC7B,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EAiBpD;IAED,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAWtD;CACJ"}
|