<?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[nicht namentlich bekannte Funktionen aus einer DLL aufrufen]]></title><description><![CDATA[<p>Hich hab für ein Projekt DLLs erzeugt die Code aus einer Anwendung heraus &quot;Auslagern&quot;</p>
<p>Die Funktionen in den DLLs sind alle vom gleichen Typ, nur haben sie unterschiedliche Namen.<br />
Besteht eine Möglichkeit diese Namen herauszufunden? Denn GetProcAddress benötigt ja den Namen der Funktion? Also praktisch sowas wie tdump...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174794/nicht-namentlich-bekannte-funktionen-aus-einer-dll-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 22:43:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174794.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Mar 2007 20:30:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sat, 03 Mar 2007 20:30:33 GMT]]></title><description><![CDATA[<p>Hich hab für ein Projekt DLLs erzeugt die Code aus einer Anwendung heraus &quot;Auslagern&quot;</p>
<p>Die Funktionen in den DLLs sind alle vom gleichen Typ, nur haben sie unterschiedliche Namen.<br />
Besteht eine Möglichkeit diese Namen herauszufunden? Denn GetProcAddress benötigt ja den Namen der Funktion? Also praktisch sowas wie tdump...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238672</guid><dc:creator><![CDATA[AntonWert]]></dc:creator><pubDate>Sat, 03 Mar 2007 20:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 00:21:17 GMT]]></title><description><![CDATA[<p>AntonWert schrieb:</p>
<blockquote>
<p>Denn GetProcAddress benötigt ja den Namen der Funktion?</p>
</blockquote>
<p>GetProcAddress () nimmt auch die Ordnungszahl einer Funktion :</p>
<pre><code class="language-cpp">// liefert Funktionsadresse mit der Ordnungszahl 0x0111 aus KERNEL32.DLL
 FARPROC fp =
 GetProcAddress (LoadLibrary(&quot;KERNEL32&quot;),(LPCSTR)(0x0111));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238743</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Mar 2007 00:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 08:03:22 GMT]]></title><description><![CDATA[<p>Habe das eben mal ausprobieren wollen, aus:</p>
<pre><code class="language-cpp">GetProcAddress(dll, &quot;_TestRoutine&quot;);
</code></pre>
<p>habe ich</p>
<pre><code class="language-cpp">GetProcAddress(dll, (LPCSTR)(0x0000));
</code></pre>
<p>gemacht, denn tdump lieferte mir:</p>
<pre><code>Turbo Dump  Version 5.0.16.4 Copyright (c) 1988, 1998 Borland International
                   Display of File PROJECT2.DLL

EXPORT ord:0000='_TestRoutine'
</code></pre>
<p>Leider endete das ganze mit einer Zugriffsverletzung. Ist 0 nicht die Ordnungszahl? Wenn ja, wie komme ich an diese?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238784</guid><dc:creator><![CDATA[AntonWert]]></dc:creator><pubDate>Sun, 04 Mar 2007 08:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 11:53:51 GMT]]></title><description><![CDATA[<p>AntonWert schrieb:</p>
<blockquote>
<p>Ist 0 nicht die Ordnungszahl?</p>
</blockquote>
<p>tdump ohne Parameter aufgerufen liefert noch eine wichtige Information zur Ordnungszahl :</p>
<pre><code>Turbo Dump  Version 5.0.16.4 Copyright (c) 1988, 1998 Borland International
                   Display of File KERNEL32.DLL

(...)

Exports from KERNEL32.dll
  949 exported name(s), 949 export addresse(s).  [b]Ordinal base is 1.[/b]
    [b]Ordinal[/b] RVA       Name
    ------- --------  ----
    0000    0000a634  ActivateActCtx
    0001    000392a3  AddAtomA
    0002    00022469  AddAtomW
    0003    0007096f  AddConsoleAliasA
    0004    00070931  AddConsoleAliasW

(...)
(!!! [b]Ordinal[/b] ist in dezimaler Schreibweise !!!)
</code></pre>
<p>Für die Ordnungszahl gilt :</p>
<pre><code>[b]Ordnungszahl = Ordinal + Ordinal base[/b]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1238872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238872</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Mar 2007 11:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 12:06:35 GMT]]></title><description><![CDATA[<p>Super, das war's <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="🙂"
    /> Hätte auch darauf kommen können 1 zu addieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Wenn Du dich so gut auskennst: besteht denn auch eine Möglichkeit die Anzahl der Funktionen herauszufinden? So wie es aussieht wird ja bei 1 begonnnen durchzunummerieren. Somit könnte man praktisch alle Funktionen nacheinander durchgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238882</guid><dc:creator><![CDATA[AntonWert]]></dc:creator><pubDate>Sun, 04 Mar 2007 12:06:35 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 14:05:57 GMT]]></title><description><![CDATA[<p>AntonWert schrieb:</p>
<blockquote>
<p>So wie es aussieht wird ja bei 1 begonnnen durchzunummerieren.</p>
</blockquote>
<p>Nicht unbedingt. Wenn man eine DLL erstellt, kann man den Linker so einstellen, dass die &quot;Ordinal base&quot; auch grösser 1 ist.</p>
<p>AntonWert schrieb:</p>
<blockquote>
<p>besteht denn auch eine Möglichkeit die Anzahl der Funktionen herauszufinden ?</p>
</blockquote>
<p>Die steht im Dump als &quot; xxx export addresse(s)&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238967</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Mar 2007 14:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 14:44:21 GMT]]></title><description><![CDATA[<p>AntonWert schrieb:</p>
<blockquote>
<p>besteht denn auch eine Möglichkeit die Anzahl der Funktionen herauszufinden ?</p>
</blockquote>
<p>Die steht im Dump als &quot; xxx export addresse(s)&quot;.</p>
<p>Schon aber ich dachte jetzt an mein eigenes Programm, tdump ausühren und die Daten auswerten ist ein etwas umständlicher Weg. Wie macht denn tdump dies eigentlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238979</guid><dc:creator><![CDATA[AntonWert]]></dc:creator><pubDate>Sun, 04 Mar 2007 14:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Sun, 04 Mar 2007 14:35:39 GMT]]></title><description><![CDATA[<p>TDUMP kennt das PE-Format und kann es analysieren. Formatspezifische Informationen dazu findest du z.B. <a href="http://www.wotsit.org/download.asp?f=pe1&amp;sc=226311698" rel="nofollow">hier</a>, so daß du dir, wenn dir das nicht zu viel Aufwand ist, einen solchen Parser selbst schreiben kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239000</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 04 Mar 2007 14:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to nicht namentlich bekannte Funktionen aus einer DLL aufrufen on Mon, 05 Mar 2007 14:02:52 GMT]]></title><description><![CDATA[<p>AntonWert schrieb:</p>
<blockquote>
<p>Schon aber ich dachte jetzt an mein eigenes Programm, tdump ausühren und die Daten auswerten ist ein etwas umständlicher Weg.</p>
</blockquote>
<p>Umstand gegen Umstand :</p>
<pre><code class="language-cpp">// Ermittelt die Anzahl aller Funktionen in einer zur Laufzeit geladenen DLL
// !!! Enthält kein Fehlerhandling !!!

 DWORD ImageAddr = (DWORD) LoadLibrary (&quot;WSOCK32&quot;);

 IMAGE_DOS_HEADER       MZHeader = *(IMAGE_DOS_HEADER *)      (ImageAddr);
 IMAGE_NT_HEADERS       PEHeader = *(IMAGE_NT_HEADERS *)      (ImageAddr + MZHeader.e_lfanew);
 IMAGE_EXPORT_DIRECTORY EDHeader = *(IMAGE_EXPORT_DIRECTORY *)(ImageAddr + PEHeader.OptionalHeader.DataDirectory[0].VirtualAddress);

 DWORD AnzahlNamen      = EDHeader.NumberOfNames;      // tdump -&gt; &quot;xxx exported name(s)&quot;
 DWORD AnzahlFunktionen = EDHeader.NumberOfFunctions;  // tdump -&gt; &quot;xxx export adresse(s)&quot;
 DWORD OrdinalBase      = EDHeader.Base;               // tdump -&gt; &quot;Ordinal base&quot;
</code></pre>
<p>Und das ist erst der Anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1239555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1239555</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 05 Mar 2007 14:02:52 GMT</pubDate></item></channel></rss>