<?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 SymGetModuleInfo64]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe derzeit ein Problem mit der Funktion SymGetModuleInfo64 und zwar schlägt sie immer fehl :p<br />
GetLastError sagt mir Error 87: Falscher Parameter, allerdings kapiere ich nicht, was ich falsch machen sollte. Hier mein Codesnippet:</p>
<pre><code class="language-cpp">IMAGEHLP_MODULE64	Module;

memset( &amp;Module, 0, sizeof(IMAGEHLP_MODULE64));
Module.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);

SymGetModuleInfo64( hProcess, sf.AddrPC.Offset, &amp;Module );
</code></pre>
<p><em>hProcess</em> hole ich zwar nicht über GetCurrentProcess (-1), sondern es ist ein &quot;richtiges&quot; Handle auf meinen Prozess.</p>
<pre><code class="language-cpp">dwProcessId	= GetCurrentProcessId();
hProcess	= OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcessId );
</code></pre>
<p>und <em>sf.AddrPC.Offset</em> wird mir von der Funktion StackWalk64 zurückgegeben.</p>
<p>Ich habe auch den Artikel von Jochen durchgelesen: <a href="http://blog.kalmbachnet.de/?postid=67" rel="nofollow">http://blog.kalmbachnet.de/?postid=67</a><br />
Komischerweiße funktioniert das Testprogramm bei mir auch nicht, SymGetModuleInfo64 schlägt auch dort fehl! Könnte es wirklich an dem Bug liegen? Im System Verzeichniss ist zwar die Ver. 5.1.2600.2180 der Dbghelp.dll aber im Verzeichniss \\Debugging Tools for Windows\\ liegt die Ver. 6.6.0007.5 ?</p>
<p>Hoffe hier kann mir jemand helfen...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5675">@Jochen</a>: Sollte man sich bei deinem Codebeispiel nicht das Auflisten der Module über CreateToolhelp32Snapshot und das Laden dieser mit SymLoadModule64 sparen können, wenn man stattdessen bei SymInitialize den dritten Parameter von FALSE auf TRUE stellt? Und vl. solltest du auch noch dazuschreiben, dass UNICODE definiert sein muss um den Code kompilieren zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165428/probleme-mit-symgetmoduleinfo64</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 05:54:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165428.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Nov 2006 19:22:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Sun, 19 Nov 2006 19:22:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe derzeit ein Problem mit der Funktion SymGetModuleInfo64 und zwar schlägt sie immer fehl :p<br />
GetLastError sagt mir Error 87: Falscher Parameter, allerdings kapiere ich nicht, was ich falsch machen sollte. Hier mein Codesnippet:</p>
<pre><code class="language-cpp">IMAGEHLP_MODULE64	Module;

memset( &amp;Module, 0, sizeof(IMAGEHLP_MODULE64));
Module.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);

