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?