authorgravatar for PecoraInPannaCotta@gmail.comGiuseppe Cesarano <PecoraInPannaCotta@gmail.com> 2025-08-08 20:32:17+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-08 12:47:00-07:00
log3ee4252183e92ee8ec51c9ba8631bd9524e26b1f
treec72e47defe12130819fcf0fbdcaff1651c7a0a98
parent1ba6838bc3919f2e1306b01a11fd3d5dd01fefe1

Fix: std.elf offset computation


1 files changed, 8 insertions(+), 4 deletions(-)

lib/std/elf.zig+8-4
...@@ -584,7 +584,8 @@ pub const ProgramHeaderIterator = struct {...@@ -584,7 +584,8 @@ pub const ProgramHeaderIterator = struct {
584 if (it.index >= it.elf_header.phnum) return null;584 if (it.index >= it.elf_header.phnum) return null;
585 defer it.index += 1;585 defer it.index += 1;
586586
587 const offset = it.elf_header.phoff + if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr) * it.index;587 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr);
588 const offset = it.elf_header.phoff + size * it.index;
588 try it.file_reader.seekTo(offset);589 try it.file_reader.seekTo(offset);
589590
590 return takePhdr(&it.file_reader.interface, it.elf_header);591 return takePhdr(&it.file_reader.interface, it.elf_header);
...@@ -600,7 +601,8 @@ pub const ProgramHeaderBufferIterator = struct {...@@ -600,7 +601,8 @@ pub const ProgramHeaderBufferIterator = struct {
600 if (it.index >= it.elf_header.phnum) return null;601 if (it.index >= it.elf_header.phnum) return null;
601 defer it.index += 1;602 defer it.index += 1;
602603
603 const offset = it.elf_header.phoff + if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr) * it.index;604 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr);
605 const offset = it.elf_header.phoff + size * it.index;
604 var reader = std.Io.Reader.fixed(it.buf[offset..]);606 var reader = std.Io.Reader.fixed(it.buf[offset..]);
605607
606 return takePhdr(&reader, it.elf_header);608 return takePhdr(&reader, it.elf_header);
...@@ -635,7 +637,8 @@ pub const SectionHeaderIterator = struct {...@@ -635,7 +637,8 @@ pub const SectionHeaderIterator = struct {
635 if (it.index >= it.elf_header.shnum) return null;637 if (it.index >= it.elf_header.shnum) return null;
636 defer it.index += 1;638 defer it.index += 1;
637639
638 const offset = it.elf_header.shoff + if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr) * it.index;640 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr);
641 const offset = it.elf_header.shoff + size * it.index;
639 try it.file_reader.seekTo(offset);642 try it.file_reader.seekTo(offset);
640643
641 return takeShdr(&it.file_reader.interface, it.elf_header);644 return takeShdr(&it.file_reader.interface, it.elf_header);
...@@ -651,7 +654,8 @@ pub const SectionHeaderBufferIterator = struct {...@@ -651,7 +654,8 @@ pub const SectionHeaderBufferIterator = struct {
651 if (it.index >= it.elf_header.shnum) return null;654 if (it.index >= it.elf_header.shnum) return null;
652 defer it.index += 1;655 defer it.index += 1;
653656
654 const offset = it.elf_header.shoff + if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr) * it.index;657 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr);
658 const offset = it.elf_header.shoff + size * it.index;
655 var reader = std.Io.Reader.fixed(it.buf[offset..]);659 var reader = std.Io.Reader.fixed(it.buf[offset..]);
656660
657 return takeShdr(&reader, it.elf_header);661 return takeShdr(&reader, it.elf_header);