Initial commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+40
@@ -0,0 +1,40 @@
|
||||
import ArrayFormatBase from './ArrayFormatBase.js';
|
||||
import FormatBase from './FormatBase.js';
|
||||
import ImageDataDirectoryArray from './ImageDataDirectoryArray.js';
|
||||
import ImageDirectoryEntry from './ImageDirectoryEntry.js';
|
||||
import ImageDosHeader from './ImageDosHeader.js';
|
||||
import ImageFileHeader from './ImageFileHeader.js';
|
||||
import ImageNtHeaders from './ImageNtHeaders.js';
|
||||
import ImageOptionalHeader from './ImageOptionalHeader.js';
|
||||
import ImageOptionalHeader64 from './ImageOptionalHeader64.js';
|
||||
import ImageSectionHeaderArray from './ImageSectionHeaderArray.js';
|
||||
export { ArrayFormatBase, FormatBase, ImageDataDirectoryArray, ImageDirectoryEntry, ImageDosHeader, ImageFileHeader, ImageNtHeaders, ImageOptionalHeader, ImageOptionalHeader64, ImageSectionHeaderArray, };
|
||||
export function getImageDosHeader(bin) {
|
||||
return ImageDosHeader.from(bin);
|
||||
}
|
||||
export function getImageNtHeadersByDosHeader(bin, dosHeader) {
|
||||
return ImageNtHeaders.from(bin, dosHeader.newHeaderAddress);
|
||||
}
|
||||
export function getImageSectionHeadersByNtHeaders(bin, dosHeader, ntHeaders) {
|
||||
return ImageSectionHeaderArray.from(bin, ntHeaders.fileHeader.numberOfSections, dosHeader.newHeaderAddress + ntHeaders.byteLength);
|
||||
}
|
||||
export function findImageSectionBlockByDirectoryEntry(bin, dosHeader, ntHeaders, entryType) {
|
||||
var arr = ImageSectionHeaderArray.from(bin, ntHeaders.fileHeader.numberOfSections, dosHeader.newHeaderAddress + ntHeaders.byteLength);
|
||||
var len = arr.length;
|
||||
var rva = ntHeaders.optionalHeaderDataDirectory.get(entryType).virtualAddress;
|
||||
for (var i = 0; i < len; ++i) {
|
||||
var sec = arr.get(i);
|
||||
var vaEnd = sec.virtualAddress + sec.virtualSize;
|
||||
if (rva >= sec.virtualAddress && rva < vaEnd) {
|
||||
var ptr = sec.pointerToRawData;
|
||||
if (!ptr) {
|
||||
return null;
|
||||
}
|
||||
return bin.slice(ptr, ptr + sec.sizeOfRawData);
|
||||
}
|
||||
if (rva < sec.virtualAddress) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user