Я только что понял это, но вместо того, чтобы разделить мой новый вопрос («почему?») На другой вопрос, я считаю его лучшим, если решение этой проблемы и объяснение должно храниться на одной странице.«Незаконная инструкция» по базовой программе сборки - даже не привет мир - зачем нужна связь?
Я пишу базовую программу сборки, чтобы начать и сразу же прекратить использование прерывания ядра в int 0x80
. Мой текущий код просто следующим образом:
/* Simple exit via kern-interrupt */
.globl start
start:
pushl $0x0
movl $0x1, %eax
subl $4, %esp
int $0x80
в сборе с
as -arch i386 <file>.s
при выполнении я получаю сообщение об ошибке в одну строку:
Illegal instruction
Пришло Bizzare, даже комментируя все Неподвижные результаты в Illegal instruction
, несмотря на отсутствие инструкций. Я пропустил шаг linking
, несмотря на отсутствие других файлов для ссылки? Да я
EDIT: Позвольте мне перефразировать мой вопрос, зачем вам нужно связать, когда нет библиотеки или что-нибудь связать?
какая разница, если это всего лишь объектный файл? – Hawken
@Hawken, вы не можете _run_ объектного файла больше, чем вы можете запустить или связать исходный файл или скомпилировать индекс базы данных :-) Объектный файл имеет форму, которая готова к подключению к исполняемому файлу, но сама не является исполняемый файл. – paxdiablo
Так что же таинственный код, добавленный компоновщиком? Я вижу почти двойной размер файла в 'hexdump'. Первые двенадцать байтов идентичны. – Hawken