ReadProcessMemory dokleja do bufora "coś" spoza zakresu

0

Witam.
Mam problem, a mianowicie do bufora Temp wkradają się jakieś dzikie znaczki spoza zakresu. np
jak mam ciąg znaków Retur00n3 to dokleja mi do tego 200
mimo iż count zwrócił 9 (i tyle powinno pobrać ReadProcessMemory do Temp) to jednak wyświetla 12 znaków (Retur00n3200).
Ale jeszcze większa magia, do count w 2gim ReadProcessMemory doałem 1 i w count w Temp = new char[count]; nagle zaczęło działać poprawnie z niewiadomych przyczyn, ale to tak nie może być bo nie wiem co będzie w przypadku dłuższych ciągów.

void MemReadString(unsigned long Address){
 DWORD NB;
 char *Temp;
 DWORD count;
 ReadProcessMemory(GetCurrentProcess(),(void*)(Address-4),&count,4,&NB);
 Temp = new char[count];
 NB=0;
 ReadProcessMemory(GetCurrentProcess(),(void*)Address,Temp,count,&NB);
 cout << count << Temp <<endl;
 
} 
0

Dodanie pobrania jednego znaku naprawiło problem, bo zapewne chodzi o \0 kończące napis.

0

Teoretycznie tak, ale czy samo dodanie 1 do count przy inicjalizacji Temp nie powinno załatwić sprawy tzn
_ - 0x00
X - jakaś dana
Temp | _ _ _ _ _ _ _ _ _ _
Bufor przekopiowany | X X X X X X X X X
a w tym przypadku wyglądało to tak
Temp | _ _ _ _ _ _ _ _ _ _
Bufor przekopiowany | X X X X X X X X X X X X
I zauważyłem że jeżeli ciąg jest pusty (0 elementów) to się sypie i wyświetla jakieś liczby

1

Ah, to on się nie kończy tym zerem w pamięci.

Temp = new char[count]; -> Temp = new char[count + 1];

Temp[count] = '\0';

0

Ok dzięki, sprawdziłem kilka przypadków i działa mi poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1