Как скомпилировать программу C в допустимый формат ELF (или формат RAW), чтобы ее можно было выполнить непосредственно из ОЗУ без какой-либо ОС ? Предположим, что существует загрузчик , который способен загружать код в любое место в ОЗУ и запускать выполнение по этому адресу.
Если быть точным, какими должны быть флаги компилятора ( GCC )? Нужен ли файл карты?
Пример приложения helloworld приветствуется:)
Просто чтобы прояснить мою точку зрения,
пусть метод main () будет пустым бесконечным циклом while, чтобы гарантировать, что никакие OS специальные или стандартные вызовы библиотеки не используются. Желаемое о / п это зависание. При обычных параметрах GCC загрузчик определенно не сможет загрузить исполняемый файл, сообщив, что он является недопустимым форматом ELF . Однако, передав параметр компоновщика -dN , он станет действительным ELF . Требуются дополнительные параметры компилятора / компоновщика, чтобы он завис и не зависал !! Что это за опции компилятора?
file.c:
int main()
{
while(1);
}
Компиляция
gcc -c -nostdinc -fno-встроенный файл.c
ld -dN -nostdlib file.o
Bootloader загружает a.out в ОЗУ и выполняет.