Сбой программы при попытке разыменования ненулевого указателя на 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;
}