0daa0991769eb9573199cedce999001228bd97de
[mes.git] / stage0 / elf32-header-exit-42.hex2
1 ### Copyright (C) 2016 Jeremiah Orians
2 ### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
3 ### This file is part of stage0.
4 ###
5 ### stage0 is free software: you an redistribute it and/or modify
6 ### it under the terms of the GNU General Public License as published by
7 ### the Free Software Foundation, either version 3 of the License, or
8 ### (at your option) any later version.
9 ###
10 ### stage0 is distributed in the hope that it will be useful,
11 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 ### GNU General Public License for more details.
14 ###
15 ### You should have received a copy of the GNU General Public License
16 ### along with stage0.  If not, see <http://www.gnu.org/licenses/>.
17
18 ### stage0's hex2 format for x86
19 ###    !<label>          1 byte relative
20 ###    $<label>          2 byte address
21 ###    @<label>          2 byte relative
22 ###    &<label>          4 byte address
23 ###    %<label>          4 byte relative
24 ###    local_<label>     function-local
25 ###    string_<index>    string #<index>
26
27 ### elf32-header-exit-42.hex2: 32 bit elf header in hex2 for `exit 42'
28
29 :ELF_base
30 ## ELF Header
31 7F 45 4C 46           # e_ident[EI_MAG0-3] ELF's magic number
32
33 01                    # e_ident[EI_CLASS] Indicating 32 bit
34 01                    # e_ident[EI_DATA] Indicating little endianness
35 01                    # e_ident[EI_VERSION] Indicating original elf
36
37 00                    # e_ident[EI_OSABI] Set at 0 because none cares
38 00                    # e_ident[EI_ABIVERSION] See above
39
40 00 00 00 00 00 00 00  # e_ident[EI_PAD]
41
42 02 00                 # e_type Indicating Executable
43 03 00                 # e_machine Indicating AMD64
44 01 00 00 00           # e_version Indicating original elf
45
46 &ELF_text             # e_entry Address of the entry point
47     #&ELF_program_headers - &ELF_base           # e_phoff Address of program header table
48 40 00 00 00           # e_phoff Address of program header table
49     #&ELF_section_headers - &ELF_base           # e_phoff Address of program header table
50 d0 00 00 00           # e_shoff Address of section header table
51
52 00 00 00 00           # e_flags
53
54 34 00                 # e_ehsize Indicating our 52 Byte header
55
56 20 00                 # e_phentsize size of a program header table
57 02 00                 # e_phnum number of entries in program table
58
59 28 00                 # e_shentsize size of a section header table
60 07 00                 # e_shnum number of entries in section table
61
62 04 00                 # e_shstrndx index of the section names
63
64 # @34
65 00 00 00 00
66 00 00 00 00
67 00 00 00 00
68
69 # @40
70 :ELF_program_header__text
71 01 00 00 00 # ph_type: PT-LOAD = 1
72 00 00 00 00 # ph_offset
73 &ELF_base   # ph_vaddr
74 &ELF_base   # ph_physaddr
75 00 03 00 00 # ph_filesz
76 00 03 00 00 # ph_memsz
77 07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
78 01 00 00 00 # ph_align
79
80 # @60
81 :ELF_program_header__data
82 01 00 00 00 # ph_type: PT-LOAD = 1
83 00 00 00 00 # ph_offset
84 &ELF_base   # ph_vaddr
85 &ELF_base   # ph_physaddr
86 ff ff 00 00 # ph_filesz
87 ff ff 00 00 # ph_memsz
88 07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
89 01 00 00 00 # ph_align
90
91 # @80
92 :ELF_comment
93 4d 45 53 00  # MES
94 00 00 00 00
95 00 00 00 00  # align
96 00 00 00 00  # align
97
98 4d 45 53 00  # MES
99 00 00 00 00
100 00 00 00 00  # align
101 00 00 00 00  # align
102
103 # @a0
104 :ELF_shstr
105 00
106 :ELF_shstr__text
107 2e 74 65 78 74 00              # .text
108 :ELF_shstr__data
109 2e 64 61 74 61 00              # .data
110 :ELF_shstr__comment
111 2e 63 6f 6d 6d 65 6e 74 00     # .comment
112 :ELF_shstr__shstrtab
113 2e 73 68 73 74 72 74 61 62 00  # .shstrtab
114 :ELF_shstr__symtab
115 2e 73 79 6d 74 61 62 00        # .symtab
116 :ELF_shstr__strtab
117 2e 73 74 72 74 61 62 00        # .strtab
118
119 # @d0
120
121 :ELF_sections_headers
122 00 00 00 00                    # sh_name
123 00 00 00 00                    # sh_type
124 00 00 00 00                    # sh_flags
125 00 00 00 00                    # sh_addr
126 00 00 00 00                    # sh_offset
127 00 00 00 00                    # sh_length
128 00 00 00 00                    # sh_link
129 00 00 00 00                    # sh_info
130 01 00 00 00                    # sh_1?
131 00 00 00 00                    # sh_entsize
132
133 ## FIXME: M0 for calculations?
134 :ELF_section_header_text
135     #@ELF_shstr__text - @ELF_shstr  # sh_name
136 01 00 00 00                    # sh_name
137 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
138 06 00 00 00                    # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
139 #&ELF_base                      # sh_addr
140 &ELF_text                      # sh_addr
141     #@ELF_text - @ELF_base     # sh_addr
142 00 02 00 00                    # sh_offset
143     #@ELF_data - @ELF_text  # sh_length
144 20 00 00 00                    # sh_length
145 00 00 00 00                    # sh_link
146 00 00 00 00                    # sh_info
147 01 00 00 00                    # sh_1?
148 00 00 00 00                    # sh_entsize
149
150 :ELF_section_header_data
151     #@ELF_shstr__data - @ELF_shstr  # sh_name
152 07 00 00 00                    # sh_name
153 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
154 03 00 00 00                    # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
155 #&ELF_base                      # sh_addr
156 &ELF_data                      # sh_addr
157     #@ELF_data - @ELF_base     # sh_addr
158 20 02 00 00                    # sh_offset
159     #@ELF_comment - @ELF_data  # sh_length
160 10 00 00 00                    # sh_length
161 00 00 00 00                    # sh_link
162 00 00 00 00                    # sh_info
163 01 00 00 00                    # sh_1?
164 00 00 00 00                    # sh_entsize
165
166 :ELF_section_header_comment
167     #@ELF_shstr__comment - @ELF_shstr  # sh_name
168 0d 00 00 00                    # sh_name
169 01 00 00 00                    # sh_type = SHT_PROGBITS = 1
170 00 00 00 00                    # sh_flags
171 #&ELF_base                      # sh_addr
172 &ELF_comment                   # sh_addr
173 80 00 00 00                    # sh_offset
174 00 00 00 00                    # sh_length
175 00 00 00 00                    # sh_link
176 00 00 00 00                    # sh_info
177 01 00 00 00                    # sh_1?
178 00 00 00 00                    # sh_entsize
179
180 :ELF_section_header_shstr
181     #@ELF_shstr__shstr - @ELF_shstr  # sh_name
182 16 00 00 00                    # sh_name
183 03 00 00 00                    # sh_type: str-sht-strtab
184 00 00 00 00                    # sh_flags
185 #&ELF_base                      # sh_addr
186 &ELF_shstr                     # sh_addr
187 a0 00 00 00                    # sh_offset
188 30 00 00 00                    # sh_length
189 00 00 00 00                    # sh_link
190 00 00 00 00                    # sh_info
191 01 00 00 00                    # sh_1?
192 00 00 00 00                    # sh_entsize
193
194 :ELF_section_header_sym
195     #@ELF_shstr__sym - @ELF_shstr  # sh_name
196 20 00 00 00                    # sh_name
197 02 00 00 00                    # sh_type: str-sht-symtab
198 00 00 00 00                    # sh_flags
199 #&ELF_base                      # sh_addr
200 &ELF_sym                       # sh_addr
201 40 02 00 00                    # sh_offset
202 30 00 00 00                    # sh_length
203 06 00 00 00                    # sh_link:6
204 00 00 00 00                    # sh_info
205 01 00 00 00                    # sh_1?
206 10 00 00 00                    # sh_entsize
207
208 :ELF_section_header_str
209     #@ELF_shstr__str - @ELF_shstr  # sh_name
210 28 00 00 00                    # sh_name
211 03 00 00 00                    # sh_type: str-sht-strtab
212 00 00 00 00                    # sh_flags
213 #&ELF_base                      # sh_addr
214 &ELF_str                       # sh_addr
215 30 02 00 00                    # sh_offset
216 10 00 00 00                    # sh_length
217 00 00 00 00                    # sh_link
218 00 00 00 00                    # sh_info
219 01 00 00 00                    # sh_1?
220 00 00 00 00                    # sh_entsize
221
222 # @1e8
223 00 00 00 00  # align
224 00 00 00 00
225
226 # @1f0
227
228 00 00 00 00  # align
229 00 00 00 00
230 00 00 00 00
231 00 00 00 00
232
233 # @200