<?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 ReadProcessMemory]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>hab mal wieder ein Problem bei dem ich eure Hilfe benötige.<br />
Hab ein netten Code im Internet gefunden und versuche den jetzt mit meinem MinGW Compiler (Dev-CPP IDE) zu kompilieren.<br />
Das Problem ist, dass er an dieser einen Stelle ein Error ausgibt (<strong>subscripted value is neither array nor pointer</strong>).</p>
<p>Hier mal die betroffene Stelle:</p>
<pre><code class="language-cpp">IMAGE_EXPORT_DIRECTORY ExportDir;

for(j = 0; j &lt; ExportDir.NumberOfNames; ++j)
{
    DWORD pFunction = (DWORD)hModule + (DWORD)AddressOfFunctions[j];

    if(pFunction &lt;= dwAddress &amp;&amp; pFunction &gt; dwNearestAddress)
    {
        dwNearestAddress = pFunction;

	    if(!ReadProcessMemory(hProcess, (PVOID)((DWORD)hModule + (DWORD)(&amp;ExportDir.AddressOfNames[j])), &amp;dwNearestName, sizeof(dwNearestName), NULL))    // &lt;-- Hier hängt er
	    return FALSE;

	    dwNearestName = (DWORD) hModule + dwNearestName;
    }
}
</code></pre>
<p>Das Problem ist meiner Meinung nach das wegen dem j, da er auf eine &quot;Liste&quot; zugreifen will:</p>
<pre><code class="language-cpp">(&amp;ExportDir.AddressOfFunctions[j])
</code></pre>
<p>Ich weiß aber nicht wie ich das zum laufen bekommen könnte.</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150321/problem-mit-readprocessmemory</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 00:06:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150321.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Jun 2006 10:45:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Thu, 15 Jun 2006 10:45:12 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>hab mal wieder ein Problem bei dem ich eure Hilfe benötige.<br />
Hab ein netten Code im Internet gefunden und versuche den jetzt mit meinem MinGW Compiler (Dev-CPP IDE) zu kompilieren.<br />
Das Problem ist, dass er an dieser einen Stelle ein Error ausgibt (<strong>subscripted value is neither array nor pointer</strong>).</p>
<p>Hier mal die betroffene Stelle:</p>
<pre><code class="language-cpp">IMAGE_EXPORT_DIRECTORY ExportDir;

