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


Log in to reply