Jak skompilować C programu w celu poprawnego ELF formacie (lub w formacie RAW) tak, że może być wykonywane bezpośrednio z pamięci RAM bez OS? Załóżmy, że istnieje bootloader, który jest w stanie załadować kod do dowolnej lokalizacji w pamięci RAM i rozpocząć wykonywanie pod tym adresem. Aby być precyzyjnym, jakie powinny być flagi kompilatora (GCC)? Czy jest potrzebny plik mapy?Wykonanie bez OS
przykładowej aplikacji helloworld byłyby najbardziej mile widziane :)
Wystarczy opracować mój punkt widzenia,
niech główną metodą() będzie pusty nieskończonej pętli while w celu zapewnienia, że nie OS szczególnych lub standardowych wywołań bibliotecznych są używane. Pożądane ustawienie o/p jest zawieszeniem. Z typowymi opcjami GCC program ładujący zdecydowanie nie załadowałby pliku wykonywalnego informując, że jest on nieprawidłowy w formacie ELF. Jednak przekazanie do linkera opcji -dN spowoduje jej ważność ELF. Więcej opcji kompilatora/linkera jest wymaganych, aby zawiesić się i nie zawiesić! Czym dokładnie są te opcje kompilatora?
file.c:
int main()
{
while(1);
}
Kompilacja
gcc -c -nostdinc -fno-wbudowane file.c
ld -dn -nostdlib file.o
BootLoader ładunki a.out do ubijania i uruchomienia.
Dzięki ... Linki były bardzo przydatne :) – AIB