Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Verzwacktes Problem mit HOOKDLL und Pointern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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:

C++:
char DATA[2048];



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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.11.2004, 13:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn du eh string verwendest, kann dir doch die länge egal sein, da er ja automatisch einen string "erweitert".
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.11.2004, 15:12 Uhr
~peter_pan
Gast


Moin FloSoft,

sollte man meinen.
Aber wenn ich im Shared Segment einen string anlege, ist dieser in der Callbackfunktion leer.
Irgendwas raffich da nich.

Gruß
Peter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.11.2004, 21:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


warum nimmst du einen pointer bei einem string meine ich, nimm halt eine normale variable
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.11.2004, 16:08 Uhr
~peter_pan
Gast


moin moin,

Variablen im Shared Segment MÜSSEN bei Erstellung initialisiert werden. Eine String Variable ist ein Objekt und lässt sich in diesem Sinne nicht mit einem Wert initialisieren.
C++ Klassen werden somit nicht supportet. HOOK DLLs müssen/sollten immer purer C Code sein.

Warum das mit den Pointern nicht funktioniert ist mir nun mittlerweile klar. Es liegt tatsächlich daran, dass jeder DLL Prozess im Addressbereich der jweileis gehookten Anwenung und somit die Addressierung nich mehr funzt.

Kann man auch alles noch mal auf www.codeproject.com/dll/hooks.asp nachlesen.

Ich werde das ganze mal mit Memory Mapped Files probieren

Gruß

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: