Autor Thema: "Applikation" ausführen?  (Gelesen 4933 mal)

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« 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
« Letzte Änderung: 21. October 2006, 13:34 von RedEagle »

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #1 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;
}

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 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++).
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen