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