Исключение при чтении адреса памяти или записи в неё.

Gafask

Участник
Автор темы
137
13
Драсте , такая проблема у меня . Решил стикать с гта са и решил начать с самого простого для левой программы но столкнулся с такой проблемой я не разу не писал консольные типо читы ну длл я писал и мне збс была а щас мне надо мониторить и тд и консолька это самый лучший вариант ( консольное приложение ) ладно сразу к вопросу .


При запуске локального отладчика и когда код доходит до строки 9 или - 12 выбивает исключение .

xCd634xwjPY.jpg

Вызвано исключение: нарушение доступа для чтения.
Y было 0x79B2DC.


При запуске просто консольного приложение она крашится не через отладчик .


Что не так делаю не пойму в гта са все работает вроде .



Test.cPP):
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    std::cout << "Консоль запущена" << "\n";
    DWORD pid = 0;
    HWND hwnd = ::FindWindow(NULL, ("Тестовый Полигон ИИ"));
    OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
    // ТАк
    float* Y = (float*)(0x79B2DC);
    *Y += 1;
    //Или так
    *reinterpret_cast<float*>(*reinterpret_cast<DWORD*>(*reinterpret_cast<DWORD*>(0xBA412C) + 0x44) + 0xB988) -= 0.1250f;
    //    А толку 0
   // Ошибка одна и таже если идти по отладчику а если просто запустить консоль то крашь )

}

Спасибо за внимание . Вроде норм описал проблему ) .
 
Решение
ДА спасибо , работает а не подскажешь еще как действовать с (DWORD)GetModuleHandle("Тестовый Полигон ИИ.exe"); типо
укей я смог считать и вывести и записать в него которые без смещения а вот которые имеют формат Тестовый Полигон ИИ.exe+0x2B19D
как с ними быть ? Просто так консолька же не поймет шо Тестовый Полигон ИИ.exe + 0х0000 нужно считать .
так:

C++:
HMODULE GetModuleHandleExtern(const char *szModuleName, DWORD dwProcessId)
{
    if (!szModuleName || !dwProcessId) { return NULL; }
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
    if (hSnap == INVALID_HANDLE_VALUE) { return NULL; }
    MODULEENTRY32 me;
    me.dwSize = sizeof(MODULEENTRY32);
    if (Module32First(hSnap, &me))
    {...

Gafask

Участник
Автор темы
137
13
ты обращаешься в область памяти локального приложения, то есть твоей консоли.
тебе нужно использовать функцию ReadProcessMemory для чтения памяти из другого процесса
ок щас попробую , если все норм то закрою тему ) . ( Решено помечу )
ты обращаешься в область памяти локального приложения, то есть твоей консоли.
тебе нужно использовать функцию ReadProcessMemory для чтения памяти из другого процесса
ДА спасибо , работает а не подскажешь еще как действовать с (DWORD)GetModuleHandle("Тестовый Полигон ИИ.exe"); типо
укей я смог считать и вывести и записать в него которые без смещения а вот которые имеют формат Тестовый Полигон ИИ.exe+0x2B19D
как с ними быть ? Просто так консолька же не поймет шо Тестовый Полигон ИИ.exe + 0х0000 нужно считать .
 
Последнее редактирование:

CleanLegend

Известный
Всефорумный модератор
476
929
ДА спасибо , работает а не подскажешь еще как действовать с (DWORD)GetModuleHandle("Тестовый Полигон ИИ.exe"); типо
укей я смог считать и вывести и записать в него которые без смещения а вот которые имеют формат Тестовый Полигон ИИ.exe+0x2B19D
как с ними быть ? Просто так консолька же не поймет шо Тестовый Полигон ИИ.exe + 0х0000 нужно считать .
так:

C++:
HMODULE GetModuleHandleExtern(const char *szModuleName, DWORD dwProcessId)
{
    if (!szModuleName || !dwProcessId) { return NULL; }
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
    if (hSnap == INVALID_HANDLE_VALUE) { return NULL; }
    MODULEENTRY32 me;
    me.dwSize = sizeof(MODULEENTRY32);
    if (Module32First(hSnap, &me))
    {
        while (Module32Next(hSnap, &me))
        {
            if (!strcmp(me.szModule, szModuleName))
            {
                CloseHandle(hSnap);
                return me.hModule;
            }
        }
    }
    CloseHandle(hSnap);
    return NULL;
}
либо вызывать GetModuleHandle удаленно - https://www.blast.hk/threads/33035/
 

Gafask

Участник
Автор темы
137
13
так:

C++:
HMODULE GetModuleHandleExtern(const char *szModuleName, DWORD dwProcessId)
{
    if (!szModuleName || !dwProcessId) { return NULL; }
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
    if (hSnap == INVALID_HANDLE_VALUE) { return NULL; }
    MODULEENTRY32 me;
    me.dwSize = sizeof(MODULEENTRY32);
    if (Module32First(hSnap, &me))
    {
        while (Module32Next(hSnap, &me))
        {
            if (!strcmp(me.szModule, szModuleName))
            {
                CloseHandle(hSnap);
                return me.hModule;
            }
        }
    }
    CloseHandle(hSnap);
    return NULL;
}
либо вызывать GetModuleHandle удаленно - https://www.blast.hk/threads/33035/
Ок , спасибо .