Отсутствует ссылка на системные вызовы - PullRequest
0 голосов
/ 30 октября 2018

Я смотрел на это краткое введение в сборку в 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_ * должны быть заменены константой, специфичной для ядра, и я просто слишком занят для сборки, чтобы это распознать?

...