С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2
1

Кто разбирается в ассемблере и строении ELF файлов? Что означают байты перед сегментом кода?

10.09.2017, 22:22. Показов 1417. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравия всем!

Пишу трансплайер своего ЯПа на fasm, на данный момент работаю с компиляцией под линукс (вернее, пока только разбираю, из чего состоит ELF файл).

Проблема такая: я не пойму, что означают байты, записанные прямо перед перед сегментом кода. Что это за секция? Что она делает?

Написал файл по этой интсрукии. Пытался почитать спецификацию ELF формата, всё равно ничего не понял. Не поможете?

Assembler
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
Непонятный мне отрезок байтов я полностью выделил комментариями с заголовком "ХЗЧО" перед кодом в самом низу.

Скрин также прилагается.
Миниатюры
Кто разбирается в ассемблере и строении ELF файлов? Что означают байты перед сегментом кода?  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2017, 22:22
Ответы с готовыми решениями:

Что означают определённые зарезервированные слова в ассемблере?
Доброй ночи. Буду признателен, если вы поможете мне разобраться с зарезервированными словами в...

Что означают числа перед динамическим массивом?
int *ptr_int = new int; for (int i=-4; i<=-1; i++) cout << *(ptr_int + i) << " "; И...

Милые люди, кто разбирается с блок-схемами для готового кода на паскале
Собственно, вот сам код. Буду очень признателен program tabfun; uses crt; const min = 0; max...

Что означают знаки # и $ перед числами в этом коде?
Что означают знаки # и $ перед числами в этом коде?

1
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 373
Записей в блоге: 2
10.09.2017, 22:33  [ТС] 2
Уже час сижу, только сейчас понял. Это описание сегмента данных.
0
10.09.2017, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2017, 22:33
Помогаю со студенческими работами здесь

Поясните, что означают строки кода:
Поясните, что означают строки кода: shuffle_points = for i in range(n + 1)]...

Объяснить, что означают строки кода
float res = 0; res += f(a); res += f(b); res += f((a + b)/2); res /=3; объясните...

Что означают цифры в приведенной строке кода
подскажите пожалуйста, что в этих строках значат цифры mes2 db 13,10,'Hi success db...

Что означают строки кода SetStyle(ControlStyles.Zzz)?
Здравствуйте, прокомментируйте пожалуйста что означают эти строки кода) P.S.(в MSDN нет четкого...

Что означают кавычки рядом с символом в строке кода
вот фрагмент из кода: if(Convert::ToString(dataGridView2->Rows->Cells->Value) == L"") return i;...

Что означают синие кружочки слева от кода в редакторе Delphi?
Добрый день! Подскажите пожалуйста, что означают синие кружочки слева от кода в редакторе Delphi?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru