Moinsen, ich habe folgenden code im Internet für einen Pattern scan gefunden:
Main.cpp
Functions.h
Jetzt wenn ich diesen code compilen möchte bekomme ich jedes mal diesen Fehler:
" error C2664: 'GetModuleHandleW': Konvertierung des Parameters 1 von 'char *' in 'LPCWSTR' nicht möglich"
Ich bin jetzt kein Profi, aber ich frage mich wie kann es sein das ein Code der bei jedem anderen zu compilen geht, nur bei mir nicht funktoniert.
Main.cpp
Code:
#include <StdAfx.h>
#include <Windows.h>
#include <iostream>
#include "Functions.h"
using namespace std;
//Define all Here, its easier.
char BytesToPatch[] = "\x90\x90"; //What we are replacing with, for example \x90\ = NOP.
char ProcessName[] = "TheCodenZ.exe"; //Processname
char BytePattern[] = "\xFF\x0E\x8D\x74\x24\x24\xE8\x00\x00\x00\x00\x5F\x5E\xB0\x01\x5B\x8B\xE5\x5D\xC2\x04\x00"; //Our Pattern
char ByteMask[] = "xxxxxxx????xxxxxxxxxxx"; //Our Mask
int Position = 0; //0 means first.
int NoOfBytes = 2;
//Our Main Function
void InitiatePatch()
{
DWORD Bytes = FindPattern(ProcessName, BytePattern, ByteMask);
Bytes+= Position;
WriteToMemory(Bytes, BytesToPatch, NoOfBytes);
}
Code:
#include <Psapi.h>
//Get all module related info, this will include the base DLL.
//and the size of the module
MODULEINFO GetModuleInfo( char *szModule ) //Hier steckt der Fehler
{
MODULEINFO modinfo = {0};
HMODULE hModule = GetModuleHandle(szModule);
if(hModule == 0)
return modinfo;
GetModuleInformation(GetCurrentProcess(), hModule, &modinfo, sizeof(MODULEINFO));
return modinfo;
}
void WriteToMemory(uintptr_t addressToWrite, char* valueToWrite, int byteNum)
{
//used to change our file access type, stores the old
//access type and restores it after memory is written
unsigned long OldProtection;
//give that address read and write permissions and store the old permissions at oldProtection
VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);
//write the memory into the program and overwrite previous value
memcpy( (LPVOID)addressToWrite, valueToWrite, byteNum);
//reset the permissions of the address back to oldProtection after writting memory
VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
}
DWORD FindPattern(char *module, char *pattern, char *mask)
{
//Get all module related information
MODULEINFO mInfo = GetModuleInfo(module);
//Assign our base and module size
//Having the values right is ESSENTIAL, this makes sure
//that we don't scan unwanted memory and leading our game to crash
DWORD base = (DWORD)mInfo.lpBaseOfDll;
DWORD size = (DWORD)mInfo.SizeOfImage;
//Get length for our mask, this will allow us to loop through our array
DWORD patternLength = (DWORD)strlen(mask);
for(DWORD i = 0; i < size - patternLength; i++)
{
bool found = true;
for(DWORD j = 0; j < patternLength; j++)
{
//if we have a ? in our mask then we have true by default,
//or if the bytes match then we keep searching until finding it or not
found &= mask[j] == '?' || pattern[j] == *(char*)(base + i + j);
}
//found = true, our entire pattern was found
//return the memory addy so we can write to it
if(found)
{
return base + i;
}
}
return NULL;
}
" error C2664: 'GetModuleHandleW': Konvertierung des Parameters 1 von 'char *' in 'LPCWSTR' nicht möglich"
Ich bin jetzt kein Profi, aber ich frage mich wie kann es sein das ein Code der bei jedem anderen zu compilen geht, nur bei mir nicht funktoniert.