SymGetModuleInfo64( hProcess, sf.AddrPC.Offset, &amp;Module );
</code></pre>
<p><em>hProcess</em> hole ich zwar nicht über GetCurrentProcess (-1), sondern es ist ein &quot;richtiges&quot; Handle auf meinen Prozess.</p>
<pre><code class="language-cpp">dwProcessId	= GetCurrentProcessId();
hProcess	= OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcessId );
</code></pre>
<p>und <em>sf.AddrPC.Offset</em> wird mir von der Funktion StackWalk64 zurückgegeben.</p>
<p>Ich habe auch den Artikel von Jochen durchgelesen: <a href="http://blog.kalmbachnet.de/?postid=67" rel="nofollow">http://blog.kalmbachnet.de/?postid=67</a><br />
Komischerweiße funktioniert das Testprogramm bei mir auch nicht, SymGetModuleInfo64 schlägt auch dort fehl! Könnte es wirklich an dem Bug liegen? Im System Verzeichniss ist zwar die Ver. 5.1.2600.2180 der Dbghelp.dll aber im Verzeichniss \\Debugging Tools for Windows\\ liegt die Ver. 6.6.0007.5 ?</p>
<p>Hoffe hier kann mir jemand helfen...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5675">@Jochen</a>: Sollte man sich bei deinem Codebeispiel nicht das Auflisten der Module über CreateToolhelp32Snapshot und das Laden dieser mit SymLoadModule64 sparen können, wenn man stattdessen bei SymInitialize den dritten Parameter von FALSE auf TRUE stellt? Und vl. solltest du auch noch dazuschreiben, dass UNICODE definiert sein muss um den Code kompilieren zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177377</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Sun, 19 Nov 2006 19:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Sun, 19 Nov 2006 20:43:32 GMT]]></title><description><![CDATA[<p>Welche Version von dbgehlp.dll wurde denn nun wirklich geladen?<br />
Kannst Du es mit meinem Beispiel auch nachvollziehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177418</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 19 Nov 2006 20:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Sun, 19 Nov 2006 21:23:05 GMT]]></title><description><![CDATA[<p>Geladen wurde beides mal 5.1.2600.2180, auch für dein Beispiel.<br />
Dein Beispiel schlägst ebenfalls exakt bei der Funktion SymGetModuleInfo64 fehl.</p>
<p>Beides wird mit VS 7.1 und dem 2003 R2 March Edition PSDK kompiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177443</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Sun, 19 Nov 2006 21:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Mon, 20 Nov 2006 06:37:29 GMT]]></title><description><![CDATA[<p>Ich hab das von DIr erwähnte PSDK nicht zu Hand... kannst Du mal die Definition der Struktur &quot;IMAGEHLP_MODULE64&quot; hier posten?<br />
Im mitgelieferten PSDK von VC2003 sieht es so aus:</p>
<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;
</code></pre>
<p>Vermutlich ist die Struktur im neuen PSDK größer geworden und da hat die Funktion wohl noch ein Bug drin...</p>
<p>Im aktuellen dbghelp.h sieht die Struktur ja so aus:</p>
<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
    // new elements: 07-Jun-2002
    CHAR     LoadedImageName[256];   // symbol file name
    CHAR     LoadedPdbName[256];     // pdb file name
    DWORD    CVSig;                  // Signature of the CV record in the debug directories
    CHAR         CVData[MAX_PATH * 3];   // Contents of the CV record
    DWORD    PdbSig;                 // Signature of PDB
    GUID     PdbSig70;               // Signature of PDB (VC 7 and up)
    DWORD    PdbAge;                 // DBI age of pdb
    BOOL     PdbUnmatched;           // loaded an unmatched pdb
    BOOL     DbgUnmatched;           // loaded an unmatched dbg
    BOOL     LineNumbers;            // we have line number information
    BOOL     GlobalSymbols;          // we have internal symbol information
    BOOL     TypeInfo;               // we have type information
    // new elements: 17-Dec-2003
    BOOL     SourceIndexed;          // pdb supports source server
    BOOL     Publics;                // contains public symbols
} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
</code></pre>
<p>Wenn Du mal in meinen Stackwalker.cpp reinschaus (Funktion &quot;GetModuleInfo&quot;), dann siehst Du, dass ich vor dem gleichen Problem stand... (und habs dann aber aufgegeben).<br />
Es scheint so, also ob in der dbghelp.dll ein Vergleich der Struktur-Größe auf &quot;==&quot; (maximal &quot;&lt;=&quot;) erfolgt... was ja weder auf noch abwärtskompatibel ist...<br />
Und da Du nun Header verwendest welche von einem aktuellen PSDK stammen und die dbghelp.dll in einer Version wo es die neuen Struktur-Elemente noch nicht gab, kommt es nun zu einem Konflikt.</p>
<p>Fazit: Du musst due passende dbghelp.dll mitliefern (also am besten die neueste).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177533</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 20 Nov 2006 06:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Mon, 20 Nov 2006 06:46:40 GMT]]></title><description><![CDATA[<p>PS: Du kannst auch in die Funktion reindebuggen, dann siehst Du das Problem...</p>
<p>Jetzt hab ich auch meine &quot;Diskussion&quot; mit Pat Styles wieder gefunden:<br />
<a href="http://groups.google.de/group/microsoft.public.windbg/msg/8ced0295726a4be4" rel="nofollow">http://groups.google.de/group/microsoft.public.windbg/msg/8ced0295726a4be4</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177536</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 20 Nov 2006 06:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Mon, 20 Nov 2006 15:51:43 GMT]]></title><description><![CDATA[<p>Also die Struktur sieht bei meinem PSDK 2003 R2 March Edition so aus:</p>
<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
    // new elements: 07-Jun-2002
    CHAR                        LoadedImageName[256];   // symbol file name
    CHAR                        LoadedPdbName[256];     // pdb file name
    DWORD                       CVSig;                  // Signature of the CV record in the debug directories
    CHAR			            CVData[MAX_PATH * 3];   // Contents of the CV record
    DWORD                       PdbSig;                 // Signature of PDB
    GUID                        PdbSig70;               // Signature of PDB (VC 7 and up)
    DWORD                       PdbAge;                 // DBI age of pdb
    BOOL                        PdbUnmatched;           // loaded an unmatched pdb
    BOOL                        DbgUnmatched;           // loaded an unmatched dbg
    BOOL                        LineNumbers;            // we have line number information
    BOOL                        GlobalSymbols;          // we have internal symbol information
    BOOL                        TypeInfo;               // we have type information
} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
</code></pre>
<p>Beim Header der bei den Debugging Tools for Windows dabei war, siehts wie bei dir aus. Und so wie ich das verstanden habe ist keine Version mit einer anderen DLL, als der dazu ausgelieferten kompatibel. Autsch!</p>
<p>Wenn ich mit dem PSDK von VS 7.1 kompiliere funktioniert die Funktion <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="🙄"
    /><br />
Also mit dem neuen PSDK hatte ich bisher nur Probleme <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="😞"
    /></p>
<p>PS.: Wie kann ich in die SymGetModuleInfo64 Funktion reindebuggen?<br />
PPS.:</p>
<p>yogle schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5675">@Jochen</a>: Sollte man sich bei deinem Codebeispiel nicht das Auflisten der Module über CreateToolhelp32Snapshot und das Laden dieser mit SymLoadModule64 sparen können, wenn man stattdessen bei SymInitialize den dritten Parameter von FALSE auf TRUE stellt?</p>
</blockquote>
<p>MSDN schrieb:</p>
<blockquote>
<p>fInvadeProcess<br />
[in] If this value is TRUE, enumerates the loaded modules for the process and effectively calls the SymLoadModule64 function for each module.</p>
</blockquote>
<p>Kann man sich das jetzt das explizite laden der geladenen DLLs über SymLoadModuleInfo64 sparen, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177906</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Mon, 20 Nov 2006 15:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit SymGetModuleInfo64 on Mon, 20 Nov 2006 16:35:33 GMT]]></title><description><![CDATA[<p>yogle schrieb:</p>
<blockquote>
<p>Beim Header der bei den Debugging Tools for Windows dabei war, siehts wie bei dir aus. Und so wie ich das verstanden habe ist keine Version mit einer anderen DLL, als der dazu ausgelieferten kompatibel. Autsch!</p>
<p>Wenn ich mit dem PSDK von VS 7.1 kompiliere funktioniert die Funktion <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="🙄"
    /><br />
Also mit dem neuen PSDK hatte ich bisher nur Probleme <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="😞"
    /></p>
</blockquote>
<p>Es liegt nicht am PSDK, sondern an den Programmierern der dbghelp.dll (ist bei MS leider ein eigenes Team und weder an das OS noch an das PSDK angebunden...).</p>
<p>yogle schrieb:</p>
<blockquote>
<p>PS.: Wie kann ich in die SymGetModuleInfo64 Funktion reindebuggen?</p>
</blockquote>
<p>In VS musst Du dazu zuerst Ctrl-F11 drücken (Assembler ansicht) und dann kannst Du ganz normal mit F10 auf dem &quot;cal&quot;-Befehl reinspringen.</p>
<p>yogle schrieb:</p>
<blockquote>
<p>MSDN schrieb:</p>
<blockquote>
<p>fInvadeProcess<br />
[in] If this value is TRUE, enumerates the loaded modules for the process and effectively calls the SymLoadModule64 function for each module.</p>
</blockquote>
<p>Kann man sich das jetzt das explizite laden der geladenen DLLs über SymLoadModuleInfo64 sparen, oder nicht?</p>
</blockquote>
<p>Ich hab da kein Vertrauen und lade die Symbole lieber selber...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177941</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 20 Nov 2006 16:35:33 GMT</pubDate></item></channel></rss>