000
19.11.2004, 12:58 Uhr
~peter_pan
Gast
|
Hallo ich habe ein etwas kompliziert zu beschreibendes Problem: Es geht um Datenaustausch zwischen DLL und Hauptprogramm. Prinzipiell ist der Datenaustausch zw DLL und Hauptprogramm (per Pointer) kein Problem, aber bei HOOK Dlls scheint da irgendwas anders zu laufen.
Also ich habe eine DLL, die einen Systemweiten HOOK setzt. Eine HOOKDLL wird bei erfolgreichem Hooken ja komplett in den Speicherbereich der spezifischen Anwendung gemapped.
Ich stehe nun vor folgendem Problem für das ich keine Lösung finde:
Das Hauptprogramm lädt die DLL, ruft eine Funktion in der DLL auf (nennen wir sie "DllFunc1") und übergibt als Parameter Zeiger auf string Objekte.
In der DLL Funktion wiederum wird nun der Hook gesetzt und zur Kontrolle die übergebenen daten auch noch mal via Konsole angezeigt.
-> bis dahin klappts, das is ja auch nich weiter schlimm.
Nun benötige ich die Daten aber innerhalb der Callback Funktion des Hooks. Dazu könnte man im SharedSegment ja einfach eine Variable einrichten.
Ich möchte aber keinen fixen Buffer verwenden, also NICHT sowas:
Weil ich die Datenmenge nicht kenne und nicht begrenzen möchte, und die Größe zur Ausführung nicht aufblähen möchte. Nun hab ich mir gedacht, da lege ich im Shared Segment einen Zeiger an (nennen wir ihn "pdata", der nun wiederum auf unsere übergebenen Daten aus ("DllFunc1") zeigt.
C++: |
#pragma comment (linker, "/section:Shared,RWS") #pragma data_seg ("Shared") string* pdata; #pragma data_seg ()
|
Aber genau das klappt nicht, soll heißen: Es stüzt das entsprechende gehookte Programm ab, sobald ich in der CallbackFunktion auf diesen Zeiger zugreifen will. In "DLLFunc1" funkioniert es aber.
Das Problem scheint zu sein, dass wenn ich in "DllFunc1" den Zeiger pdata auf die übergebenen Daten setzte, hier wahscheinlich mit relativen Adressen gearbeitet wird. Auf jeden Fall ist der Wert des Zeigers innerhalb der HookProzedur, also quasi aus einem anderen Speicherbereich heraus gesehen unbrauchbar/bullshit.
Mit fixen Buffern hat das geklappt, aber wie gesagt das is in meinem fall ungünstig.
Auch mit speicher allozieren (in DllFunc) klappt es nicht, ist ja klar, auch hier muss ich ja Pointer verwenden.
Also wie gesagt mir fällt da absolut keine Lösung ein, wär prima wenn da mal jemand ein Statement zu abgeben könnte.
Gruß
Peter |