Damit sind wir schon mal weiter
Allerdings: puffer musst du schon mal selbst initialisieren. Deine startip ist auch nicht initialisiert. Um die Funktion zu testen, setze sie erstmal auf 0x400000 oder 0x1000000 (die üblichen Imagebasen der Exen - da sollte sich immer was zum auslesen finden). Außerdem solltest du entweder den Compiler nennen ("einfacher C Compiler" ist keine Bezeichnung ) oder halt auf GCC (MingW32) für Windows umsteigen. Mein GCC wirft bei deinem Code schon ziemlich viele Warnungen
Btw: mit printf %s den Speicherdump auszugeben ist keine gute Idee - es wird nur bis zur ersten 00 ein "string" ausgegeben.
Das ist dein Code etwas angepasst, getestet mit gcc:
Code:
#include <windows.h>
#include <stdio.h>
#define PROCESS_ID_MANUAL 1168
int main()
{
unsigned char puffer[256];
void *pressid;
void *startip;
unsigned int bytes;
pressid= OpenProcess(PROCESS_VM_READ,1,PROCESS_ID_MANUAL);
ReadProcessMemory(pressid,(void*)0x400000,puffer,100,&bytes);
printf("%s", puffer); /* gibt nur MZ aus, weil danach 00 kommen */
/*bisschen aufgeppept*/
printf("konnte 0x%X Bytes einlesen\n",bytes);
int i;
for (i=1;i<bytes-1;i++)
{
printf("%0.2X ",puffer[i-1]);
if ((i%16==0)) printf("\n"); /*Zeilenumbruch alle 16 Bytes*/
}
return 0;
}
Ausgabe (PID ist in dem fall von meinem Explorer)
Code:
MZÉkonnte 0x64 Bytes einlesen
4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 E8 00 00 00
0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68
69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F
74 20