commit - e008882e1590c00a8d1686e19bef3402ccddf393
commit + 0d5c96955f59b6fb70627e1304cf72616bbf6a15
blob - 54a8d14bd20e6545bbde566fcfe4c31836734882
blob + c453429fbbeed412d8f5c7f7c3ba524d005eea5f
--- capsule/atom.xml
+++ capsule/atom.xml
<name>continue</name>
<email>continue@to.any-key.press</email>
</author>
- <updated>2024-11-08T22:01:23.392061+00:00</updated>
+ <updated>2024-11-11T13:37:14.122287+00:00</updated>
<entry>
<id>gemini://any-key.press/esoteric/gnu_as_hello_world.gmi</id>
<link href="gemini://any-key.press/esoteric/gnu_as_hello_world.gmi" rel="alternate"/>
<title>Динамически скомпонованный "Hello, world!" на GNU ассемблере x86_64 (amd64)</title>
- <updated>2024-11-08T22:01:23.392061+00:00</updated>
+ <updated>2024-11-11T13:37:14.122287+00:00</updated>
</entry>
<entry>
<id>gemini://any-key.press/readed/Compost_Ferment.gmi</id>
blob - 5ec511582dc21c5d0a141b551af774adcfecb562
blob + fa382a2a320de0cf405d98cf848b7da12a465248
--- capsule/esoteric/gnu_as_hello_world.gmi
+++ capsule/esoteric/gnu_as_hello_world.gmi
```
Без /usr/lib/crtbegin.o результирующий ELF файл hello собирается, но не запускается.
+
+#### Правильный вариант для OpenBSD (добавлено 2024-11-11)
+
+После публикации этой заметки со мной связался обитатель домика на дереве:
+
+=> gemini://domik.dubro.ru Домик на дереве
+
+Искренне спасибо тебе, неравнодушный человек! Оказалось, что на OpenBSD существует обязательная секция `.note.openbsd.ident`. А её отсутствие и приводит к тому, что собранный ELF файл не запускается.
+
+Поэтому правильный листинг на GNU'том ассемблере для OpenBSD выглядит так:
+
+```
+ .global _my_start
+ .extern write, exit
+
+ .section ".note.openbsd.ident", "a"
+ .p2align 2
+ .long 8,4,1
+ .ascii "OpenBSD\0"
+ .long 0
+
+ .section .rodata
+message:
+ .ascii "Hello, world!\n"
+
+ .section .text
+_my_start:
+ mov $1, %rdi /* STDOUT */
+ lea message(%rip), %rsi
+ mov $14, %rdx
+ call write
+
+ xor %rdi, %rdi
+ call exit
+```
+
+А собирается такой листинг (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
+```
+
+По сравнению со сборкой с 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)