Gelöst: Relokation von Funktionsadressen in EXE Dateien (PE/COFF)
-
Hallo zusammen,
mein kleines OS ist bereits mit einer Ladefunktion für externe Dateien ausgestattet was auch sehr gut funktioniert.
Dazu habe ich mich für das PE Format, was in Windows üblich ist, entschieden
da ich mit MASM arbeite.Zur Zeit nutze ich einen Syscall (Int 30h) um an die Adressen der OS Funktionen zu kommen:
.data API struc Sleep dd 0 PrintString dd 0 itoh dd 0 GetChar dd 0 GetFreePage dd 0 ConsoleGetString dd 0 LockPage dd 0 FreePage dd 0 StringCompare dd 0 ClearScreen dd 0 FATReadFile dd 0 FATGetFileHandle dd 0 FATGetFileSize dd 0 FATGetFilePointer dd 0 FATSetFilePointer dd 0 FATCloseHandle dd 0 API ends api API <> .code start: mov eax, 100d mov ecx, sizeof API shr ecx, 2d mov ebx, offset api int 30h call api.ClearScreen ;Bildschirm löschen ;Standardbeginn jedes Programmes! ;###################################################################### RET ;Zurück zum OS end start
Das funktioniert jedoch kann ich hierbei die Funktionen nicht mit
invoke Funktion, Param1, Param2
aufrufen.
Da mein OS ebenfalls im PE Format vorliegt wollte ich mal wissen wie
ich es anstellen kann, die Funktionadressen beim Laden der Anwendung
direkt in das Programm einzutragen.Ich weiß das es einen .reloc Abschnitt (Sektion) gibt, der aber nie
angelegt wird. Das habe ich bisher nur bei DLL's gesehen.Wie müsste ich mein externes Programm erstellen/kompilieren/linken damit der Loader
an die Funktionsnamen und die Adressen in der PE Datei kommt?
Und wo sind diese dann in der Datei abgelegt?Ich hoffe jemand kann Licht ins Dunkel bringen
Gruß, Nicky