Сбой программы при попытке разыменования ненулевого указателя на BYTE (без знака)

Я пытаюсь разыменовать modBaseAddr (BYTE* ака unsigned char*) член структуры MODULEENTRY32 в tlhelp32.h, Но когда я пытаюсь разыменовать его, моя программа падает. Я сделал if заявление, чтобы убедиться, что это не было nullptr, Это не так, но моя программа все еще падает. Вот мой код:

#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
using namespace std;

int main()
{
    DWORD pid = 0xFFFFFFFF;
    MODULEENTRY32 mod_entry;
    mod_entry.dwSize = sizeof(MODULEENTRY32);
    HANDLE procH;

    cout << "PID: " << flush;
    cin >> pid;

    procH = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE|TH32CS_SNAPMODULE32, pid);
    if(procH == INVALID_HANDLE_VALUE)
    {
        cout << "Failed to retrieve process handle" << endl;
        CloseHandle(procH);
        return 1;
    }
    if(!(Module32First(procH, &mod_entry))){cout << "Mod32 1st failed\n";CloseHandle(procH);return 1;}

    if(mod_entry.modBaseAddr == nullptr){cout << "modBaseAddr is empty\n";CloseHandle(procH);return 1;}
    BYTE mod_baseaddr = *mod_entry.modBaseAddr; //<-------------------Causes program to crash.

    return 0;
}

0 ответов

Другие вопросы по тегам