Где вы загружаете сегмент .text в файл a.out для - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь использовать формат a.out для моего загрузчика и вспоминаю, что мог сделать это в прошлом. ELF не очень хорошо поддерживает 16 бит и выдает много неопределенного поведения, когда связано с кодом C. Я использую BCC / dev86 для компиляции кода. Проблема, с которой я сталкиваюсь, заключается в том, чтобы найти любую документацию о том, где в памяти вы должны поместить текстовый сегмент в a.out-файл 8086 / real mode в зависимости от позиции. Это в заголовке, где находится точка входа, но я не могу найти какую-либо документацию по загрузке a.out. Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 13 апреля 2020

Обычно первая часть загрузчика (16-битная часть) записывается в сборке. Это происходит главным образом потому, что загрузчик должен выполнять задачи такого низкого уровня, что использование c на самом деле не стоит. Как только загрузчик переходит в защищенный или длинный режим, он может использовать c. Другая причина, по которой использование c является плохой идеей для загрузчика, состоит в том, что задача загрузчика обычно состоит в том, чтобы привести систему в состояние, в котором ядро ​​может начать выполнение. На x86 это обычно означает переход в защищенный режим. Это подразумевает связывание 16-битного кода c с 32-битным кодом c (и, возможно, даже с 64-битным кодом). Это действительно трудно сделать.

Если вы действительно думаете, что хотите продолжить то, что делаете: файл a.out - это просто файл эльфа. В загрузчиках процессор начинает выполнение с адреса 0x7c00. Поэтому я полагаю, вам следует связать секцию .text с 0x7c00.

Еще один комментарий, который я хотел бы сделать, заключается в том, что на современном процессоре вам даже не нужно сильно беспокоиться о том, как получить разделы из файла a.out. Обычно UEFI может напрямую загружать файлы elf. И Кему тоже может.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...