securityos/node_modules/pe-library/dist/format/index.js

41 lines
2.0 KiB
JavaScript
Raw Permalink Normal View History

2024-09-06 15:32:35 +00:00
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;
}