for(j = 0; j &lt; ExportDir.NumberOfNames; ++j)
{
    DWORD pFunction = (DWORD)hModule + (DWORD)AddressOfFunctions[j];

    if(pFunction &lt;= dwAddress &amp;&amp; pFunction &gt; dwNearestAddress)
    {
        dwNearestAddress = pFunction;

	    if(!ReadProcessMemory(hProcess, (PVOID)((DWORD)hModule + (DWORD)(&amp;ExportDir.AddressOfNames[j])), &amp;dwNearestName, sizeof(dwNearestName), NULL))    // &lt;-- Hier hängt er
	    return FALSE;

	    dwNearestName = (DWORD) hModule + dwNearestName;
    }
}
</code></pre>
<p>Das Problem ist meiner Meinung nach das wegen dem j, da er auf eine &quot;Liste&quot; zugreifen will:</p>
<pre><code class="language-cpp">(&amp;ExportDir.AddressOfFunctions[j])
</code></pre>
<p>Ich weiß aber nicht wie ich das zum laufen bekommen könnte.</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078073</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Thu, 15 Jun 2006 10:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Thu, 15 Jun 2006 10:59:25 GMT]]></title><description><![CDATA[<p>der code ist schlicht und ergreifend schwachsinn wenn er da so stand...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078086</guid><dc:creator><![CDATA[Renner]]></dc:creator><pubDate>Thu, 15 Jun 2006 10:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Thu, 15 Jun 2006 11:48:26 GMT]]></title><description><![CDATA[<p>hmmm,</p>
<p>er steht exakt so im source und es gibt auch eine binary dazu!<br />
Ich weiß nur nicht mit was er das kompiliert hat, schätze aber mal mit MinGW, da dieser code teil der mingw-utils (drwingw/exchndl.dll) ist!<br />
Also schwachsinn?</p>
<p>Irgendwie muss man es ja hinbekommen, oder?</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078115</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Thu, 15 Jun 2006 11:48:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Thu, 15 Jun 2006 12:38:59 GMT]]></title><description><![CDATA[<p>(DWORD)(&amp;ExportDir.AddressOfNames[j]))</p>
<p>AddressOfNames ist doch ein long...das ist doch kein wunder daß das ned funzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078147</guid><dc:creator><![CDATA[Ranner]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Thu, 15 Jun 2006 13:20:57 GMT]]></title><description><![CDATA[<p>Jep das es net funzt, da es kein array oder pointer, sondern ein DWORD ist, ist mir schon klar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Aber wie bekomm ich es jetzt zum laufen? Ich bekomm's nicht hin.</p>
<p>yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078169</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Thu, 15 Jun 2006 13:20:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Mon, 19 Jun 2006 16:40:06 GMT]]></title><description><![CDATA[<p>Hab jetzt Code gefunden der funktioniert, trotzdem Danke für die Bemühungen.</p>
<p>Hab allerdings noch eine Frage. In was unterscheiden sich eigentlich die ...64 zu den normalen Funktionen?<br />
Also z.B. StackWalk64 zu StackWalk, außer dass sie teilweiße ...64 Parameter haben?</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080752</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Mon, 19 Jun 2006 16:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Mon, 19 Jun 2006 16:55:18 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Hab allerdings noch eine Frage. In was unterscheiden sich eigentlich die ...64 zu den normalen Funktionen?<br />
Also z.B. StackWalk64 zu StackWalk, außer dass sie teilweiße ...64 Parameter haben?</p>
</blockquote>
<p>Die 64-Funktionen haben sie erst eingeführt, nachem es absehbar war, dass auf ein 64-Bit OS umgestellt wird. Hier sind einige Parameter eben &quot;richtige&quot; Pointer und keine DWORDs mehr!</p>
<p>PS: Für eine Anwendung der StackWalk64 Funktione siehe meinen CP Artikel:<br />
<a href="http://www.codeproject.com/threads/StackWalker.asp" rel="nofollow">http://www.codeproject.com/threads/StackWalker.asp</a><br />
oder<br />
<a href="http://www.codeproject.com/tools/leakfinder.asp" rel="nofollow">http://www.codeproject.com/tools/leakfinder.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080766</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 19 Jun 2006 16:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Mon, 19 Jun 2006 17:42:06 GMT]]></title><description><![CDATA[<p>Achso, ich fragte weil ja nur noch die ...64 Funktionen dokumentiert sind.<br />
Wie könnte ich eigentlich aus so einem DWORD Pointer das Modul herausfinden. Über SymGetModuleBase64 und dann SymGetModuleInfo64? Wenn ich die die Rückgabe von SymGetModuleBase für GetModuleFileName verwende bringt er mir ein Warning, was ich vermeiden möchte.</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080819</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Mon, 19 Jun 2006 17:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Mon, 19 Jun 2006 19:27:31 GMT]]></title><description><![CDATA[<p>Schau Dir einfach mal CP Artikel an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080917</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 19 Jun 2006 19:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Wed, 21 Jun 2006 13:29:58 GMT]]></title><description><![CDATA[<p>Hmm habe mich falsch ausgedrückt.<br />
Ich benötige eine Funktion die mir aus einem DWORD(64) Pointer den mir StackWalk64 zurückgibt den Pfad zu dem Modul ausliest.<br />
So eine Funktion kann ich im StackWalker Code und auch sonst nicht finden, außer über GetModuleFileName mit dem Warning das ich vermeiden möchte.</p>
<p>Und gibt es eigentlich eine Funktion die mir sagt auf was für einem Processor ich sitze, also ein X86, ein X64 oder ein IA64?</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082112</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Wed, 21 Jun 2006 13:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Wed, 21 Jun 2006 14:32:41 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Hmm habe mich falsch ausgedrückt.<br />
Ich benötige eine Funktion die mir aus einem DWORD(64) Pointer den mir StackWalk64 zurückgibt den Pfad zu dem Modul ausliest.<br />
So eine Funktion kann ich im StackWalker Code und auch sonst nicht finden, außer über GetModuleFileName mit dem Warning das ich vermeiden möchte.</p>
</blockquote>
<p>???<br />
SymGetModuleInfo64</p>
<p>yogle schrieb:</p>
<blockquote>
<p>Und gibt es eigentlich eine Funktion die mir sagt auf was für einem Processor ich sitze, also ein X86, ein X64 oder ein IA64?</p>
</blockquote>
<p>Wie meinst Du das??? Da Du eh für jede Platform separat compilieren musst, erübrigt sich eigentlich fast die Frage (da Du es über Compiler-Directieves rausbekommst)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082157</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 21 Jun 2006 14:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Wed, 21 Jun 2006 15:30:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef struct _IMAGEHLP_MODULE64 {
    DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_MODULE64)
    DWORD64                     BaseOfImage;            // base load address of module
    DWORD                       ImageSize;              // virtual size of the loaded module
    DWORD                       TimeDateStamp;          // date/time stamp from pe header
    DWORD                       CheckSum;               // checksum from the pe header
    DWORD                       NumSyms;                // number of symbols in the symbol table
    SYM_TYPE                    SymType;                // type of symbols loaded
    CHAR                        ModuleName[32];         // module name
    CHAR                        ImageName[256];         // image name
    CHAR                        LoadedImageName[256];   // symbol file name
} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;

STACKFRAME64 sf64;
IMAGEHLP_MODULE64 Module;

StackWalk64( Bla, sf64, Bla );
SymGetModuleInfo64( Bla, sf64.AddrPC.Offset, &amp;Module )

MessageBox( NULL, Module.ModuleName, &quot;ModulName&quot;, MB_OK );
MessageBox( NULL, Module.ImageName, &quot;ImageName&quot;, MB_OK );
MessageBox( NULL, Module.LoadedImageName, &quot;LoadedImageName&quot;, MB_OK );
</code></pre>
<p>ModuleName ist der Modulname _ohne_ Suffix. ImageName ist der Modulname _mit_ Suffix. LoadedImageName ist der Pfad für die Debugsymbole für das Modul. Ich weiß nicht wie du meinst, dass ich auf meinen Modulpfad komme.</p>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Wie meinst Du das??? Da Du eh für jede Platform separat compilieren musst, erübrigt sich eigentlich fast die Frage (da Du es über Compiler-Directieves rausbekommst)...</p>
</blockquote>
<p>Kann man es denn nicht auch anderst herausbekommen? So das ich nicht 3 oder sogar 5 (64Bit) verschiedene Binarys benötige, sondern eine bei der ich die Parameter für StackWalk64 wie z.B. IMAGE_FILE_MACHINE_AMD64 und die Register während der Laufzeit anpassen könnte. Sonst wäre das äußerst ungeschickt, da ich ja auch nicht immer weiß auf welchem Zielsystem das Programm laufen soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082203</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Wed, 21 Jun 2006 15:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Wed, 21 Jun 2006 19:13:17 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Wie meinst Du das??? Da Du eh für jede Platform separat compilieren musst, erübrigt sich eigentlich fast die Frage (da Du es über Compiler-Directieves rausbekommst)...</p>
</blockquote>
<p>Kann man es denn nicht auch anderst herausbekommen? So das ich nicht 3 oder sogar 5 (64Bit) verschiedene Binarys benötige, sondern eine bei der ich die Parameter für StackWalk64 wie z.B. IMAGE_FILE_MACHINE_AMD64 und die Register während der Laufzeit anpassen könnte. Sonst wäre das äußerst ungeschickt, da ich ja auch nicht immer weiß auf welchem Zielsystem das Programm laufen soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>?????<br />
Hast Du jemamls schon für x64/IA64 Programme erstellt?</p>
<p>Es ist halt nun mal, so dass Du für x86/x64 und IA64 eigene binaries erstellen musst (ok, x86 läuft auch in einer &quot;Simulation&quot; in x64/IA64).</p>
<p>Schau Dir bitte mal meinen &quot;StackWalker&quot; auf Codeproject richtig an; der ist für alle drei Platformen vollständig implementiert und wird eigentlich Deine Fragen beantworten (auch mit dem IMAGE_FILE_MACHINE_AMD64)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082448</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 21 Jun 2006 19:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Wed, 21 Jun 2006 20:44:24 GMT]]></title><description><![CDATA[<p>Nein ich hab noch nie ein Programm für x64, IA64 geschrieben da ich dafür gar keinen Compiler habe.<br />
Ich glaube ich habe dich falsch verstanden. Sehe ich das jetzt richtig, dass wenn ich mein Programm für x86 kompiliere und bei StackWalk64 als Parametet IMAGE_FILE_MACHINE_I386 angebe, es dann auch auf einem x64, IA64 Prozessor funktioniert, da x86 &quot;simuliert&quot; wird? Und wenn ich einen 64Bit Kompiler hätte müsste ich angeben für welchen Prozessor ich kompilieren will und dann den Code darauf anpassen?</p>
<p>Sorry für die blöden Fragen, bin heute etwas langsam.</p>
<p>Gruß<br />
yogle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082513</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Wed, 21 Jun 2006 20:44:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit ReadProcessMemory on Thu, 22 Jun 2006 05:25:49 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Nein ich hab noch nie ein Programm für x64, IA64 geschrieben da ich dafür gar keinen Compiler habe.<br />
Ich glaube ich habe dich falsch verstanden. Sehe ich das jetzt richtig, dass wenn ich mein Programm für x86 kompiliere und bei StackWalk64 als Parametet IMAGE_FILE_MACHINE_I386 angebe, es dann auch auf einem x64, IA64 Prozessor funktioniert, da x86 &quot;simuliert&quot; wird? Und wenn ich einen 64Bit Kompiler hätte müsste ich angeben für welchen Prozessor ich kompilieren will und dann den Code darauf anpassen?</p>
</blockquote>
<p>Treffer, versenkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082606</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 22 Jun 2006 05:25:49 GMT</pubDate></item></channel></rss>