blob: 2776c6538b5d113b73d6fcd750f0710b6cff4b51 (
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
37
38
39
40
41
42
43
44
45
46
47
|
struct elf {
struct {
u8 ei_magic[4] | matches('\x7fELF') str;
enum {
CLASS_32 = 1,
CLASS_64
} u8 ei_class hex;
enum {
ENDIANESS_LE = 1,
ENDIANESS_BE
} u8 ei_data hex;
u8 ei_version;
u8 ei_osabi;
u8 ei_abi_version;
u8 padding[7] nul;
} header;
struct body {
u16 e_type hex;
u16 e_machine hex;
u32 e_version;
select (header.ei_class) {
header.CLASS_32) struct {
u32 e_entry hex;
u32 e_phoff;
u32 e_shoff;
} elf32;
header.CLASS_64) struct {
u64 e_entry hex;
u64 e_phoff;
u64 e_shoff;
} elf64;
} arch;
u32 e_flags hex;
u16 e_ehsz;
u16 e_phentsize;
u16 e_phnum;
u16 e_shentsize;
u16 e_shnum;
u16 e_shstrndx;
};
select (header.ei_class) {
1) struct body le | endianess('le');
2) struct body be | endianess('be');
} body;
};
|