我将如何着手将 AOB 从 Cheat Engine 修改为 C++?
How would I go about modifying an AOB from Cheat Engine to C++?
我一直在尝试修改我在 C++ 中的 Cheat Engine 中找到的字节数组,但是当我尝试从中读取或写入时遇到访问冲突崩溃。
// Writes pillarbox removal into memory ("33 83 4C 02" to "33 83 4C 00").
*(BYTE*)(*((intptr_t*)((intptr_t)baseModule + 0x1E14850)) + 0x3) = 00;
我想知道我做错了什么,因为对我修改的浮点值使用类似的东西在我取消保护主模块句柄后工作正常。
试试这个:
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);
}
并这样称呼它:
MODULEINFO mInfo = GetModuleInfo("name.exe");
//Assign our base and module size
DWORD baseModule = (DWORD)mInfo.lpBaseOfDll;
uintptr_t addressToWrite = (uintptr_t)baseModule + 0x1E14850;
char writeThis[] = "\x33\x83\x4c\x00";
WriteToMemory(addressToWrite, writeThis, 4);
如果有效请告诉我
我一直在尝试修改我在 C++ 中的 Cheat Engine 中找到的字节数组,但是当我尝试从中读取或写入时遇到访问冲突崩溃。
// Writes pillarbox removal into memory ("33 83 4C 02" to "33 83 4C 00").
*(BYTE*)(*((intptr_t*)((intptr_t)baseModule + 0x1E14850)) + 0x3) = 00;
我想知道我做错了什么,因为对我修改的浮点值使用类似的东西在我取消保护主模块句柄后工作正常。
试试这个:
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);
}
并这样称呼它:
MODULEINFO mInfo = GetModuleInfo("name.exe");
//Assign our base and module size
DWORD baseModule = (DWORD)mInfo.lpBaseOfDll;
uintptr_t addressToWrite = (uintptr_t)baseModule + 0x1E14850;
char writeThis[] = "\x33\x83\x4c\x00";
WriteToMemory(addressToWrite, writeThis, 4);
如果有效请告诉我