<?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[Speicherbereich einer Anwendung]]></title><description><![CDATA[<p>Hi,<br />
ich will den gesamten Speicher eines Prozesses auslesen und in eine Datei speichern.<br />
Nur, wie bekomm ich heraus ab welchem Offset ich lesen musss und wie groß er ist bzw. bei welchem Offset er endet?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83077/speicherbereich-einer-anwendung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 13:38:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83077.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Aug 2004 14:31:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Tue, 17 Aug 2004 14:31:40 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich will den gesamten Speicher eines Prozesses auslesen und in eine Datei speichern.<br />
Nur, wie bekomm ich heraus ab welchem Offset ich lesen musss und wie groß er ist bzw. bei welchem Offset er endet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584718</guid><dc:creator><![CDATA[INTEGER]]></dc:creator><pubDate>Tue, 17 Aug 2004 14:31:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Tue, 17 Aug 2004 20:13:00 GMT]]></title><description><![CDATA[<p>Viel kann ich wohl nicht helfen (falls überhaupt): <a href="http://msdn.microsoft.com/library/en-us/debug/base/readprocessmemory.asp" rel="nofollow">ReadProcessMemory</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/584925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584925</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Tue, 17 Aug 2004 20:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Tue, 17 Aug 2004 20:15:37 GMT]]></title><description><![CDATA[<p>flenders schrieb:</p>
<blockquote>
<p>Viel kann ich wohl nicht helfen (falls überhaupt): <a href="http://msdn.microsoft.com/library/en-us/debug/base/readprocessmemory.asp" rel="nofollow">ReadProcessMemory</a></p>
</blockquote>
<p>und auch ganz wichtig: <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualqueryex.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualqueryex.asp</a><br />
btw: benutzt du überhaupt windoofs?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/584928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/584928</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 17 Aug 2004 20:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Wed, 18 Aug 2004 05:01:45 GMT]]></title><description><![CDATA[<p>Natülich benutze ich Windows, bin ja im WinAPI Forum.<br />
Das lesen im Speicher ist kein Problem. Ich will nur wissen ab wo der Speicher<br />
meines Programms anfängt und wie lang der ist. Ich hab vorhin gelesen, dass<br />
die meisten Compiler die Basis bei 0x40000 setzten. Ist das bei VC++ genauso?<br />
Außerdem, stellt Windows ja 4Gig virtuellen Speicher zur verfügung. Wobei<br />
ein Teil für Dlls vestimmt ist. Es wär einfacher, wenn ich alles von 0x000000<br />
bis 0xffffff lesen würde. Aber das würde ewig dauern und die Datei wär dann<br />
4 Gig groß und liese sich nicht mit Notepad, Word oder sonstwas öffnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585052</guid><dc:creator><![CDATA[INTEGER]]></dc:creator><pubDate>Wed, 18 Aug 2004 05:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Wed, 18 Aug 2004 07:38:25 GMT]]></title><description><![CDATA[<p>Das kann man sicher nicht so pauschalisieren. Das mit der Basis-Adresse ist afaik nur der Eintritts-Punkt (main bzw. WinMain, oder eben erst noch irgendwelche Runtime-Initialisierungs-Funktionen) - den kann man aber soviel ich weiß auch verändern.</p>
<p>Was genau willst du überhaupt genau auslesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585113</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 18 Aug 2004 07:38:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Wed, 18 Aug 2004 11:11:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich hab vorhin gelesen, dass<br />
die meisten Compiler die Basis bei 0x40000 setzten.</p>
</blockquote>
<p>Diese Adresse ist ja das HINSTANCE was du von WinMain bekommst oder auch von GetModuleHandle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585287</guid><dc:creator><![CDATA[yfxgadfgsdf]]></dc:creator><pubDate>Wed, 18 Aug 2004 11:11:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Wed, 18 Aug 2004 17:27:51 GMT]]></title><description><![CDATA[<p>Ah, danke für den Hinweis! Aber ich hab jetzt leider noch ein Problem.<br />
Als ich den Speicher ab hinstance gelesen hab, kamen nur 68kb zusammen.<br />
Aber wenn man alles von 0x00000000 bis 0xffffffff liest, so kommen 20mb zusammen!<br />
Kann man rausfinden wo die anderen Speicherblöcke anfangen und enden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585698</guid><dc:creator><![CDATA[INTEGER]]></dc:creator><pubDate>Wed, 18 Aug 2004 17:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Wed, 18 Aug 2004 18:23:26 GMT]]></title><description><![CDATA[<p>INTEGER schrieb:</p>
<blockquote>
<p>Kann man rausfinden wo die anderen Speicherblöcke anfangen und enden?</p>
</blockquote>
<p>ich hatte da oben so'nen link gepostet. schau's dir bitte mal an</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585758</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Wed, 18 Aug 2004 18:23:26 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Wed, 18 Aug 2004 18:36:53 GMT]]></title><description><![CDATA[<p>INTEGER: Ich glaube du hast die Speicherverwaltung von Windows nicht ganz verstanden.<br />
Jedes Programm hat 2GB Speicher (aus Gründen, die jetzt zu weit führen würden, sinds nicht 4GB). Der &quot;Start-Offset&quot; ist z.B. bei Notepad.exe 0x40000; aber bei calc.exe ist dieser Offset genau der gleiche.<br />
Eine Speicherstelle wird nämlich nicht nur über den Offset adressiert, sondern auch über den Selektor. Der Selektor steht in einem CPU-Register und wird IMHO normalerweise während der Programmausführung nicht verändert (Code und Daten haben AFAIK verschiedene Selektoren, auch wenn sie physikalisch manchmal (Win9x?) denselben Speicher haben).<br />
notepad.exe bekommt von Windows einen anderen Selektor zugeteilt als calc.exe. calc.exe hat also technisch keinen Zugriff auf den Speicher von notepad.exe. Dieser Zugriff würde einen anderen Selektor voraussetzen, was aber unter Windows zu einer allgemeinen Schutzverletzung führt.<br />
Die einzige Chance an den Speicher von fremden Programmen zu kommen, haben flenders und net gepostet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585771</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Wed, 18 Aug 2004 18:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherbereich einer Anwendung on Thu, 19 Aug 2004 13:39:32 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>INTEGER schrieb:</p>
<blockquote>
<p>Kann man rausfinden wo die anderen Speicherblöcke anfangen und enden?</p>
</blockquote>
<p>ich hatte da oben so'nen link gepostet. schau's dir bitte mal an</p>
</blockquote>
<p>Irgendwie kann ich damit nix Anfangen...<br />
Folgendes hab ich jetzt:</p>
<pre><code class="language-cpp">HWND hwnd=NULL
HANDLE h=NULL
DWORD ID=0;
MEMORY_BASIC_INFORMATION mbi[11];
char s[255];
int  x;

hwnd=FindWindow(NULL,&quot;test&quot;);
GetWindowThreadProcessId(hwnd,ID);
h = OpenProcess(PROCESS_VM_OPERATION | PROCESS_QUERY_INFORMATION | PROCESS_VM_WRITE | PROCESS_VM_READ,FALSE,ID);
VirtualQueryEx(h,hinstance,mbi,10);
x = (int) mbi[0].BaseAddress;
sprintf(s,&quot;%d&quot;,x);
MessageBox(NULL,s,&quot;!&quot;,MB_OK);
CloseHandle(h);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/586384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586384</guid><dc:creator><![CDATA[INTEGER]]></dc:creator><pubDate>Thu, 19 Aug 2004 13:39:32 GMT</pubDate></item></channel></rss>