Napisałem sobie program, który ma za zadanie wykryć, zaalokowane strony, policzyć je, i wyświetlić nazwy zmapowanych plików jeżeli takie są.
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <Windows.h>
#include <Psapi.h>
using namespace std;
int main (int argc, char **argv)
{
/*
if (argc == 1)
{
fprintf (stderr, "Nie podales pid\n");
system ("pause");
return 1;
}
HANDLE proc = OpenProcess (PROCESS_VM_READ, false, atoi(argv[1]));
if (proc == 0)
{
fprintf (stderr, "Nie ma takiego procesu\n");
system ("pause");
return 2;
}
*/
HANDLE proc = OpenProcess (PROCESS_VM_READ, false, GetCurrentProcessId());
cout << "Pid processu to: " << GetCurrentProcessId() << endl;
system ("pause");
int result;
int pointer;
char data[0x1000];
int datar;
MEMORY_BASIC_INFORMATION info;
unsigned long int page_count_read = 0;
for (pointer = 0; pointer<0xFFFFFFFF; pointer += 0x1000)
{
result = ReadProcessMemory (proc, (PVOID)pointer, data, 0x1000, (SIZE_T *)&datar);
if (result == true && datar>0) {
++page_count_read;
if (VirtualQuery ((PVOID)pointer, &info, sizeof(info)))
{
if (info.Type == MEM_MAPPED)
{
result = GetMappedFileNameA (proc, (LPVOID)pointer, data, 0x1000);
data[result] = '\0';
printf ("%s\r\n", data);
}
}
}
printf ("Przeczytano: powodzenie: %d Wszystkie: %d Czytam adres: 0x%x\r", page_count_read, (unsigned long int)(pointer/0x1000), pointer);
}
CloseHandle (proc);
system ("pause");
return 0;
}
I tu pojawia się problem. Mianowicie, jakoś nie widzę, żeby ani jednego nie było zmapowanego pliku (albo gdzieś popełniam błąd), ale nawet sama binarka pliku powinna być zmapowana i wyświetlona. Co jest nie tak w moim kodzie?