Code zonder operatingsystem

Pagina: 1
Acties:

  • SvMp
  • Registratie: September 2000
  • Niet online
Met GCC kun je voor vele platforms code genereren, maar ik wil code die niet afhankelijk is van een OS.

Ik ben er inmiddels achter dat het het gemakkelijkste gaat in de protected mode. Een stuk assembly schrijven dat er naar toe switcht is nog wel te doen. Maar hoe kan ik van een C-file naar platte binaire code zonder verwijzingen naar libraries e.d. Hoe stel ik het beginpunt in?

Ik heb de BTX-loader van FreeBSD bestudeerd, maar die is nog dermate ingewikkeld dat ik het daar niet van leer. Wat ik zoek is een heel klein voorbeeldje dat alleen maar iets op het scherm zet en klaar.
In C welteverstaan. De printf functie wordt zelf gemaakt. De binaire file kan zonder OS met een bootloadertje geladen en uitgevoerd worden.

Ik heb ook GCC bestudeerd, maar ik kom er niet uit zo. Je hebt de optiest -nostartfiles en -nostdlib, maar dan krijg ik een linker-warning. Bovendien vind ik 985 bytes voor een i=5+3; erg groot.

Hoe krijg ik het voor elkaar?

PS. Tips hoe ik OS-independent C kan compileren in de realmode zijn ook van harte welkom!

PS. Ik post het in dit forum inplv. programmeren, omdat in programming over het algemeen mensen komen die alles weten van Windows-programmeren, en dit heeft meer met non-Windows operatingsystems te maken

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 12:20

deadinspace

The what goes where now?

gcc -static -o blaat blaat.c

  • SvMp
  • Registratie: September 2000
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
simon@a:/usr/home/simon$ cat test.c
int i=0;

int main() {
  i=2+1;
  return(0);
}simon@a:/usr/home/simon$ gcc -static -nostartfiles -O -o test test.c 
/usr/i386-slackware-linux/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074
simon@a:/usr/home/simon$ ls -l test
-rwxr-xr-x    1 simon    users    990 Nov  2 18:08 test*
simon@a:/usr/home/simon$

Lijkt niet helemaal goed te gaan..

Nog een vraag:
Je ziet vaak assembly in kernels, en ook in de BTX-loader van FreeBSD.
Meestal wordt as gebruikt als assembler. Ik gebruik echter liever NASM, omdat as zo'n brakke formulering heeft van de assembly.
Kan NASM precies dezelfde ELF-files maken?
Zijn ELF-files per operatingsystem altijd hetzelfde (op de libary verwijzingen na) ?

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Op vrijdag 02 november 2001 18:11 schreef svdmeer het volgende:
Meestal wordt as gebruikt als assembler. Ik gebruik echter liever NASM, omdat as zo'n brakke formulering heeft van de assembly.
Amen.
Kan NASM precies dezelfde ELF-files maken?
Ja.
Zijn ELF-files per operatingsystem altijd hetzelfde (op de libary verwijzingen na) ?
Ja.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Er bestaat geen binary-code die niet afhankelijk is van een OS. Er bestaat wel code die niet afhankelijk is van shared libraries, dan moet je static compilen. Hier worden je bestandjes inderdaad errug groot van. Ik snap ook niet waarom je zoiets zou willen doen.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 12:20

deadinspace

The what goes where now?

Op vrijdag 02 november 2001 20:10 schreef Sjord het volgende:
Er bestaat geen binary-code die niet afhankelijk is van een OS. Er bestaat wel code die niet afhankelijk is van shared libraries, dan moet je static compilen. Hier worden je bestandjes inderdaad errug groot van. Ik snap ook niet waarom je zoiets zou willen doen.
Die code bestaat wel, dat is code die gewoon kan draaien zonder dat er een OS geladen is. Een OS zelf bestaat uit zulke code. Ik weet alleen niet zo snel hoe je zoiets produceert (de -static optie helpt natuurlijk wel, maar er zijn vast meer nuttige opties).

Het lijkt me dat hij dat wil omdat hij zelf een OS-achtig iets wil bouwen (of iig ermee spelen).

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

In dat geval moet je plain binary output hebben, en geen relocatable format als ELF of COFF ofzo.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Met C kom je er denk ik niet.
C compile je namelijk altijd voor een bepaald platform. (bv linux-i386)

Als je echt zonder OS zal willen werken, dan moet je gewoon je programma in Assembler schrijven.

  • SvMp
  • Registratie: September 2000
  • Niet online
Da's niet waar..kijk maar naar bv. de Linux kernel die grotendeels in C is geschreven.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 12:20

deadinspace

The what goes where now?

Op zaterdag 03 november 2001 01:19 schreef svdmeer het volgende:
Da's niet waar..kijk maar naar bv. de Linux kernel die grotendeels in C is geschreven.
Idd.
Alleen zul je alle hardware-toegang (HD, scherm, enz) zelf moeten proggen in assembly ja (nee, printf() gaat niet werken).

  • SvMp
  • Registratie: September 2000
  • Niet online
Op zaterdag 03 november 2001 01:31 schreef deadinspace het volgende:

[..]

Idd.
Alleen zul je alle hardware-toegang (HD, scherm, enz) zelf moeten proggen in assembly ja (nee, printf() gaat niet werken).
Precies ja..en da's niet het probleem, ik heb al zoveel geklooid met assembly.
Alleen hoe het dan voor elkaar te krijgen in C...
Da's toch een stuk gemakkelijker.

  • SvMp
  • Registratie: September 2000
  • Niet online
Inmiddels heb ik zelf het een en ander gevonden..

Op http://www.reitshamer.com/source/os_doc.html staat een helder voorbeeld mini-OS.

http://www.acm.uiuc.edu/sigops/roll_your_own/1.helloworld.html is imho iets minder duidelijk, maar het voorbeeld stukje van Hello World in C is wel handig.

Tot slot nog een paar handige links:
http://aarongray.members.beeb.net/osdev.html
http://mega-tokyo.com/os/os-faq.html

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

een puntje in deze topic wat gewoon fout is, is dat er geen code zou bestaan wat zonder OS draait. In principe draait namelijk een heleboel code zonder OS, zet aan het begin van je floppy maar eens een assembly jump naar je eigen code, gaat echt wel werken :)

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:36

odysseus

Debian GNU/Linux Sid

Op zondag 04 november 2001 16:02 schreef limoentje het volgende:
In principe draait namelijk een heleboel code zonder OS, zet aan het begin van je floppy maar eens een assembly jump naar je eigen code, gaat echt wel werken :)
Die jump wel ja...maar als je code daarna niet wil draaien, heb je daar weinig aan ;)

Misschien moet de topicstarter eens naar de source van zo'n memtest-programma kijken (memtest86 bijvoorbeeld). Dat boot in principe toch ook en ik denk niet dat ze die (gedeeltelijk) grafische programma's volledig in assembly geschreven hebben, dus met wat spieken zou het te doen moeten zijn.

* odysseus heeft eens een blik geworpen op /usr/src/linux/arch/i386/boot/setup.S en begreep alleen de routines om wat tekens te printen...voorlopig krijg ik geen programma's op die manier draaiend ;)

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.

Pagina: 1