Я смотрел на это краткое введение в сборку в Linux:
http://asm.sourceforge.net/articles/linasm.html#Compiling
Я попытался скомпилировать там программу hello world:
.data
hw:
.string "hello world\n"
.text
.globl _start
_start:
movl $SYS_write,%eax
movl $1,%ebx
movl $hw,%ecx
movl $12,%edx
int $0x80
movl $SYS_exit,%eax
xorl %ebx,%ebx
int $0x80
$ gcc -c hello.s
$ ld -s -o hello hello.o
ld: hello.o: in function `_start':
(.text+0x1): undefined reference to `SYS_write'
ld: (.text+0x17): undefined reference to `SYS_exit'
Итак, я полагаю, что мне нужно сообщить компоновщику, где найти эти символы. (Я также знаю, что могу искать константы где-нибудь в / usr / include и затем включать их как литералы).
Полагаю, при правильном вызове эта программа скомпилируется, что мне не хватает? Или это просто тот случай, когда этот автор пишет на «мета-языке», где эти элементы $ SYS_ * должны быть заменены константой, специфичной для ядра, и я просто слишком занят для сборки, чтобы это распознать?