ReadProcessMemory & WriteProcessMemory umschreiben sodass man den Rückgabetyp bestimmen kann



  • Hi, ich wollte mal nachfragen wie es möglich ist diese beiden Funktionen So umzuschreiben das man selber einen Rückgabewert Typ (mittels parameter) bestimmen kann.

    Ich hoffe das mit jmd. Helfen kann 🙂

    float ReadMem(char * Window,long offset){
    	HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle;float Value;
    	LPCSTR GW = Window;
    	GWhwnd = FindWindow(NULL, GW);
    	GetWindowThreadProcessId(GWhwnd, &GWProcID); 
    	GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID);
    	ReadProcessMemory(GWHandle,(LPCVOID)offset, &Value, 4, 0);
    	return Value;
    }
    
    void WriteMem(char * Window,int Value,long offset){
    	HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle;
    	LPCSTR GW = Window;
    	GWhwnd = FindWindow(NULL, GW);
    	GetWindowThreadProcessId(GWhwnd, &GWProcID); 
    	GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID);
    	WriteProcessMemory(GWHandle,(LPVOID)offset, &Value, 4, 0);
    }
    


  • was sollte denn zurückgegeben werden? Die erste Funktion gibt dir den ausgelesenen Wert zurück und die zweite kann außer funktioniert/nicht funktioniert schlecht was zurückgeben.

    greetz KN4CK3R



  • Ja also die Erste kann zurzeit nurn Float zurück geben, ich will aber das ich z.B.

    int i;
    i = ReadMem("blabl","0x000000");

    dann soll er den Speicher als int zurückgeben..

    Bei der anderen funktion (die funktioniert) soll er z.B. einen integer im speicher schreiben oder float usw. (mitteld übergabeparameter z.B.

    WriteMem("blabl","0x000000","float"); <---Als Float
    oder
    WriteMem("blabl","0x000000","int"); <---Als Integer

    MfG



  • Sieh dir mal Templates an.



  • Finde nichts, was mir helfen könnte 😞



  • Hallo

    Dann hast du das Prinzip von Templates nicht verstanden. Denn genau dafür lassen sich Templates einsetzen. Das sollte dann so aussehen (ungetestet) :

    template <class Type> // Template-Deklaration
    Type ReadMem(char * Window,long offset) // Variabler Rückgabetyp
    {
        HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle;
        Type Value; // lokale Variable mit variablem Typ
        LPCSTR GW = Window;
        GWhwnd = FindWindow(NULL, GW);
        GetWindowThreadProcessId(GWhwnd, &GWProcID);
        GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID);
        ReadProcessMemory(GWHandle,(LPCVOID)offset, &Value, sizeof(Type), 0); // Statt festen 4 Bytes muß die Größe des Types bestimmt werden
        return Value;
    }
    
    // Analog die Schreibfunktion
    template <class Type>
    void WriteMem(char * Window,Type Value,long offset){
        HWND GWhwnd;DWORD GWProcID;HANDLE GWHandle;
        LPCSTR GW = Window;
        GWhwnd = FindWindow(NULL, GW);
        GetWindowThreadProcessId(GWhwnd, &GWProcID);
        GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID);
        WriteProcessMemory(GWHandle,(LPVOID)offset, &Value, sizeof(Type), 0);
    }
    

    bis bald
    akari



  • Leider gehts so immer noch nciht, er sagt immer
    Vorlageargument für ReturnType konnte nicht hergeleitet werden.

    template <class ReturnType> // Template-Deklaration
    ReturnType ReadMemAll(char * Window,long offset) // Variabler Rückgabetyp
    {
        DWORD GWProcID;HANDLE GWHandle;ReturnType Value;
        GetWindowThreadProcessId(FindWindow(NULL, Window), &GWProcID);
        GWHandle = OpenProcess(PROCESS_ALL_ACCESS, false, GWProcID);
        ReadProcessMemory(GWHandle,(LPCVOID)offset, &Value, sizeof(ReturnType), 0); // Statt festen 4 Bytes muß die Größe des Types bestimmt werden
        return Value;
    } 
    
    void main () 
    {
    	float Wert = ReadMemAll(WindowName,0x00000000);
    	cout<<Wert<<endl;
    }
    


  • Wie könnte er auch. Gib ihn explizit an.



  • Okay, funktioniert, danke für die schnelle Hilfe :xmas1:

    void main () 
    {
    	cout<<ReadMemAll<typ>(FensterName,0x00000000)<<endl;
    }
    


  • Edit: zu spät.


Anmelden zum Antworten