elfinspect

ELF and DWARF Binary Inspector
git clone anongit@rnpnr.xyz:elfinspect.git
Log | Files | Refs | Feed | README | LICENSE

Commit: 2a31e22e2f8bd60cce835f8c9961afdb9031ffef
Parent: 263c62422c88ad10f294ce6fc37f3e986ecdf46a
Author: Randy Palamar
Date:   Sun, 27 Apr 2025 21:58:45 -0600

don't depend on ELFEndianKind for str8_read_u* functions

Diffstat:
Melfinspect.c | 53+++++++++++++++++++++++++++--------------------------
1 file changed, 27 insertions(+), 26 deletions(-)

diff --git a/elfinspect.c b/elfinspect.c @@ -633,39 +633,39 @@ str8_reader_from_str8(str8 s) } function u16 -str8_read_u16(str8_reader *r, ELFEndianKind endian) +str8_read_u16(str8_reader *r, b32 big_endian) { u16 result = 0; r->errors |= r->index + 2 > r->count; if (!r->errors) { - if (endian == EEK_BIG) result = u16_host_from_be(r->data + r->index); - else result = u16_host_from_le(r->data + r->index); + if (big_endian) result = u16_host_from_be(r->data + r->index); + else result = u16_host_from_le(r->data + r->index); r->index += 2; } return result; } function u32 -str8_read_u32(str8_reader *r, ELFEndianKind endian) +str8_read_u32(str8_reader *r, b32 big_endian) { u32 result = 0; r->errors |= r->index + 4 > r->count; if (!r->errors) { - if (endian == EEK_BIG) result = u32_host_from_be(r->data + r->index); - else result = u32_host_from_le(r->data + r->index); + if (big_endian) result = u32_host_from_be(r->data + r->index); + else result = u32_host_from_le(r->data + r->index); r->index += 4; } return result; } function u64 -str8_read_u64(str8_reader *r, ELFEndianKind endian) +str8_read_u64(str8_reader *r, b32 big_endian) { u64 result = 0; r->errors |= r->index + 8 > r->count; if (!r->errors) { - if (endian == EEK_BIG) result = u32_host_from_be(r->data + r->index); - else result = u32_host_from_le(r->data + r->index); + if (big_endian) result = u32_host_from_be(r->data + r->index); + else result = u32_host_from_le(r->data + r->index); r->index += 8; } return result; @@ -741,7 +741,7 @@ print_elf_header(ELFHeader *eh) ELF_HEADER_MEMBERS #undef X - #define X(ctype, name) printf(#name ": %*s", max_name_len - sizeof(#name) + 1, ""); \ + #define X(ctype, name) printf(#name ": %*s", (s32)(max_name_len - sizeof(#name) + 1), ""); \ print_##ctype(eh->name); printf("\n"); ELF_HEADER_MEMBERS #undef X @@ -769,25 +769,26 @@ elf_header_from_file(ELFHeader *eh, str8 file) eh->abi_version = file.data[8]; str8_reader reader = str8_reader_from_str8(str8_chop(file, 16)); - eh->kind = str8_read_u16(&reader, eh->endianness); - eh->machine = str8_read_u16(&reader, eh->endianness); - eh->version = str8_read_u32(&reader, eh->endianness); + b32 big_endian = eh->endianness == EEK_BIG; + eh->kind = str8_read_u16(&reader, big_endian); + eh->machine = str8_read_u16(&reader, big_endian); + eh->version = str8_read_u32(&reader, big_endian); if (eh->format == EF_64) { - eh->entry_point_offset = str8_read_u64(&reader, eh->endianness); - eh->program_header_offset = str8_read_u64(&reader, eh->endianness); - eh->section_header_offset = str8_read_u64(&reader, eh->endianness); + eh->entry_point_offset = str8_read_u64(&reader, big_endian); + eh->program_header_offset = str8_read_u64(&reader, big_endian); + eh->section_header_offset = str8_read_u64(&reader, big_endian); } else { - eh->entry_point_offset = str8_read_u32(&reader, eh->endianness); - eh->program_header_offset = str8_read_u32(&reader, eh->endianness); - eh->section_header_offset = str8_read_u32(&reader, eh->endianness); + eh->entry_point_offset = str8_read_u32(&reader, big_endian); + eh->program_header_offset = str8_read_u32(&reader, big_endian); + eh->section_header_offset = str8_read_u32(&reader, big_endian); } - eh->flags = str8_read_u32(&reader, eh->endianness); - eh->elf_header_size = str8_read_u16(&reader, eh->endianness); - eh->program_header_entry_size = str8_read_u16(&reader, eh->endianness); - eh->program_header_count = str8_read_u16(&reader, eh->endianness); - eh->section_header_entry_size = str8_read_u16(&reader, eh->endianness); - eh->section_header_count = str8_read_u16(&reader, eh->endianness); - eh->section_header_name_table_index = str8_read_u16(&reader, eh->endianness); + eh->flags = str8_read_u32(&reader, big_endian); + eh->elf_header_size = str8_read_u16(&reader, big_endian); + eh->program_header_entry_size = str8_read_u16(&reader, big_endian); + eh->program_header_count = str8_read_u16(&reader, big_endian); + eh->section_header_entry_size = str8_read_u16(&reader, big_endian); + eh->section_header_count = str8_read_u16(&reader, big_endian); + eh->section_header_name_table_index = str8_read_u16(&reader, big_endian); result = !reader.errors && file.data[6] == eh->version; } return result;