<?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[Compiler Fehler in Function]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich wollte fragen ob ihr mir helfen könnt, da ich keine Ahnung habe wie ich das Problem lösen kann. Wieso kann er es nicht konvertieren?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;Windows.h&gt;
#include &lt;psapi.h&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;stdio.h&gt;

using namespace std;

DWORD getProcessIdByExeName(const char* exeName)
{
        DWORD aProcesses[1024];
        DWORD cProcesses;
        DWORD cbNeeded;

        if(!EnumProcesses(aProcesses, sizeof(aProcesses), &amp;cbNeeded))
                return 0;

        cProcesses = cbNeeded / sizeof(DWORD);

        DWORD processId;

        unsigned int i;
        for(i = 0; i &lt; cProcesses; i++)
        {
                if(aProcesses[i] != 0)
                {
                        processId = aProcesses[i];

                        char processName[MAX_PATH];

                        HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);

                        if(processHandle)
                        {
                                HMODULE hMod;

                                if(EnumProcessModules(processHandle, &amp;hMod, sizeof(hMod), &amp;cbNeeded))
                                        GetModuleBaseName(processHandle, hMod, processName, sizeof(processName) / sizeof(char));
                        }

                        CloseHandle(processHandle);

                        if(strcmp(processName, exeName) == 0)
                                return processId;
                }
        }

        return 0;
}

DWORD getMemoryAddressByStringPattern(HANDLE processHandle, const std::string&amp; pattern)
{
    uint8_t* p = NULL;
    MEMORY_BASIC_INFORMATION mbi;
    for(p = NULL; VirtualQueryEx(processHandle, p, &amp;mbi, sizeof(mbi)) == sizeof(mbi); p += mbi.RegionSize)
    {
        vector&lt;char&gt; lpBuff;
        vector&lt;char&gt;::iterator lpPos;
        if(mbi.State == MEM_COMMIT &amp;&amp; (mbi.Type == MEM_MAPPED || mbi.Type == MEM_PRIVATE))
        {
            DWORD bytesRead;
            lpBuff.resize(mbi.RegionSize);
            ReadProcessMemory(processHandle, p, &amp;lpBuff[0], mbi.RegionSize, &amp;bytesRead);
            lpBuff.resize(bytesRead);

            DWORD lpAddr = std::string(lpBuff.begin(), lpBuff.end()).find(pattern);
            if(lpAddr != string::npos)
                return lpAddr + (DWORD)p;

        }
    }
    return 0;
}

int main()
{
    DWORD xbProcessId = getProcessIdByExeName(&quot;XenoSuite.exe&quot;);
    if(xbProcessId == 0)
    {
        cout &lt;&lt; &quot;&gt;&gt; XenoSuite not found, please open an instance to patch it!&quot; &lt;&lt; endl;
        return 0;
    }
    else
        cout &lt;&lt; &quot;&gt;&gt; XenoSuite found, now we open process!&quot; &lt;&lt; endl;

    HANDLE xbProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, xbProcessId);
    if(xbProcessHandle == NULL)
    {
        cout &lt;&lt; &quot;&gt;&gt; Cannot open process of XenoSuite (open patcher with administrator privilegles)&quot; &lt;&lt; endl;
        return 0;
    }
    else
        cout &lt;&lt; &quot;&gt;&gt; Patcher got access to the process, now we'll find addresses to patch!&quot; &lt;&lt; endl;

    const string patternToFind = &quot;%s%s%s%s&quot;;
    const string replacePattern = &quot;AAAAAAAA&quot;;

    DWORD xbAddr1 = getMemoryAddressByStringPattern(xbProcessHandle, patternToFind);
    printf(&quot;&gt;&gt; Memory address: 0x%lX\n&quot;, (DWORD)xbAddr1);
    WriteProcessMemory(xbProcessHandle, (LPVOID)(xbAddr1), replacePattern.c_str(), replacePattern.size() + 1, NULL);

    CloseHandle(xbProcessHandle);
    cout &lt;&lt; &quot;&gt;&gt; Now you can login with your fake data!&quot; &lt;&lt; endl;
    system(&quot;pause&quot;);
}
</code></pre>
<p>Line 65 Col. 87 [Error] cannot convert 'DWORD* {aka long unsigned int*}' to 'SIZE_T* {aka long long unsigned int*}' for argument '5' to 'WINBOOL ReadProcessMemory(HANDLE, LPCVOID, LPVOID, SIZE_T, SIZE_T*)'</p>
<p>Line 70 Col. 40 [Error] cast from 'uint8_t* {aka unsigned char*}' to 'DWORD {aka long unsigned int}' loses precision [-fpermissive]</p>
<p>In function 'int main()':</p>
<p>Line 102 Col 57 Breaker.cpp [Warning] cast to pointer from integer of different size [-Wint-to-pointer-cast]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327553/compiler-fehler-in-function</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 01:10:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327553.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Aug 2014 07:45:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compiler Fehler in Function on Tue, 19 Aug 2014 07:45:13 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich wollte fragen ob ihr mir helfen könnt, da ich keine Ahnung habe wie ich das Problem lösen kann. Wieso kann er es nicht konvertieren?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;Windows.h&gt;
#include &lt;psapi.h&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;stdio.h&gt;

using namespace std;

