File: elf32-header.hex2

package info (click to toggle)
mes 0.24.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 6,908 kB
  • sloc: ansic: 24,104; lisp: 11,490; sh: 6,609; asm: 187; makefile: 36
file content (228 lines) | stat: -rw-r--r-- 7,986 bytes parent folder | download | duplicates (2)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
### Copyright (C) 2016 Jeremiah Orians
### Copyright (C) 2017,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
### Copyright (C) 2019 Danny Milosavljevic <dannym@scratchpost.org>
###
### This file is part of GNU Mes.
###
### GNU Mes is free software; you can redistribute it and/or modify it
### under the terms of the GNU General Public License as published by
### the Free Software Foundation; either version 3 of the License, or (at
### your option) any later version.
###
### GNU Mes is distributed in the hope that it will be useful, but
### WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.

### Commentary:

# elf32-header.hex2: 32 bit elf header in hex2, with text segment, data
# segment and symbol tables.

# stage0's hex2 format for arm
#    !<label>          1 byte relative
#    $<label>          2 byte address
#    @<label>          2 byte relative
#    ~<label>          3 byte relative
#    &<label>          4 byte address
#    %<label>          4 byte relative
#    local_<label>     function-local
#    string_<index>    string #<index>
#    ^                 align

### Code:

:ELF_base
7F 45 4C 46                    # e_ident[EI_MAG0-3] ELF's magic number

01                             # e_ident[EI_CLASS] Indicating 32 bit
01                             # e_ident[EI_DATA] Indicating little endianness
01                             # e_ident[EI_VERSION] Indicating original elf

00                             # e_ident[EI_OSABI] Set at 0 because none cares
00                             # e_ident[EI_ABIVERSION] See above

00 00 00 00 00 00 00           # e_ident[EI_PAD]

02 00                          # e_type Indicating Executable
28 00                          # e_machine Indicating 32bit arm
01 00 00 00                    # e_version Indicating original elf

&ELF_text                      # e_entry Address of the entry point
%ELF_program_headers>ELF_base  # e_phoff Address of program header table
%ELF_section_headers>ELF_base  # e_shoff Address of section header table

00 02 00 05                    # e_flags Indicating EABI5: EF_ARM_ABI_FLOAT_SOFT

34 00                          # e_ehsize Indicating our 52 Byte header

20 00                          # e_phentsize size of a program header table
01 00                          # e_phnum number of entries in program table

28 00                          # e_shentsize size of a section header table
07 00                          # e_shnum number of entries in section table

04 00                          # e_shstrndx index of the section names

# @34
00 00 00 00
00 00 00 00
00 00 00 00

# @40
:ELF_program_headers
:ELF_program_header__text
01 00 00 00                    # ph_type: PT-LOAD = 1
00 00 00 00                    # ph_offset
&ELF_base                      # ph_vaddr
&ELF_base                      # ph_physaddr
%ELF_end>ELF_base              # ph_filesz
%ELF_end>ELF_base              # ph_memsz
07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00                    # ph_align

# @60
#:ELF_program_header__data     # NOT USED
                               # FIXME: linux 4.17 does not allow this overlap
                               #    Uhuuh, elf segment at 0000000001000000
                               #    requested but the memory is mapped already
01 00 00 00                    # ph_type: PT-LOAD = 1
00 00 00 00                    # ph_offset
&ELF_base                      # ph_vaddr
&ELF_base                      # ph_physaddr
%ELF_end>ELF_base              # ph_filesz
%ELF_end>ELF_base              # ph_memsz
07 00 00 00                    # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00                    # ph_align

# @80
:ELF_comment
4d 45 53 00                     # MES
00 00 00 00                     # align
00 00 00 00
00 00 00 00

4d 45 53 00                     # MES
00 00 00 00                     # align
00 00 00 00
00 00 00 00

