Function init [src]

Prototype

pub fn init(data: []const u8, is_loaded: bool) !Coff

Parameters

data: []const u8is_loaded: bool

Source

pub fn init(data: []const u8, is_loaded: bool) !Coff { const pe_pointer_offset = 0x3C; const pe_magic = "PE\x00\x00"; var stream = std.io.fixedBufferStream(data); const reader = stream.reader(); try stream.seekTo(pe_pointer_offset); const coff_header_offset = try reader.readInt(u32, .little); try stream.seekTo(coff_header_offset); var buf: [4]u8 = undefined; try reader.readNoEof(&buf); const is_image = mem.eql(u8, pe_magic, &buf); var coff = @This(){ .data = data, .is_image = is_image, .is_loaded = is_loaded, .coff_header_offset = coff_header_offset, }; // Do some basic validation upfront if (is_image) { coff.coff_header_offset = coff.coff_header_offset + 4; const coff_header = coff.getCoffHeader(); if (coff_header.size_of_optional_header == 0) return error.MissingPEHeader; } // JK: we used to check for architecture here and throw an error if not x86 or derivative. // However I am willing to take a leap of faith and let aarch64 have a shot also. return coff; }