![]() |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Hat das irgendwas mit
![]() Hast du in deiner Exe eigentlich funktionierende globale Variablen? Dann könnte man die Image-Base nämlich ausschließen, da globale Variablen ja wie Funktionszeiger absolut adressiert werden. |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
@Apollonius: Ja da hatte ich mich schonmal mit der Sache beschäftigt. Globale Variablen funktionieren ..
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Ob es an der geänderten Image Base liegt, kannst Du doch ganz simpel ausprobieren, indem Du die eingebettete Exe standalone startest. Wenn das auch nur Fehler 193 liefert, dann verweigert Vista wohl einfach Exen die nicht bei $00400000 im Speicher anfangen. Warum muss es denn überhaupt eine komplette Exe sein? Kannst Du nicht einfach etwas relevanten Code in eine frei relozierbare Form bringen und einfach irgendwo im Speicher ausführen? Ich kann Dir da gerne helfen, dazu muss ich dann mir aber natürlich den ganzen Kram anschauen.
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Also es scheint nicht an der ImageBase zu liegen, da das Programm normal ausgeführt keinerlei Fehler verursacht. Aber auch wenn meine eigene ImageBase 0x004000000 ist und ich das Programm aus der Resource ausführe bekomme ich 193 wenn ich versuche CreateThread aufzurufen .. es muss irgendeinen Grund geben, den ich bisher übersehen habe.
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Wir können ja leider nicht testen (mir fehlt schonmal das BS dazu). Aber gib doch mal aktuelle Adressen des Codes aus, oder sende es per Message. Kannst du mit dem@-Operator die Adresse einer anderen Funktionsvariablen (var x:function(...)) zuweisen und diese dann starten?
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Du meinst so:
Delphi-Quellcode:
Ja das funktioniert :)
function ThreadProc(P: Pointer): Cardinal; stdcall;
begin MessageBox(0, 'Thread', 'Info', MB_SYSTEMMODAL); Result := 0; end; var X: function(P: Pointer): Cardinal; stdcall; ... @X := @ThreadProc; X(nil); |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
hmmm :roll:
Jetzt könnte man noch schauen, wie sieht der Stack aus vor dem Aufruf con CreateThread, und wie die Sprungadresse. Und dass dann vergleichen... Wird ja immer umständlicher. |
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Wie kann ich das nachgucken? Mit OllyDbg? Weil ich starte ja praktisch den Prozess neu und injiziere dann den Code der EXE aus der Resource.
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Erhlich gesagt: keine Ahnung :pale: Aber irgendetwas muss ja anders sein.
|
Re: Adresse einer Funktion ohne @ ermitteln (evtl über CS:IP
Ich muss mir noch den grundlegenden Artikel mit dem inmemexe durchlesen, bin gerade bei meinen Eltern zu Besuch :) Aber hast Du auch dafür gesorgt, dass die injizierte Exe mit allen notwendigen Imports und Relocs versehen wird? Allerdings würd das nicht direkt erklären warum das auf XP geht und auf Vista nicht. Handelt es sich eigentlich um ein 32-Bit oder 64-Bit Vista?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz