<?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[Probleme mit DLL]]></title><description><![CDATA[<p>Hi.</p>
<p>Ich arbeite das erste mal DLLs (gezwungenermaßen) und komme gerade nicht ganz klar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich möchte etwas im Prozessbereich eines anderen Prozesses pfuschen und habe mich deswegen für DLL-Injection entschieden.<br />
Schön und gut, DLL geschrieben, kompiliert, in den Thread geschleust, funktioniert.<br />
Nur würde ich gerne mit meiner DLL kommunizieren, letztendlich bin ich auf eine Lösung gestolpert...eine DLL &quot;in der Mitte&quot; mit SharedMemory auf welches sowohl Client als auch die eingeschleuste DLL zugreifen sollen.<br />
Das war auch leicht zu realisieren (bitte empfehlt mir keine NamedPipes zur Kommunikation zwischen den Prozessen) ... und jetzt kommt mein erstes Problem.</p>
<p>Die DLL in der Mitte stellt 2 Funktionen bereit:</p>
<p>SetBuffer zum modifizieren des Shared Memories<br />
GetBuffer zum Lesen</p>
<p>Damit ich diese Funktionen nutzen kann muss ich was machen.<br />
Also hab ich in der anderen DLL und dem Client die .a file die mein Compiler erzeugt hat reingelinkt sowie</p>
<pre><code class="language-cpp">void __declspec(dllimport) SetBuffer(char * message);
void __declspec(dllimport) GetBuffer(char * dest);
</code></pre>
<p>Als ich das kompilieren wollte wurde mir gleich an den Kopf geschmissen:</p>
<blockquote>
<p>obj\main.o:main.cpp:(.text+0x3)||undefined reference to `__imp___Z9SetBufferPc'|</p>
</blockquote>
<p>Warum funktioniert das nicht obwohl ich die .a File mitgelinkt habe ?</p>
<p>Und jetzt zu meiner zweiten Frage:</p>
<p>Die DLL, die ich injecte ist ja dann auch von meiner &quot;Kommunikations-DLL&quot; abhängig. Client und Kommunikations-DLL liegen (Beispiel) in</p>
<p>C:\Test\test.exe | Kommunikation.dll</p>
<p>Der Prozess, in den ich injecte wird aus der Prozessliste gefischt, liegt Beispielsweise in</p>
<p>C:\Firefox\Firefox.exe</p>
<p>dann müsste die Kommunikations-DLL auch im Firefox-Ordner liegen, oder?</p>
<p>Wäre nett wenn mir jemand auf meine Fragen antwortet.<br />
Danke im voraus.</p>
<p>Grüße,<br />
Flo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244340/probleme-mit-dll</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 23:03:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244340.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Jun 2009 20:42:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit DLL on Sun, 28 Jun 2009 20:42:59 GMT]]></title><description><![CDATA[<p>Hi.</p>
<p>Ich arbeite das erste mal DLLs (gezwungenermaßen) und komme gerade nicht ganz klar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich möchte etwas im Prozessbereich eines anderen Prozesses pfuschen und habe mich deswegen für DLL-Injection entschieden.<br />
Schön und gut, DLL geschrieben, kompiliert, in den Thread geschleust, funktioniert.<br />
Nur würde ich gerne mit meiner DLL kommunizieren, letztendlich bin ich auf eine Lösung gestolpert...eine DLL &quot;in der Mitte&quot; mit SharedMemory auf welches sowohl Client als auch die eingeschleuste DLL zugreifen sollen.<br />
Das war auch leicht zu realisieren (bitte empfehlt mir keine NamedPipes zur Kommunikation zwischen den Prozessen) ... und jetzt kommt mein erstes Problem.</p>
<p>Die DLL in der Mitte stellt 2 Funktionen bereit:</p>
<p>SetBuffer zum modifizieren des Shared Memories<br />
GetBuffer zum Lesen</p>
<p>Damit ich diese Funktionen nutzen kann muss ich was machen.<br />
Also hab ich in der anderen DLL und dem Client die .a file die mein Compiler erzeugt hat reingelinkt sowie</p>
<pre><code class="language-cpp">void __declspec(dllimport) SetBuffer(char * message);
void __declspec(dllimport) GetBuffer(char * dest);
</code></pre>
<p>Als ich das kompilieren wollte wurde mir gleich an den Kopf geschmissen:</p>
<blockquote>
<p>obj\main.o:main.cpp:(.text+0x3)||undefined reference to `__imp___Z9SetBufferPc'|</p>
</blockquote>
<p>Warum funktioniert das nicht obwohl ich die .a File mitgelinkt habe ?</p>
<p>Und jetzt zu meiner zweiten Frage:</p>
<p>Die DLL, die ich injecte ist ja dann auch von meiner &quot;Kommunikations-DLL&quot; abhängig. Client und Kommunikations-DLL liegen (Beispiel) in</p>
<p>C:\Test\test.exe | Kommunikation.dll</p>
<p>Der Prozess, in den ich injecte wird aus der Prozessliste gefischt, liegt Beispielsweise in</p>
<p>C:\Firefox\Firefox.exe</p>
<p>dann müsste die Kommunikations-DLL auch im Firefox-Ordner liegen, oder?</p>
<p>Wäre nett wenn mir jemand auf meine Fragen antwortet.<br />
Danke im voraus.</p>
<p>Grüße,<br />
Flo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734264</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Sun, 28 Jun 2009 20:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit DLL on Sun, 28 Jun 2009 22:31:52 GMT]]></title><description><![CDATA[<p>hi, ich hätte noch nen anderen Vorschlag:<br />
wenn du den Buffer in ein shared data segment setzt, dann kannst diese mit SetBuffer() IN der injecteten DLL setzen</p>
<pre><code class="language-cpp">#pragma data_seg(&quot;.shared&quot;)

TCHAR buffer[200];

#pragma data_seg()
#pragma comment(linker,&quot;/SECTION:.shared,RWS&quot;) 

extern &quot;C&quot; __declspec(dllexport) void SetBuffer(TCHAR* newbuffer)
{
 // newbuffer in buffer kopieren
}
</code></pre>
<p>diese Funktion ganz normal importieren und aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734305</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 28 Jun 2009 22:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit DLL on Sun, 28 Jun 2009 22:51:14 GMT]]></title><description><![CDATA[<p>Ich zeig am besten mal Code <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Diese DLL ist für die Kommunikation zuständig: <a href="http://nopaste.org/p/aAeoVxCun" rel="nofollow">http://nopaste.org/p/aAeoVxCun</a><br />
Und das ist mein Ansatz für die DLL die in den Prozess geschleust wird, mit LoadLibrary() wegen den Link-Problemen: <a href="http://nopaste.org/p/aCPpA8G2gb" rel="nofollow">http://nopaste.org/p/aCPpA8G2gb</a></p>
<p>Oh, ignoriert bitte dass ich bei strcpy Ziel und Quelle vertauscht hab, arbeite nie damit ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734310</guid><dc:creator><![CDATA[Icematix]]></dc:creator><pubDate>Sun, 28 Jun 2009 22:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit DLL on Mon, 29 Jun 2009 09:15:41 GMT]]></title><description><![CDATA[<p>Es gibt noch einen anderen Weg zur Kommunikation mit und über DLLs ohne shared memory. Man verpasst der DLL (oder den DLLs) einen moduslosen hidden Dialog. Jede Instanz der DLL legt für diesen Dialog ein Fenster (HWND) an, über das man mit kleineren Datenmengen (WPARAM, LPARAM) mit benutzereigenen Nachrichten bequem kommunizieren kann. Die Mitteilung der HWNDs erfolgt am besten über die Hauptfenster der beteiligten Prozesse, die man sich z.B. über EnumWindows beschaffen kann.<br />
Ich benutze diesen Weg, da meine Borland-Compiler shared memory in DLLs nicht unterstützen. Der Vorteil liegt darin, dass man sich über Synchronisation keine Gedanken machen muss.<br />
Vielleicht kannst Du mit diesem Hinweis etwas anfangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734420</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 29 Jun 2009 09:15:41 GMT</pubDate></item></channel></rss>