summaryrefslogtreecommitdiff
path: root/spec/elf.fspec
blob: e6059c7e0b838040becd29a43a7a38bcff45f655 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1 + 5 + 2 * 5 / 2;

enum foo {
   foo: 0x1;
   bar: 0x2;
   eaf: 0x3;
   eaf: 0xDEADBEEF;
   bar;
};

struct elf64 {
   e_entry: u64 hex;
   e_phoff: u64;
   e_shoff: u64;
};

struct elf {
   ei_magic: u8[4] | matches('\x7fELF') str;
   ei_class: u8 hex; // word size
   ei_data: u8 hex; // endianess
   ei_version: u8;
   ei_osabi: u8;
   ei_abi_version: u8;
   padding: u8[7] nul;
   e_type: u16 hex;
   e_machine: u16 hex;
   e_version: u32;
   elf64: struct elf64; // fspec needs union to parse ei_class != 2 type
   e_flags: u32 hex;
   e_ehsz: u16;
   e_phentsize: u16;
   e_phnum: u16;
   e_shentsize: u16;
   e_shnum: u16;
   e_shstrndx: u16;
};