authorgravatar for erik.hugne@gmail.comErik Hugne <erik.hugne@gmail.com> 2022-04-25 22:45:12+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-28 18:31:20+03:00
logf7bc8900bfef87f67230ac5af7edb2d7766b3ba3
tree28ae8dcb1150228e8efe88181bcc21182bb799c7
parent6f4343b61afe36a709e713735947561a2b76bce8

std.coff: parse out codebase and entrypoint from optionalheader


1 files changed, 7 insertions(+), 1 deletions(-)

lib/std/coff.zig+7-1
...@@ -197,7 +197,11 @@ pub const Coff = struct {...@@ -197,7 +197,11 @@ pub const Coff = struct {
197 const opt_header_pos = try self.in_file.getPos();197 const opt_header_pos = try self.in_file.getPos();
198198
199 self.pe_header.magic = try in.readIntLittle(u16);199 self.pe_header.magic = try in.readIntLittle(u16);
200 // All we care about is the image base value and PDB info200 try self.in_file.seekTo(opt_header_pos + 16);
201 self.pe_header.entry_addr = try in.readIntLittle(u32);
202 try self.in_file.seekTo(opt_header_pos + 20);
203 self.pe_header.code_base = try in.readIntLittle(u32);
204
201 // The header structure is different for 32 or 64 bit205 // The header structure is different for 32 or 64 bit
202 var num_rva_pos: u64 = undefined;206 var num_rva_pos: u64 = undefined;
203 if (self.pe_header.magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) {207 if (self.pe_header.magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
...@@ -374,6 +378,8 @@ const OptionalHeader = struct {...@@ -374,6 +378,8 @@ const OptionalHeader = struct {
374378
375 magic: u16,379 magic: u16,
376 data_directory: [IMAGE_NUMBEROF_DIRECTORY_ENTRIES]DataDirectory,380 data_directory: [IMAGE_NUMBEROF_DIRECTORY_ENTRIES]DataDirectory,
381 entry_addr: u32,
382 code_base: u32,
377 image_base: u64,383 image_base: u64,
378};384};
379385