commit - 0d5c96955f59b6fb70627e1304cf72616bbf6a15
commit + d16df18ad08ef14d266d6f205f87f7783845916f
blob - fa382a2a320de0cf405d98cf848b7da12a465248
blob + 3dd27e9235eed6f88fb86e6f656762362d5c03f7
--- capsule/esoteric/gnu_as_hello_world.gmi
+++ capsule/esoteric/gnu_as_hello_world.gmi
А с другой я никогда "руками" (ну точнее с помощью ld) не собирал работоспособные динамически скомпонованные ELF'ы. Оказалось это тот ещё геморрой с указанием crt и интерпретатора-компоновщика на разных платформах: Debian, Alpine и OpenBSD. Плюнул и для кросс-платформенной сборки использую cc (содержимое hello.s приведено в ассемблерном листинге выше):
```
-$ as -o hello.o hello.s && cc -l c -o hello hello.o
+$ as -o hello.o hello.s
+$ cc -l c -o hello hello.o
```
## Платформозависимый путь (добавлено 2024-11-09)
* Debian
```
-$ as -o hello.o hello.s && ld -e _my_start -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello -lc hello.o
```
* Alpine
```
-$ as -o hello.o hello.s && ld -e _my_start -dynamic-linker /lib/ld-musl-x86_64.so.1 -o hello -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /lib/ld-musl-x86_64.so.1 -o hello -lc hello.o
```
### OpenBSD
Сходу не смог полностью избавиться от crt:
```
-$ as -o hello.o hello.s && ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello /usr/lib/crtbegin.o -L/usr/lib -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello /usr/lib/crtbegin.o -L/usr/lib -lc hello.o
```
Без /usr/lib/crtbegin.o результирующий ELF файл hello собирается, но не запускается.
А собирается такой листинг (hello.s) в исполняемый ELF hello на OpenBSD следующей командой:
```
-as -o hello.o hello.s && ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello -L/usr/lib -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello -L/usr/lib -lc hello.o
```
По сравнению со сборкой с crtbegin.o ELF "похудел" более чем на два килобайта.
Ссылки по теме:
=> https://astharoshe.net/2020-06-28-Hello_assembler.html Hello assembler!
=> https://nechtan.io/articles/openbsd_assembly/ Assembly language on OpenBSD (amd64 && arm64)
+
+C исходном коде OpenBSD:
+=> https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/csu/os-note-elf.h?rev=1.5 os-note-elf.h
+=> https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/csu/crtbegin.c?rev=1.26 crtbegin.c (включает os-note-elf.h)