Also ich will den Speicher eines Prozesses auslesen und verarbeiten.
Code von EBFE:
Code:
#include <windows.h>
#include <stdio.h>
#define PROCESS_ID_MANUAL 1168
int dump(void* hProcess,void *base,int size)
{
unsigned char* buff= malloc(size);
int bytes=0;
int result=ReadProcessMemory(hProcess,base,buff,size,&bytes);
if (result!=0)
printf("konnte 0x%X Bytes einlesen von 0x%0.8X\n",bytes,base);
else
{
printf("konnte 0x%0.8X NICHT auslesen\n",base);
free(buff);
return 0;
}
int i;
for (i=1;i<bytes-1 && i<size-1;i++)
{
printf("%0.2X ",buff[i-1]);
if ((i%16==0)) printf("\n"); /*Zeilenumbruch alle 16 Bytes*/
}
free(buff);
return 0;
}
int main()
{
unsigned char puffer[256];
void *pressid;
void *startip;
pressid= OpenProcess(PROCESS_VM_READ,1,PROCESS_ID_MANUAL);
dump(pressid,(void*)0x1000,50);
dump(pressid,(void*)0x400000,50);
dump (pressid,(void*)0x600000,50);
dump (pressid,(void*)0x80000000,50); /*sollte nix ausgeben,
da OS reserviert*/
return 0;
}
Nun möchte ich den ganzen vom Programm belegte Speicher auslesen, dafür will ich die Funktion VirtualQueryEx http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx verwerden.
Mein code:
Code:
struct _MEMORY_BASIC_INFORMATION *rage;
pressid = OpenProcess(PROCESS_VM_READ,1,PROCESS_ID_MANUAL);
VirtualQueryEx(pressid,0,rage,100);
printf("%d", rage->BaseAddress);
gibt mir ein Access Violation zurück ...
warum?