Выполнить программу C на уровне загрузчика через Ассемблер - PullRequest
0 голосов
/ 29 мая 2011

Я написал собственный (ОЧЕНЬ простой "Hello world!") Загрузчик в Ассемблере, и я хотел бы выполнить на нем программу на Си. Будет ли программа C работать или не работать из-за потерянного файла stdio.h? И как я мог связать программу C вместе с загрузчиком в один файл .bin для dd на флешке / CD?

1 Ответ

7 голосов
/ 29 мая 2011

Я не уверен, что вы подразумеваете под "lost stdio.h", но многие функции времени выполнения C, включая прототипы в stdio.h, реализованы с использованием системных вызовов.Без работающей ОС эти системные вызовы не будут работать.

Можно написать код C, который работает без ОС, например, большинство распространенных загрузчиков имеют лишь небольшое количество ассемблера и в основном кода C.Хитрость заключается в том, чтобы избежать использования библиотек времени выполнения.Альтернативами системным вызовам, например, для отображения, являются вызовы BIOS и аппаратный ввод / вывод.

Чтобы взять только один пример, в дополнение к динамическому распределению, fopen в режиме чтения требуются следующие операции низкого уровня:

  • Чтение блока данных из хранилища
  • Чтение метаданных файловой системы (часто это суперблок и корневой каталог)
  • Обработка метаданных файловой системы, чтобы узнать, гдесодержимое файла сохраняется
  • Создание объекта FILE, который содержит достаточно информации для fread и fgetc, чтобы найти данные на диске

У вас нет ОС дляВ любом случае, ваш код C должен будет реализовать драйвер (возможно, вызывающий BIOS) для чтения блоков, а также реализовать поведение других шагов.

...