<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit HOOK Dll und Datenübergabe, kennt sich jemand aus?]]></title><description><![CDATA[<p>Hallo<br />
ich habe ein etwas kompliziert zu beschreibendes Problem:<br />
Es geht um Datenaustausch zwischen DLL und Hauptprogramm.<br />
Prinzipiell ist der Datenaustausch zw DLL und Hauptprogramm (per Pointer) kein Problem, aber bei HOOK Dlls scheint da irgendwas anders zu laufen.</p>
<p>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.</p>
<p>Ich stehe nun vor folgendem Problem für das ich keine Lösung finde:</p>
<p>Das Hauptprogramm lädt die DLL, ruft eine Funktion in der DLL auf (nennen wir sie &quot;DllFunc1&quot;) und übergibt als Parameter Zeiger auf string Objekte.</p>
<p>In der DLL Funktion wiederum wird nun der Hook gesetzt und zur Kontrolle die übergebenen daten auch noch mal via Konsole angezeigt.</p>
<p>-&gt; bis dahin klappts, das is ja auch nich weiter schlimm.</p>
<p>Nun benötige ich die Daten aber innerhalb der Callback Funktion des Hooks. Dazu könnte man im SharedSegment ja einfach eine Variable einrichten.</p>
<p>Ich möchte aber keinen fixen Buffer verwenden, also NICHT sowas:</p>
<pre><code class="language-cpp">char DATA[2048];
</code></pre>
<p>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 &quot;pdata&quot;, der nun wiederum auf unsere übergebenen Daten aus (&quot;DllFunc1&quot;) zeigt.</p>
<pre><code class="language-cpp">#pragma comment (linker, &quot;/section:Shared,RWS&quot;)
#pragma data_seg (&quot;Shared&quot;)

   string* pdata;

#pragma data_seg ()
</code></pre>
<p>Aber genau das klappt nicht, soll heißen:<br />
Es stüzt das entsprechende gehookte Programm ab, sobald ich in der CallbackFunktion auf diesen Zeiger zugreifen will.<br />
In &quot;DLLFunc1&quot; funkioniert es aber.</p>
<p>Das Problem scheint zu sein, dass wenn ich in &quot;DllFunc1&quot; den Zeiger pdata auf die übergebenen Daten setzte, hier wahscheinlich mit relativen Adressen gearbeitet wird.<br />
Auf jeden Fall ist der Wert des Zeigers innerhalb der HookProzedur, also quasi aus einem anderen Speicherbereich heraus gesehen unbrauchbar/bullshit.</p>
<p>Mit fixen Buffern hat das geklappt, aber wie gesagt das is in meinem fall ungünstig.</p>
<p>Auch mit speicher allozieren (in DllFunc) klappt es nicht, ist ja klar, auch hier muss ich ja Pointer verwenden.</p>
<p>Wenn ich einfach einen string definiere und in DLLFunc1 fülle ist auch dieser in der Callback Funktion leer (zumindest stürzt es aber nicht ab).</p>
<p>Irgendwie ist das mit der Shared Sektion sehr merkwürdig. Ich habe vor längerer Zeit auch schon mal festgestellt, dass wenn ich einer Variable beim Definieren, keinen Wert zuweise, also zum Bsp nur</p>
<pre><code class="language-cpp">HWND hMainWin;
</code></pre>
<p>in der Shared Sektion definiere, es dann auch Probleme zwischen den Instanzen der DLL geben kann, wobei</p>
<pre><code class="language-cpp">HWND hMainWin = NULL;
</code></pre>
<p>eine initialisierung mit NULL dann funktionierte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich bin ratlos <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> , freu mich über jeden hinweis, vielleicht auch andere, sichere Verfahren zur Interprozesskommunikation.</p>
<p>Gruß</p>
<p>Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/92497/problem-mit-hook-dll-und-datenübergabe-kennt-sich-jemand-aus</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 01:15:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/92497.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Nov 2004 14:33:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit HOOK Dll und Datenübergabe, kennt sich jemand aus? on Fri, 19 Nov 2004 14:33:33 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich habe ein etwas kompliziert zu beschreibendes Problem:<br />
Es geht um Datenaustausch zwischen DLL und Hauptprogramm.<br />
Prinzipiell ist der Datenaustausch zw DLL und Hauptprogramm (per Pointer) kein Problem, aber bei HOOK Dlls scheint da irgendwas anders zu laufen.</p>
<p>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.</p>
<p>Ich stehe nun vor folgendem Problem für das ich keine Lösung finde:</p>
<p>Das Hauptprogramm lädt die DLL, ruft eine Funktion in der DLL auf (nennen wir sie &quot;DllFunc1&quot;) und übergibt als Parameter Zeiger auf string Objekte.</p>
<p>In der DLL Funktion wiederum wird nun der Hook gesetzt und zur Kontrolle die übergebenen daten auch noch mal via Konsole angezeigt.</p>
<p>-&gt; bis dahin klappts, das is ja auch nich weiter schlimm.</p>
<p>Nun benötige ich die Daten aber innerhalb der Callback Funktion des Hooks. Dazu könnte man im SharedSegment ja einfach eine Variable einrichten.</p>
<p>Ich möchte aber keinen fixen Buffer verwenden, also NICHT sowas:</p>
<pre><code class="language-cpp">char DATA[2048];
</code></pre>
<p>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 &quot;pdata&quot;, der nun wiederum auf unsere übergebenen Daten aus (&quot;DllFunc1&quot;) zeigt.</p>
<pre><code class="language-cpp">#pragma comment (linker, &quot;/section:Shared,RWS&quot;)
#pragma data_seg (&quot;Shared&quot;)

   string* pdata;

#pragma data_seg ()
</code></pre>
<p>Aber genau das klappt nicht, soll heißen:<br />
Es stüzt das entsprechende gehookte Programm ab, sobald ich in der CallbackFunktion auf diesen Zeiger zugreifen will.<br />
In &quot;DLLFunc1&quot; funkioniert es aber.</p>
<p>Das Problem scheint zu sein, dass wenn ich in &quot;DllFunc1&quot; den Zeiger pdata auf die übergebenen Daten setzte, hier wahscheinlich mit relativen Adressen gearbeitet wird.<br />
Auf jeden Fall ist der Wert des Zeigers innerhalb der HookProzedur, also quasi aus einem anderen Speicherbereich heraus gesehen unbrauchbar/bullshit.</p>
<p>Mit fixen Buffern hat das geklappt, aber wie gesagt das is in meinem fall ungünstig.</p>
<p>Auch mit speicher allozieren (in DllFunc) klappt es nicht, ist ja klar, auch hier muss ich ja Pointer verwenden.</p>
<p>Wenn ich einfach einen string definiere und in DLLFunc1 fülle ist auch dieser in der Callback Funktion leer (zumindest stürzt es aber nicht ab).</p>
<p>Irgendwie ist das mit der Shared Sektion sehr merkwürdig. Ich habe vor längerer Zeit auch schon mal festgestellt, dass wenn ich einer Variable beim Definieren, keinen Wert zuweise, also zum Bsp nur</p>
<pre><code class="language-cpp">HWND hMainWin;
</code></pre>
<p>in der Shared Sektion definiere, es dann auch Probleme zwischen den Instanzen der DLL geben kann, wobei</p>
<pre><code class="language-cpp">HWND hMainWin = NULL;
</code></pre>
<p>eine initialisierung mit NULL dann funktionierte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich bin ratlos <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> , freu mich über jeden hinweis, vielleicht auch andere, sichere Verfahren zur Interprozesskommunikation.</p>
<p>Gruß</p>
<p>Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/655153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/655153</guid><dc:creator><![CDATA[peter_pan]]></dc:creator><pubDate>Fri, 19 Nov 2004 14:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit HOOK Dll und Datenübergabe, kennt sich jemand aus? on Sat, 20 Nov 2004 15:39:30 GMT]]></title><description><![CDATA[<p>In der WinApi Hilfe ist ein Beispielprogramm zu Deinem Problem unter der Überschrift<br />
&quot;Using Shared Memory in a Dynamic-Link Library&quot;<br />
vieleicht klappt es auch mit GlobalAlloc (bin mir aber nicht sicher)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/655694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/655694</guid><dc:creator><![CDATA[Lui]]></dc:creator><pubDate>Sat, 20 Nov 2004 15:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit HOOK Dll und Datenübergabe, kennt sich jemand aus? on Mon, 22 Nov 2004 11:42:49 GMT]]></title><description><![CDATA[<p>Der Hinweis ging in die richtige Richtung, Memory Mapped Files sind wohl der Weg zum Glück...</p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/656522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/656522</guid><dc:creator><![CDATA[peter_pan]]></dc:creator><pubDate>Mon, 22 Nov 2004 11:42:49 GMT</pubDate></item></channel></rss>