DWORD getProcessIdByExeName(const char* exeName)
{
        DWORD aProcesses[1024];
        DWORD cProcesses;
        DWORD cbNeeded;

        if(!EnumProcesses(aProcesses, sizeof(aProcesses), &amp;cbNeeded))
                return 0;

        cProcesses = cbNeeded / sizeof(DWORD);

        DWORD processId;

        unsigned int i;
        for(i = 0; i &lt; cProcesses; i++)
        {
                if(aProcesses[i] != 0)
                {
                        processId = aProcesses[i];

                        char processName[MAX_PATH];

                        HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);

                        if(processHandle)
                        {
                                HMODULE hMod;

                                if(EnumProcessModules(processHandle, &amp;hMod, sizeof(hMod), &amp;cbNeeded))
                                        GetModuleBaseName(processHandle, hMod, processName, sizeof(processName) / sizeof(char));
                        }

                        CloseHandle(processHandle);

                        if(strcmp(processName, exeName) == 0)
                                return processId;
                }
        }

        return 0;
}

DWORD getMemoryAddressByStringPattern(HANDLE processHandle, const std::string&amp; pattern)
{
    uint8_t* p = NULL;
    MEMORY_BASIC_INFORMATION mbi;
    for(p = NULL; VirtualQueryEx(processHandle, p, &amp;mbi, sizeof(mbi)) == sizeof(mbi); p += mbi.RegionSize)
    {
        vector&lt;char&gt; lpBuff;
        vector&lt;char&gt;::iterator lpPos;
        if(mbi.State == MEM_COMMIT &amp;&amp; (mbi.Type == MEM_MAPPED || mbi.Type == MEM_PRIVATE))
        {
            DWORD bytesRead;
            lpBuff.resize(mbi.RegionSize);
            ReadProcessMemory(processHandle, p, &amp;lpBuff[0], mbi.RegionSize, &amp;bytesRead);
            lpBuff.resize(bytesRead);

            DWORD lpAddr = std::string(lpBuff.begin(), lpBuff.end()).find(pattern);
            if(lpAddr != string::npos)
                return lpAddr + (DWORD)p;

        }
    }
    return 0;
}

int main()
{
    DWORD xbProcessId = getProcessIdByExeName(&quot;XenoSuite.exe&quot;);
    if(xbProcessId == 0)
    {
        cout &lt;&lt; &quot;&gt;&gt; XenoSuite not found, please open an instance to patch it!&quot; &lt;&lt; endl;
        return 0;
    }
    else
        cout &lt;&lt; &quot;&gt;&gt; XenoSuite found, now we open process!&quot; &lt;&lt; endl;

    HANDLE xbProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, xbProcessId);
    if(xbProcessHandle == NULL)
    {
        cout &lt;&lt; &quot;&gt;&gt; Cannot open process of XenoSuite (open patcher with administrator privilegles)&quot; &lt;&lt; endl;
        return 0;
    }
    else
        cout &lt;&lt; &quot;&gt;&gt; Patcher got access to the process, now we'll find addresses to patch!&quot; &lt;&lt; endl;

    const string patternToFind = &quot;%s%s%s%s&quot;;
    const string replacePattern = &quot;AAAAAAAA&quot;;

    DWORD xbAddr1 = getMemoryAddressByStringPattern(xbProcessHandle, patternToFind);
    printf(&quot;&gt;&gt; Memory address: 0x%lX\n&quot;, (DWORD)xbAddr1);
    WriteProcessMemory(xbProcessHandle, (LPVOID)(xbAddr1), replacePattern.c_str(), replacePattern.size() + 1, NULL);

    CloseHandle(xbProcessHandle);
    cout &lt;&lt; &quot;&gt;&gt; Now you can login with your fake data!&quot; &lt;&lt; endl;
    system(&quot;pause&quot;);
}
</code></pre>
<p>Line 65 Col. 87 [Error] cannot convert 'DWORD* {aka long unsigned int*}' to 'SIZE_T* {aka long long unsigned int*}' for argument '5' to 'WINBOOL ReadProcessMemory(HANDLE, LPCVOID, LPVOID, SIZE_T, SIZE_T*)'</p>
<p>Line 70 Col. 40 [Error] cast from 'uint8_t* {aka unsigned char*}' to 'DWORD {aka long unsigned int}' loses precision [-fpermissive]</p>
<p>In function 'int main()':</p>
<p>Line 102 Col 57 Breaker.cpp [Warning] cast to pointer from integer of different size [-Wint-to-pointer-cast]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414090</guid><dc:creator><![CDATA[Ray Rewind]]></dc:creator><pubDate>Tue, 19 Aug 2014 07:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler Fehler in Function on Tue, 19 Aug 2014 07:59:48 GMT]]></title><description><![CDATA[<pre><code>DWORD bytesRead;
            //[..]
            ReadProcessMemory(processHandle, p, &amp;lpBuff[0], mbi.RegionSize, &amp;bytesRead);
</code></pre>
<p>Hier muss <code>bytesRead</code> stattdessen als <code>SIZE_T</code> deklariert werden.</p>
<pre><code>return lpAddr + (DWORD)p;
</code></pre>
<p>Ich bin mir nicht ganz sicher was das soll; falls du aber tatsächlich genau das da stehen haben willst, schreibe</p>
<pre><code>return lpAddr + reinterpret_cast&lt;DWORD&gt;(p);
</code></pre>
<p>Auch dieser Cast wird allerdings fehlschlagen wenn <code>DWORD</code> kleiner ist als ein Zeigertyp auf deiner Maschine. Keine Ahnung was das ganze soll. In einen <code>std::intptr_t</code> passt er per Definition rein. Seit wann aber addiert man zwei Adressen?</p>
<p>Was ich ganz und gar nicht verstehen kann ist warum du <code>getMemoryAddressByStringPattern</code> einen <code>DWORD</code> zurückgeben lässt obwohl es laut Namen ja eine Adresse zurückgibt. <code>DWORD</code> ist auf einigen Maschinen zu klein (da Zeiger dort 64-Bit groß sind). Warum nicht <code>void*</code> (aka <code>LPVOID</code> )?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414094</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 19 Aug 2014 07:59:48 GMT</pubDate></item></channel></rss>