authorgravatar for ashe@kivikakk.eeAsherah Connor <ashe@kivikakk.ee> 2021-01-13 17:32:48+11:00
committergravatar for ashe@kivikakk.eeAsherah Connor <ashe@kivikakk.ee> 2021-01-14 14:38:52+11:00
log23fb19fe4159b0ed41256b31ebac58934efcbb36
treefe3ff8c2a76c4609c4afa18f7e3ef067c1ce072f
parent2b0e3ee228e01473cf880f719db9bde5b8f34d25

std.elf: expose parsing decoupled from std.fs.File


1 files changed, 6 insertions(+), 2 deletions(-)

lib/std/elf.zig+6-2
...@@ -365,8 +365,12 @@ const Header = struct {...@@ -365,8 +365,12 @@ const Header = struct {
365pub fn readHeader(file: File) !Header {365pub fn readHeader(file: File) !Header {
366 var hdr_buf: [@sizeOf(Elf64_Ehdr)]u8 align(@alignOf(Elf64_Ehdr)) = undefined;366 var hdr_buf: [@sizeOf(Elf64_Ehdr)]u8 align(@alignOf(Elf64_Ehdr)) = undefined;
367 try preadNoEof(file, &hdr_buf, 0);367 try preadNoEof(file, &hdr_buf, 0);
368 const hdr32 = @ptrCast(*Elf32_Ehdr, &hdr_buf);368 return parseHeader(hdr_buf);
369 const hdr64 = @ptrCast(*Elf64_Ehdr, &hdr_buf);369}
370
371pub fn parseHeader(hdr_buf: *align(@alignOf(Elf64_Ehdr)) const [@sizeOf(Elf64_Ehdr)]u8) !Header {
372 const hdr32 = @ptrCast(*const Elf32_Ehdr, hdr_buf);
373 const hdr64 = @ptrCast(*const Elf64_Ehdr, hdr_buf);
370 if (!mem.eql(u8, hdr32.e_ident[0..4], "\x7fELF")) return error.InvalidElfMagic;374 if (!mem.eql(u8, hdr32.e_ident[0..4], "\x7fELF")) return error.InvalidElfMagic;
371 if (hdr32.e_ident[EI_VERSION] != 1) return error.InvalidElfVersion;375 if (hdr32.e_ident[EI_VERSION] != 1) return error.InvalidElfVersion;
372376