<?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[Unlogischer Fehler mit ReadProcessMemory und einer struct.]]></title><description><![CDATA[<p>Hallo.<br />
Ich bin am Verzweifeln.</p>
<p>Ich versuche gerade eine Datei aus einer Anwendung zur Laufzeit auszulesen. Ich weiß wie die Datei aufgebaut ist und wo die Datei im Speicher liegt und gebe dementsprechend die adresse an.</p>
<p>Ich habe folgende struct:</p>
<pre><code>struct XM_PatternHeader_0103 
{   
    DWORD HeaderSize; // size of this header (always 9)

    BYTE PackingType; // packing type (always 0)
    WORD NumberOfRows, // number of rows in pattern (1..256)
    DataSize; // packed pattern data size
};
</code></pre>
<p>Und hiermit will ich diese füllen:</p>
<pre><code>ReadProcessMemory(hProcess, (void *)dwTempAddress, &amp;ModPatternHeader_0103, sizeof(ModPatternHeader_0103), &amp;lpNumberOfBytesRead);
</code></pre>
<p>Ich habe mal nen debugger angeschmissen. Im Speicher des Prozesses steht: 0x09 0x12 0x13 0x14 0x00 0x40 0x00 0xB6 0x04<br />
lustigerweise steht das hier nach ReadProcessMemory in der struct:<br />
**<br />
Headersize: 0x14131209 //Richtig (habe zum testen 121314 in den speicher geschrieben)<br />
PackingType: 0x00 //Richtig<br />
Number of Rows: 0xb600 //Falsch, ein byte wurde einfach übersprungen. Richtig wäre 0x0040<br />
DataSize: 0x8304 //Folgefehler, richtig wäre 0x04B6<br />
**<br />
Woran liegt das? Es wird jedesmal das 0x40 byte einfach übersprungen. Ich habe es mal probeweise in einen char einlesen lassen. Es wird korrekt eingelesen, nur bei beim kopieren in ModPatternHeader_0103 wird das byte dann einfach übersprungen. Hab es auch schon mit class anstatt struct probiert, ändert nix. Weiß jemand rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156243/unlogischer-fehler-mit-readprocessmemory-und-einer-struct</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 13:35:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156243.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Aug 2006 02:48:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unlogischer Fehler mit ReadProcessMemory und einer struct. on Tue, 15 Aug 2006 02:57:22 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich bin am Verzweifeln.</p>
<p>Ich versuche gerade eine Datei aus einer Anwendung zur Laufzeit auszulesen. Ich weiß wie die Datei aufgebaut ist und wo die Datei im Speicher liegt und gebe dementsprechend die adresse an.</p>
<p>Ich habe folgende struct:</p>
<pre><code>struct XM_PatternHeader_0103 
{   
    DWORD HeaderSize; // size of this header (always 9)

    BYTE PackingType; // packing type (always 0)
    WORD NumberOfRows, // number of rows in pattern (1..256)
    DataSize; // packed pattern data size
};
</code></pre>
<p>Und hiermit will ich diese füllen:</p>
<pre><code>ReadProcessMemory(hProcess, (void *)dwTempAddress, &amp;ModPatternHeader_0103, sizeof(ModPatternHeader_0103), &amp;lpNumberOfBytesRead);
</code></pre>
<p>Ich habe mal nen debugger angeschmissen. Im Speicher des Prozesses steht: 0x09 0x12 0x13 0x14 0x00 0x40 0x00 0xB6 0x04<br />
lustigerweise steht das hier nach ReadProcessMemory in der struct:<br />
**<br />
Headersize: 0x14131209 //Richtig (habe zum testen 121314 in den speicher geschrieben)<br />
PackingType: 0x00 //Richtig<br />
Number of Rows: 0xb600 //Falsch, ein byte wurde einfach übersprungen. Richtig wäre 0x0040<br />
DataSize: 0x8304 //Folgefehler, richtig wäre 0x04B6<br />
**<br />
Woran liegt das? Es wird jedesmal das 0x40 byte einfach übersprungen. Ich habe es mal probeweise in einen char einlesen lassen. Es wird korrekt eingelesen, nur bei beim kopieren in ModPatternHeader_0103 wird das byte dann einfach übersprungen. Hab es auch schon mit class anstatt struct probiert, ändert nix. Weiß jemand rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117332</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 15 Aug 2006 02:57:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unlogischer Fehler mit ReadProcessMemory und einer struct. on Tue, 15 Aug 2006 07:13:32 GMT]]></title><description><![CDATA[<p>Muss die Struktur vielleicht packed compiliert werden?<br />
Probiers mal, z.B. mit</p>
<pre><code class="language-cpp">#pragma pack(push, 1)
struct YourStruct{
}
#pragma pack(pop)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1117359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117359</guid><dc:creator><![CDATA[Cosmixx]]></dc:creator><pubDate>Tue, 15 Aug 2006 07:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to Unlogischer Fehler mit ReadProcessMemory und einer struct. on Tue, 15 Aug 2006 08:28:39 GMT]]></title><description><![CDATA[<p>ja kann sein. Ich habe den code aus nem delphi source konvertiert. Da stand was von packed record. Was ist dieses packed zeugs eigentlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117380</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 15 Aug 2006 08:28:39 GMT</pubDate></item><item><title><![CDATA[Reply to Unlogischer Fehler mit ReadProcessMemory und einer struct. on Tue, 15 Aug 2006 08:38:19 GMT]]></title><description><![CDATA[<p>Danke vielmals, es funktioniert. :)) hm, jetzt hab ich wohl umsonst die ganzen readprocessmemorys gemacht.<br />
Ich habe schon gemerkt dass er den speicher irgendwie versucht in blöcke einzuteilen.<br />
Ich konnte zwar einzelne bytes zwischenschieben, allerdings konnte ich nicht die kompletten datentypen verschieben.</p>
<p>Ich dachte schon es sei ein bug. Aber so ist das beim Programmieren, man lernt immer dazu. <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/1117388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117388</guid><dc:creator><![CDATA[Perner]]></dc:creator><pubDate>Tue, 15 Aug 2006 08:38:19 GMT</pubDate></item><item><title><![CDATA[Reply to Unlogischer Fehler mit ReadProcessMemory und einer struct. on Tue, 15 Aug 2006 08:39:15 GMT]]></title><description><![CDATA[<p>Um es dem Prozessor leichter zu machen auf Daten zuzugreifen werden die auf bestimmte Boundaries (grenzen) aligned (asugerichtet). Meistens sind es 4 Byte Grenzen oder gar 8 Bytes. Definierst Du also zwei WORD's hintereinander, so wird entsprechend dem alignment 2 oder 6 Bytes aufgefüllt. mit pragma pack(1) schaltest Du dieses Alignment praktisch aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117389</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 15 Aug 2006 08:39:15 GMT</pubDate></item><item><title><![CDATA[Reply to Unlogischer Fehler mit ReadProcessMemory und einer struct. on Tue, 15 Aug 2006 08:58:36 GMT]]></title><description><![CDATA[<p>Exakt. Das Pendant zu #pragma pack( push, 1) ist in Delphi der packed record.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117398</guid><dc:creator><![CDATA[Cosmixx]]></dc:creator><pubDate>Tue, 15 Aug 2006 08:58:36 GMT</pubDate></item></channel></rss>