Компилятор ругается на недостающую точку с запятой, хотя ее там по идее быть и не должно

Привет форумчанам, у меня тут возникла проблема с компиляцией
class CBunnyhop
{
public:
static unsigned long_stdcall ThreadRoutine(void*)
{
while (true)
{
DWORD dwMe = debugger.Readmemory<DWORD>(GetModuleClient()->dwBase + dwLocalPlayer);
int CanJump = debugger.ReadMemory<DWORD>(dwMe + dwFlags);
if ((GetAsyncKeyState(BHOP_KEY) & 0x8000) && (CanJump & 0x1 == true)) {
debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 5); // прыгаем в игре
Sleep(50);
debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 4);
}
}
}
};
В третьей строчке ругается на недостающую точку с запятой, хотя ее там быть и не должно.
Код не я пишу. Я пытаюсь разобраться как работаться с потоками/записывать/читать память в процессе.
Вот весь полный код программы

#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>

#define BHOP_KEY 'C' // нажать, чтобы начать прыгать

struct module_t
{
DWORD dwBase, dwSize;
};
`// дебаггер`
class CDebugger
{
private:
DWORD dwPid;
HANDLE hProcess;
public:
bool attach(char* szProcess)
{
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
PROCESSENTRY32 entry;
entry.dwSize = sizeof(entry);
do {
if (!strcmp(entry.szExeFile, szProcess))
{
dwPid = entry.th32ProcessID;
CloseHandle(handle);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid);
return true;
}
} while (Process32Next(handle, &entry));
return false;
}
module_t GetModule(char* szModule)
{
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, NULL);
MODULEENTRY32 entry;
entry.dwSize = sizeof(entry);
do {
if (!strcmp(entry.szModule, szModule))
{
dwPid = entry.th32ProcessID;
CloseHandle(handle);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid);
return { (DWORD)entry.hModule, entry.modBaseSize };
}
} while (Module32Next(handle, &entry));
return{ (DWORD)false, false };
}

template<typename T>
T ReadMemory(DWORD Address)
{
T read;
ReadProcessMemory(hProcess, Address, &read, sizeof(T), 0);
}
template<typename T>
void WriteMemory(DWORD Address, T value)
{
WriteProcessMemory(hProcess, Address, &val, sizeof(T), 0);
}
};

// оффсеты

DWORD dwLocalPlayer = 0xA9948C;
DWORD dwJump = 0x4AD0374;
DWORD dwFlags = 0x100;

CDebugger debugger;
module_t moduleClient;

// client.dll в памяти
module_t* GetModuleClient()
{
if (!moduleClient.dwBase && !moduleClient.dwSize) {
moduleClient = debugger.GetModule("client.dll");
}
return &moduleClient;
}

class CBunnyhop
{
public:
static unsigned long_stdcall ThreadRoutine(void*)
{
while (true)
{
DWORD dwMe = debugger.Readmemory<DWORD>(GetModuleClient()->dwBase + dwLocalPlayer);
int CanJump = debugger.ReadMemory<DWORD>(dwMe + dwFlags);
if ((GetAsyncKeyState(BHOP_KEY) & 0x8000) && (CanJump & 0x1 == true)) {
debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 5); // прыгаем в игре
Sleep(50);
debugger.WriteMemory<int>(GetModuleClient()->dwBase + dwJump, 4);
}
}
}
};

int main()
{
while (!debugger.attach("csgo.exe")) { // вливаемся в процесс csgo.exe
Sleep(100);
}
CreateThread(0, 0, &CBunnyhop::ThreadRoutine, 0, 0, 0);
while (1) {
Sleep(100);
}
}

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.