Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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
-
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;
}
-
- Wie kann ich einen int-wert zurückgeben, bzw weiterleiten??
Der Rückgabewert steht normalerweise in eax/ax/al (zumindest bei gcc/g++).