Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: RedEagle am 21. October 2006, 13:27

Titel: "Applikation" ausführen?
Beitrag von: RedEagle am 21. October 2006, 13:27
Was ich möchte:
Eine *.bin-datei, die an einer belibigen adresse liegt (abhängig von link-script) soll ausgeführt werden. Dieser code soll/muss kernel-rechte haben.

Wie ich es in etwa machen möchte:
Ich habe im kernel eine Funktion "int exec(DWORD address);" an der ich die Addresse der *.bin übergebe. Unter dieser addresse ist der header, mit einprungadresse usw...
Jetzt möchte ich einem Funktionsprototyp "int (*funktion)(void)" diese adresse geben, und ausführen (int error = funktion();)

Wichtiges zum OS
- Singel-Tasking
- Anwendungen sollen kernel-rechte haben

Frage:
Wie realisiere ich das??
was muss ich beachten??
Mit welchen Problemem muss ich rechnen??

ps.: mein ansatz:
Aufruf:
int (*reosapp)(void);

int execute(DWORD address)
{
 reosapp = (int (*)())address;
 int retvalue = reosapp();
 return retvalue;
}

Die Applikation:
[Bits 32]
jmp start

;;HEADERDATEN
 headersize   db 14         ; 1 Byte
 minosversion db 00,00,03   ; 3 Byte (REOS 00.00.03)
 progversion  db 00,01,00   ; 3 Byte (major,minor,patch)
 progname     db "Test.app" ; 8 Byte
;;

start:

  ;;;DEBUG;;;
  mov edi, 0xB8000
  mov [edi], byte 0x0C
  inc edi
  mov [edi], byte '#'
 
  ret
Titel: Re: "Applikation" ausführen?
Beitrag von: RedEagle am 24. October 2006, 17:32
Ich kann jetzt das Programm laden, und auch ausführen.

daraus ergeben sich folgende fragen:
 - was muss ich beachten??
 - Mit welchen Problemem muss ich rechnen??
 - Wie kann ich einen int-wert zurückgeben, bzw weiterleiten??

call _main
;Hier möchte ich den rückgabewert von main verarbeiten, bzw zurückgeben (an das OS)

int main()
{
 return irgendwas;
}
Titel: Re: "Applikation" ausführen?
Beitrag von: bluecode am 24. October 2006, 18:40
- Wie kann ich einen int-wert zurückgeben, bzw weiterleiten??
Der Rückgabewert steht normalerweise in eax/ax/al (zumindest bei gcc/g++).