-6.9 C
Москва
Вторник, 14 января, 2025

Энтузиаст разобрал, насколько сложен «Hello,  World!» на самом деле — Tproger

Разбор программы «Hello, World!» показал скрытую сложность: ELF-структуры, системные вызовы и роль компилятора раскрывают весь процесс

Энтузиаст разобрал, насколько сложной на самом деле является программа «Hello, World!».

В своём материале он показал, что даже этот простой пример скрывает множество технических деталей, которые обычно остаются за кадром.

Так, при компиляции, она превращается в исполняемый файл, полный символов и зависимостей.

Например, команда objdump -x hello показывает, что даже базовая программа содержит множество секций, таблиц символов и метаданных:

			$ objdump -x hello  Sections:   00 .text     00000018  000000000000  CONTENTS, ALLOC, LOAD, CODE   01 .data     00000010  000000000020  CONTENTS, ALLOC, LOAD, DATA   ... 		

Попытка минимализма

Чтобы понять работу программы на низком уровне, автор предлагает создать минималистичный исполняемый файл без стандартной библиотеки C.

Это требует непосредственного написания системных вызовов Linux. Например, вызов write можно реализовать напрямую:

			section .data     message db 'Hello, World!', 0Ah     len equ $ - message  section .text global _start  _start:     mov rax, 1        ; syscall: write     mov rdi, 1        ; stdout     mov rsi, message  ; message address     mov rdx, len      ; message length     syscall           ; invoke the syscall      mov rax, 60       ; syscall: exit     xor rdi, rdi      ; return 0     syscall 		

Разбор структуры ELF-файла

Статья подробно объясняет структуру ELF (Executable and Linkable Format) — стандартного формата для Unix-систем.

Читать также:
Samsung на следующей неделе покажет ноутбук с твердотельным ультразвуковым кулером

Заголовки ELF, секции и сегменты взаимодействуют друг с другом для создания исполняемого файла.

10 плюсов Linux перед Windows, с которыми не поспоришьtproger.ru

Например, заголовок ELF содержит ссылки на таблицы символов и разделы, такие как .text (код программы) и .data (данные).

Линкер и оптимизация

Автор также разбирает использование кастомных скриптов линковки для создания минималистичных исполняемых файлов.

Например, с помощью линкера ld можно исключить ненужные зависимости и сократить размер программы.

			ld -Ttext 0x400000 -o hello hello.o 		

Выводы

Как оказалось, даже простая программа «Hello, World!» скрывает сложность, связанную с взаимодействием компилятора, линкера и операционной системы.

Материал автора в очередной раз подчеркнул важность понимания базовых элементов программного обеспечения и их влияния на процесс выполнения программ.

НОВОЕ НА САЙТЕ