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
| format binary
use32
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Заголовок файла ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
e_ident:
ei_magic db 0x7F,0x45,0x4C,0x46 ; ¦ELF
ei_class db 1 ; Класс “машины”, для которой предназначен файл
;VALUE MEANING
;0 none
;1 32-х битная машина;
;2 64-х битная машина.
ei_data db 1 ; Порядок следования байтов в файле (Little/Big Enidan)
;VALUE MEANING
;0
;1 Байты следуют в порядке Little-endian;
;2 Байты располагаются в порядке Big-endian.
ei_version db 1 ; ХЗЧО
;VALUE MEANING
;0 Correct
;1 Incorrect
ei_osabi db 3 ; Операционная система Application Binary Interface
;VALUE MEANING
;0 UNIX System V ABI
;1 HP-UX operating system ABI
;2 Nx operating system ABI
;3 3GNU/Linux operating system ABI
;4 GNU/Hurd operating system ABI
;5 86Open Common IA32 ABI
;6 Solaris operating system ABI
;7 Monterey project ABI
;8 IRIX operating system ABI
;9 Fx operating system ABI
;10 TRU64 UNIX operating system ABI
;11 Novell Modesto
;12 OpenBSD
;13 Open VMS
;14 HP Non-Stop Kernel
;97 ARM architecture ABI
;255 Standalone (embedded) ABI
ei_abiversion db 0 ; Версия Application Binary Interface
resreved db 0x00,0x00,0x00,0x00,0x00,0x00,0x00
e_type dw 2 ; Тип файла
;VALUE MEANING
;0 Неизвестно
;1 Объектный файл
;2 Исполняемый файл
;3 Разделяемая библиотека
;4 Core-фай
;OXFE00 зависит от операционной системы
;0XFEFF зависит от операционной системы
;0xFF00 зависит от процессора
;0xFFFF зависит от процессора
e_machine dw 3 ; Тип процессора
;VALUE MEANING
;0
;1 AT&T WE 32100
;2 SPARC
;3 Intel 80386
;4 Motorola 68000
;5 Motorola 88000
;6 Intel i486
;7 Intel 80860
;8 MIPS I Architecture
;9 IBM System/370 Processor
;10 MIPS RS3000 Little-endian
;15 Hewlett-Packard PA-RISC
;17 Fujitsu VPP500
;18 SPARC v8plus
;19 Intel 80960
;20 PowerPC 32-bit
;21 PowerPC 64-bit
;22 IBM System / 390
;36 NEC V800
;37 Fujitsu FR20
;38 TRW RH-32
;39 Motorola RCE
;40 Advanced RISC Machines ARM
;41 Digital Alpha (standard value)
;42 Hitachi SH
;43 SPARC Version 9
;44 Siemens Tricore embedded processor
;45 Argonaut RISC Core, Argonaut Technologies Inc
;46 Hitachi H8/300
;47 Hitachi H8/300H
;48 Hitachi H8S
;49 Hitachi H8/500
;50 Intel IA-64 Processo
;51 Stanford MIPS-X
;52 Motorola ColdFire
;53 Motorola M68HC12
;54 Fujitsu MMA
;55 Siemens PCP
;56 Sony nCPU embedded RISC processor
;57 Denso NDR1 microprocessor
;58 Motorola Star*Core processor
;59 Toyota ME16 processor
;60 STMicroelectronics ST100 processor
;61 Advanced Logic Corp. TinyJ processor
;62 Advanced Micro Devices x86 – 64
e_version dd 1 ; Версия файла
e_entry dd 0x8048074 ; ВИРТУАЛЬНЫЙ АДРЕС ТОЧКИ ВХОДА В ПРОГРАММУ
e_phoff dd 0x34 ; Смещение от начала файла до начала таблицы заголовков программы
e_shoff dd 0 ; Смещение от начала файла до начала таблицы заголовков секций
e_flags dd 0 ; Дополнительные процессорно-специфичные флаги, в настоящее время значение данного поля должно всегда быть 0
e_ehsize dw 52 ; Размер заголовка ELF-файла, его значение должно быть равно 52 (sizeof(Elf32_Ehdr))
e_phentsize dw 32 ; Размеры одной записи в таблице заголовков программы, его значение должно быть 32 (sizeof(Elf32_Phdr)) или 0, если таблица заголовков программы пуста
e_phnum dw 2 ; Количество записей в таблице заголовков программы
e_shentsize dw 40 ; Размер одной записи в таблице заголовков секций, его значение должно быть равно 40 (sizeof(Elf32_Shdr)) или 0, если таблица заголовков секций пуста.
e_shnum dw 0 ; Количество записей в таблице заголовков секций
e_shstrndx dw 0 ; Индекс заголовка секции, которая хранит имена всех секций
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Таблица заголовков секций ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
p_type dd 1 ; Тип заголовка
;VALUE MEANING
;0 Обозначает не используемую запись
;1 Сегмент программы, загружаемый в память
;2 Информация для динамического связывания
;3 Загрузчик программ
;4 Дополнительная информация
;6 Информация о самой таблице заголовков программы
;7 Thread-local storage
p_offset dd 116 ; Смещение от начала файла, по которому располагается данный сегмент
p_vaddr dd 0x8048074 ; Виртуальный адрес начала сегмента в памяти
p_paddr dd 0x8048074 ; ХЗЧО
p_filesz dd 31 ; Размер сегмента в файле
p_memsz dd 31 ; Размер сегмента в памяти
p_flags dd 5 ; Флаги доступа к сегменту в памяти (могут объединяться с помощью побитового "или")
;VALUE MEANING
;1 Сегмент доступен на выполнение
;2 Сегмент доступен на запись
;4 Сегмент доступен на чтение
p_align dd 4096 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;ХЗЧО;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dd 1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dd 147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dd 0x8049093;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dd 0x8049093;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dd 0x0D,0x0D,0x06,0x1000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Код ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov eax,4
mov ebx,1
mov ecx,msg + 0x08049000
mov edx,msg_size
int 0x80
mov eax,1
xor ebx,ebx
int 0x80
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Данные ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msg db "Hello world!",0x0A
msg_size = $-msg |