# @a0
:ELF_shstr
00
:ELF_shstr__text
2e 74 65 78 74 00               # .text
:ELF_shstr__data
2e 64 61 74 61 00               # .data
:ELF_shstr__comment
2e 63 6f 6d 6d 65 6e 74 00      # .comment
:ELF_shstr__shstr
2e 73 68 73 74 72 74 61 62 00   # .shstrtab
:ELF_shstr__sym
2e 73 79 6d 74 61 62 00         # .symtab
:ELF_shstr__str
2e 73 74 72 74 61 62 00         # .strtab

# @d0

:ELF_section_headers
00 00 00 00                     # sh_name
00 00 00 00                     # sh_type
00 00 00 00                     # sh_flags
00 00 00 00                     # sh_addr
00 00 00 00                     # sh_offset
00 00 00 00                     # sh_length
00 00 00 00                     # sh_link
00 00 00 00                     # sh_info
01 00 00 00                     # sh_1?
00 00 00 00                     # sh_entsize

## FIXME: M0 for calculations?
:ELF_section_header_text
%ELF_shstr__text>ELF_shstr      # sh_name
01 00 00 00                     # sh_type = SHT_PROGBITS = 1
06 00 00 00                     # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
&ELF_text                       # sh_addr
%ELF_text>ELF_base              # sh_offset
%ELF_data>ELF_text              # sh_length
00 00 00 00                     # sh_link
00 00 00 00                     # sh_info
01 00 00 00                     # sh_1?
00 00 00 00                     # sh_entsize

:ELF_section_header_data
%ELF_shstr__data>ELF_shstr     # sh_name
01 00 00 00                    # sh_type = SHT_PROGBITS = 1
03 00 00 00                    # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
&ELF_data                      # sh_addr
%ELF_data>ELF_base             # sh_offset
%ELF_sym>ELF_data              # sh_length
00 00 00 00                    # sh_link
00 00 00 00                    # sh_info
01 00 00 00                    # sh_1?
00 00 00 00                    # sh_entsize

:ELF_section_header_comment
%ELF_shstr__comment>ELF_shstr  # sh_name
01 00 00 00                    # sh_type = SHT_PROGBITS = 1
00 00 00 00                    # sh_flags
&ELF_comment                   # sh_addr
%ELF_comment>ELF_base          # sh_offset
%ELF_shstr>ELF_comment         # sh_length
00 00 00 00                    # sh_link
00 00 00 00                    # sh_info
01 00 00 00                    # sh_1?
00 00 00 00                    # sh_entsize

:ELF_section_header_shstr
%ELF_shstr__shstr>ELF_shstr    # sh_name
03 00 00 00                    # sh_type: str-sht-strtab
00 00 00 00                    # sh_flags
&ELF_shstr                     # sh_addr
%ELF_shstr>ELF_base            # sh_offset
%ELF_section_headers>ELF_shstr # sh_length
00 00 00 00                    # sh_link
00 00 00 00                    # sh_info
01 00 00 00                    # sh_1?
00 00 00 00                    # sh_entsize

:ELF_section_header_sym
%ELF_shstr__sym>ELF_shstr      # sh_name
02 00 00 00                    # sh_type: str-sht-symtab
00 00 00 00                    # sh_flags
&ELF_sym                       # sh_addr
%ELF_sym>ELF_base              # sh_offset
%ELF_end>ELF_sym               # sh_length
06 00 00 00                    # sh_link:6
00 00 00 00                    # sh_info
01 00 00 00                    # sh_1?
10 00 00 00                    # sh_entsize

:ELF_section_header_str
%ELF_shstr__str>ELF_shstr      # sh_name
03 00 00 00                    # sh_type: str-sht-strtab
00 00 00 00                    # sh_flags
&ELF_str                       # sh_addr
%ELF_str>ELF_base              # sh_offset
%ELF_sym>ELF_str               # sh_length
00 00 00 00                    # sh_link
00 00 00 00                    # sh_info
01 00 00 00                    # sh_1?
00 00 00 00                    # sh_entsize

# @1e8
00 00 00 00  # align
00 00 00 00

# @1f0

00 00 00 00  # align
00 00 00 00
00 00 00 00
00 00 00 00

# @200
:ELF_text