Это мой код уровня сборки...
section .text
global _start
_start: mov eax, 4
mov ebx, 1
mov ecx, mesg
mov edx, size
int 0x80
exit: mov eax, 1
int 0x80
section .data
mesg db 'KingKong',0xa
size equ $-mesg
Вывод:
[email protected]:~/Arena# nasm -f elf a.asm -o a.o
[email protected]:~/Arena# ld -o out a.o
[email protected]:~/Arena# ./out
KingKong
Мой вопрос Что такое глобальный _start, используемый для? Я попробовал удачу с Mr.Google, и я обнаружил, что он используется, чтобы сообщить начальную точку моей программы. Почему мы не можем иметь _start
, чтобы указать, где начинается программа, как приведенная ниже, которая порождает
предупреждение на экране
section .text
_start: mov eax, 4
mov ebx, 1
mov ecx, mesg
mov edx, size
int 0x80
exit: mov eax, 1
int 0x80
section .data
mesg db 'KingKong',0xa
size equ $-mesg
[email protected]:~/Arena# nasm -f elf a.asm
[email protected]:~/Arena# ld -e _start -o out a.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080
[email protected]:~/Arena# ld -o out a.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080