<?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[Speicher eines anderen Prozesses auslesen]]></title><description><![CDATA[<p>Ich brauche ein wenig hilfe beim schreiben einer Funktion die es mir erlaubt den Speicher eines anderen Prozesses auszulesen. Ich stelle mir die Syntax wie folgt vor:</p>
<pre><code>staticAddress = 0x026E0DC4
processId = GetProcessIdByName(processName)
processHandle = GetProcessHandle(processId)
processBaseAddress = GetBaseAddress(processHandle)
addressToRead = processBaseAddress+staticAddress
readValueAsInt = ReadMemoryInt(processHandle, addressToRead)
readValueAsFloat = ReadMemoryFloat(processHandle, addressToRead)
readValueAsString = ReadMemoryString(processHandle, addressToRead)
</code></pre>
<p>Wäre das so überhaupt möglich?</p>
<p>Mein erster (sehr lückenhafter) Ansatz:</p>
<pre><code>#include &lt;Windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;tlhelp32.h&gt;
#include &lt;string&gt;
#include &lt;psapi.h&gt;
#pragma comment( lib, &quot;psapi&quot; )

int GetProcessId(char* processName) {
    PROCESSENTRY32 pe32;
    HANDLE hSnapshot = NULL;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (Process32First(hSnapshot, &amp;pe32)) {
        do {
            if (strcmp(pe32.szExeFile, processName) == 0)
                break;
        } while(Process32Next(hSnapshot, &amp;pe32));
    }

    if( hSnapshot != INVALID_HANDLE_VALUE )
        CloseHandle( hSnapshot );

    return pe32.th32ProcessID;  
}

int GetModuleBase(HANDLE processHandle, string &amp;sModuleName) 
{ 
   HMODULE *hModules; 
   char szBuf[50]; 
   DWORD cModules; 
   DWORD dwBase = -1; 
   //------ 

   EnumProcessModules(processHandle, hModules, 0, &amp;cModules); 
   hModules = new HMODULE[cModules/sizeof(HMODULE)]; 

   if(EnumProcessModules(processHandle, hModules, cModules/sizeof(HMODULE), &amp;cModules)) { 
      for(int i = 0; i &lt; cModules/sizeof(HMODULE); i++) { 
         if(GetModuleBaseName(processHandle, hModules[i], szBuf, sizeof(szBuf))) { 
            if(sModuleName.compare(szBuf) == 0) { 
               dwBase = (DWORD)hModules[i]; 
               break; 
            } 
         } 
      } 
   } 

   delete[] hModules; 

   return dwBase; 
}

int ReadMemoryInt(HANDLE processHandle, LPCVOID address) {
    //LPVOID buffer = ??;
    //SIZE_T size = ??;
    SIZE_T NumberOfBytesToRead = 4; //??
    ReadProcessMemory(processHandle, address, buffer, size, NumberOfBytesToRead)
    return buffer; //??
}

int ReadMemoryFloat(HANDLE processHandle, LPCVOID address) {
    //LPVOID buffer = ??;
    //SIZE_T size = ??;
    SIZE_T NumberOfBytesToRead = 8; //??
    ReadProcessMemory(processHandle, address, buffer, size, NumberOfBytesToRead)
    return buffer; //??
}

int ReadMemoryString(HANDLE processHandle, LPCVOID address) {
    //LPVOID buffer = ??;
    //SIZE_T size = ??;
    SIZE_T NumberOfBytesToRead = 999; //??
    ReadProcessMemory(processHandle, address, buffer, size, NumberOfBytesToRead)
    return buffer; //??
}

int main()
{
    //integer von &quot;Program.exe&quot;+0x05D8A3C4 auslesen
    int address = 0x05D8A3C4;
    char* processName = &quot;Program.exe&quot;;
    int processId = GetProcessId(processName);
    HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, false, processId);
    int processBaseAddress = GetModuleBase(processHandle, (string)&quot;Program.exe&quot;);
    LPCVOID actualAddress = processBaseAddress+address;
    int readValue = ReadMemory(processHandle, actualAddress);
    std::cout &lt;&lt; readValue &lt;&lt; std::endl;
    CloseHandle(processHandle);
    return 0;
}
</code></pre>
<p>Ich bin leider echt neu was C++ angeht und komme nur schwer voran,<br />
ist natürlich auch nicht gerade das Anfängerfreundlichste Gebiet was ich mir da ausgesucht habe..<br />
Aber es wäre echt nett wenn ihr mal einen Blick auf meinen Code werfen könntet.<br />
Ich bin mir an einigen stellen nicht sicher gewesen und an anderen stellen hatte ich nicht einmal eine Idee für einen Ansatz.</p>
<p>Ich hoffe ihr könnt mir helfen.<br />
mfg,<br />
forivin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321170/speicher-eines-anderen-prozesses-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 02:18:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321170.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Oct 2013 12:50:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicher eines anderen Prozesses auslesen on Sat, 26 Oct 2013 14:28:20 GMT]]></title><description><![CDATA[<p>Ich brauche ein wenig hilfe beim schreiben einer Funktion die es mir erlaubt den Speicher eines anderen Prozesses auszulesen. Ich stelle mir die Syntax wie folgt vor:</p>
<pre><code>staticAddress = 0x026E0DC4
processId = GetProcessIdByName(processName)
processHandle = GetProcessHandle(processId)
processBaseAddress = GetBaseAddress(processHandle)
addressToRead = processBaseAddress+staticAddress
readValueAsInt = ReadMemoryInt(processHandle, addressToRead)
readValueAsFloat = ReadMemoryFloat(processHandle, addressToRead)
readValueAsString = ReadMemoryString(processHandle, addressToRead)
</code></pre>
<p>Wäre das so überhaupt möglich?</p>
<p>Mein erster (sehr lückenhafter) Ansatz:</p>
<pre><code>#include &lt;Windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;tlhelp32.h&gt;
#include &lt;string&gt;
#include &lt;psapi.h&gt;
#pragma comment( lib, &quot;psapi&quot; )

int GetProcessId(char* processName) {
    PROCESSENTRY32 pe32;
    HANDLE hSnapshot = NULL;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (Process32First(hSnapshot, &amp;pe32)) {
        do {
            if (strcmp(pe32.szExeFile, processName) == 0)
                break;
        } while(Process32Next(hSnapshot, &amp;pe32));
    }

    if( hSnapshot != INVALID_HANDLE_VALUE )
        CloseHandle( hSnapshot );

    return pe32.th32ProcessID;  
}

int GetModuleBase(HANDLE processHandle, string &amp;sModuleName) 
{ 
   HMODULE *hModules; 
   char szBuf[50]; 
   DWORD cModules; 
   DWORD dwBase = -1; 
   //------ 

   EnumProcessModules(processHandle, hModules, 0, &amp;cModules); 
   hModules = new HMODULE[cModules/sizeof(HMODULE)]; 

   if(EnumProcessModules(processHandle, hModules, cModules/sizeof(HMODULE), &amp;cModules)) { 
      for(int i = 0; i &lt; cModules/sizeof(HMODULE); i++) { 
         if(GetModuleBaseName(processHandle, hModules[i], szBuf, sizeof(szBuf))) { 
            if(sModuleName.compare(szBuf) == 0) { 
               dwBase = (DWORD)hModules[i]; 
               break; 
            } 
         } 
      } 
   } 

   delete[] hModules; 

   return dwBase; 
}

int ReadMemoryInt(HANDLE processHandle, LPCVOID address) {
    //LPVOID buffer = ??;
    //SIZE_T size = ??;
    SIZE_T NumberOfBytesToRead = 4; //??
    ReadProcessMemory(processHandle, address, buffer, size, NumberOfBytesToRead)
    return buffer; //??
}

int ReadMemoryFloat(HANDLE processHandle, LPCVOID address) {
    //LPVOID buffer = ??;
    //SIZE_T size = ??;
    SIZE_T NumberOfBytesToRead = 8; //??
    ReadProcessMemory(processHandle, address, buffer, size, NumberOfBytesToRead)
    return buffer; //??
}

int ReadMemoryString(HANDLE processHandle, LPCVOID address) {
    //LPVOID buffer = ??;
    //SIZE_T size = ??;
    SIZE_T NumberOfBytesToRead = 999; //??
    ReadProcessMemory(processHandle, address, buffer, size, NumberOfBytesToRead)
    return buffer; //??
}

int main()
{
    //integer von &quot;Program.exe&quot;+0x05D8A3C4 auslesen
    int address = 0x05D8A3C4;
    char* processName = &quot;Program.exe&quot;;
    int processId = GetProcessId(processName);
    HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, false, processId);
    int processBaseAddress = GetModuleBase(processHandle, (string)&quot;Program.exe&quot;);
    LPCVOID actualAddress = processBaseAddress+address;
    int readValue = ReadMemory(processHandle, actualAddress);
    std::cout &lt;&lt; readValue &lt;&lt; std::endl;
    CloseHandle(processHandle);
    return 0;
}
</code></pre>
<p>Ich bin leider echt neu was C++ angeht und komme nur schwer voran,<br />
ist natürlich auch nicht gerade das Anfängerfreundlichste Gebiet was ich mir da ausgesucht habe..<br />
Aber es wäre echt nett wenn ihr mal einen Blick auf meinen Code werfen könntet.<br />
Ich bin mir an einigen stellen nicht sicher gewesen und an anderen stellen hatte ich nicht einmal eine Idee für einen Ansatz.</p>
<p>Ich hoffe ihr könnt mir helfen.<br />
mfg,<br />
forivin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363072</guid><dc:creator><![CDATA[forivin]]></dc:creator><pubDate>Sat, 26 Oct 2013 14:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher eines anderen Prozesses auslesen on Sun, 27 Oct 2013 19:43:52 GMT]]></title><description><![CDATA[<p>Jo, so aehnlich geht es. Ist hier aber falsch. Weil C++ kann nicht, was du willst. Dazu einfach Bedienungsanleitung fuer dein OS lesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2363350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2363350</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Sun, 27 Oct 2013 19:43:52 GMT</pubDate></item></channel></rss>