exe loader: was muss für das laden einer exe gatan werden?
-
hi
wenn ich eine exe ausführen möchte, was muss gemacht werden?
angenommen unter linux?
die exe komplett in den ram laden ist ja kein problem
dann muss ich die referenzen auf die windowsfunktionen auflösen
(also ich lade auch die nötigen dlls in den ram(kernel32.dll, user32.dll udn gdi32.dll udn ntdll.dll ... sollten fürs erste reichen)also ich habe soweit rausbekommen, dass der call einer windowsfunktion zu einer jump-anweisung in der selben datei führt ... wobei dieser jump seine adresse aus der dll list(indirekter sprung)
aber mit disem wert kann ich dann nix anfangen ... wird der einfach beim laden durch den richtigen wert für die nötige speicherstelle ersätzt, wenn der exe-loader läd??wie ist das mit den prozessen?, weil es reicht doch bestimmt nicht aus, wenn die referenzen aufeglöst sind einfach zum start des programmes zu springen und von da weiter zu machen???
also kurz, wo finde ich nötige informationen um das zu machen (ich denke fürs erste würde es auch reichen, wenn ich den exeloader unter win benutzen würde
eben den im system programmierten "ersätzen" könntedenn im moment weiß ich nicht weiter, die analyse des codes(hex, und disassemlierter asm-code) bringt micht nach dem call auf den indirekten jump nicht weiter ...
danke + cu
ps: müssen auch noch andere sachen außer dem auflösen der referenzen auf die dll-funktionen gemacht werden???
-
waenn du exe's ausfueren willst, dann brauchst du wine(emulator)!!!!!
-
ähm hab vergessen zu schreiben, bzw. gelöscht und nicht wieder hinzugefügt:
möchte keinen emulator benutzen, man könnte es auch verallgemeiner, es soll im grunde bei jedem beliebigen os machbar sein ... (natürlich muss der loader angepasst werden
danke + cu
-
Du musst doch den ganzen Code den du aus den Windows-DLLs nutzt, nachprogrammieren.
-
ERROR schrieb:
ps: müssen auch noch andere sachen außer dem auflösen der referenzen auf die dll-funktionen gemacht werden???
Wenn du DLLs lädst, musst du sie entweder an die richtige virtuelle Adresse laden oder die relocations anpassen, wenn das nicht möglich ist.
-
Führ dir erstmal dies zu Gemüte, freund.
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
-
danke
ich denke ich komme auch schon weiter, habe mit ollydbg gespielt und dabei rausbekommen, dass in der tat an die stelle, wo der jump sein ziel liest die RVA
von der dll-funktion reingeschrieben wird und somit das was vorher drinsteht "überschrieben" wird ...für mich heißt das im moment, dass man die dlls läd udn dann die RVAs bestimmt und einträgt
sollte also möglcih sein (naja windows kanns ja auchdanke auch für die file, werde ich mir mal genauer ansehen(müssen
da dürfte ich denke ich den weg rausbekommen, wie ich die ersätzungen finden kann (an welcher stelle genau was ersätzt wird (steht ja der name der funktion mit in der datei ...)
ok, wenn noch jemand weitere infos hat, dann keine scheu
danke und cu
-
Das was du vorhast wird nicht funktionieren, also nicht auf einen fremden OS, du kannst einfach nicht alle Abhängigkeiten auflösen ohne Windows zu benutzen, irgendwann bist du an dem Punkt wo Kernelfunktionen verwendet werden und dann stehste ohne laufenden Windowskernel erstmal vor ner Wand. Oder hast du doch was ndere vor?