mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
cleanup pass over elf parsing; base addr calculation?
This commit is contained in:
+33
-17
@@ -5,32 +5,48 @@
|
||||
#define ELF_PARSE_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Parsed Structure Types
|
||||
|
||||
typedef struct ELF_BinInfo
|
||||
typedef struct ELF_Shdr64Array ELF_Shdr64Array;
|
||||
struct ELF_Shdr64Array
|
||||
{
|
||||
ELF_Shdr64 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
typedef struct ELF_Phdr64Array ELF_Phdr64Array;
|
||||
struct ELF_Phdr64Array
|
||||
{
|
||||
ELF_Phdr64 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
typedef struct ELF_Bin ELF_Bin;
|
||||
struct ELF_Bin
|
||||
{
|
||||
ELF_Hdr64 hdr;
|
||||
Rng1U64 sh_name_range;
|
||||
} ELF_BinInfo;
|
||||
Rng1U64 sh_name_range;
|
||||
ELF_Shdr64Array shdrs;
|
||||
ELF_Phdr64Array phdrs;
|
||||
};
|
||||
|
||||
typedef struct ELF_Shdr64Array
|
||||
{
|
||||
U64 count;
|
||||
ELF_Shdr64 *v;
|
||||
} ELF_Shdr64Array;
|
||||
|
||||
typedef struct ELF_GnuDebugLink
|
||||
typedef struct ELF_GnuDebugLink ELF_GnuDebugLink;
|
||||
struct ELF_GnuDebugLink
|
||||
{
|
||||
String8 path;
|
||||
U32 checksum;
|
||||
} ELF_GnuDebugLink;
|
||||
U32 checksum;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Parsing Functions
|
||||
|
||||
internal B32 elf_check_magic(String8 data);
|
||||
internal ELF_BinInfo elf_bin_from_data(String8 data);
|
||||
//- rjf: top-level binary parsing
|
||||
internal ELF_Bin elf_bin_from_data(Arena *arena, String8 data);
|
||||
|
||||
internal ELF_Shdr64Array elf_shdr64_array_from_bin(Arena *arena, String8 raw_data, ELF_Hdr64 *hdr);
|
||||
internal String8 elf_name_from_shdr64(String8 raw_data, ELF_Hdr64 *hdr, Rng1U64 sh_name_range, ELF_Shdr64 *shdr);
|
||||
internal U64 elf_base_addr_from_bin(ELF_Hdr64 *hdr);
|
||||
//- rjf: extra bin info extraction
|
||||
internal B32 elf_is_dwarf_present_from_bin(String8 data, ELF_Bin *bin);
|
||||
internal String8 elf_name_from_shdr64(String8 raw_data, ELF_Bin *bin, ELF_Shdr64 *shdr);
|
||||
internal U64 elf_base_addr_from_bin(ELF_Bin *bin);
|
||||
internal ELF_GnuDebugLink elf_gnu_debug_link_from_bin(String8 raw_data, ELF_Bin *bin);
|
||||
|
||||
#endif // ELF_PARSE_H
|
||||
|
||||
Reference in New Issue
Block a user