РЕДАКТИРОВАТЬ: Исправил мою проблему .. Я все время использовал неправильный адрес ...
Как я могу прочитать строку или массив символов неизвестного размера из процесса, используя функцию ReadProcessMemory в C ++?
Что я пробовал:
std::string temp;
ReadProcessMemory(*hProcess, (LPCVOID)(address+offset), &temp, sizeof(temp), &bytesRead);
mywString = string2wstring(temp);
Функция string2wstring (): Источник функции
std::wstring string2wstring(const std::string& str)
{
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
std::wstring wstrTo(size_needed, 0);
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
Мне удалось успешнопрочитайте строку, но я продолжаю получать нарушение прав чтения при запуске:
#include <iostream>
#include <windows.h>
#include <string>
void main()
{
HANDLE hProcess;
DWORD pID = 000;
SIZE_T bytesRead;
uintptr_t address = 0x000;
//HWND gameWindow = FindWindow(NULL, L"TEXTCHECK");
//GetWindowThreadProcessId(gameWindow, &pID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
std::string temp;
if (ReadProcessMemory(hProcess, (LPCVOID)(address), &temp, sizeof(temp), &bytesRead))
{
}
std::cout << temp;
system("pause");
}
Тестирование на:
#include <iostream>
#include <string>
#include <Windows.h>
#include <stdlib.h>
using namespace std;
int main() {
int varInt = 123456;
string varString = "DefaultString";
const char arrChar[128] = "Long char array AABBCCDDEEFFGGHHIIJJKKLL";
int* ptr2int = &varInt;
int** ptr2ptr = &ptr2int;
int*** ptr2ptr2 = &ptr2ptr;
while (1) {
cout << "Process ID: " << GetCurrentProcessId() << "\n";
cout << "\n";
cout << "varInt (0x" << &varInt << ") = " << varInt << "\n";
cout << "varString (0x" << &varString << ") = " << varString << "\n";
cout << "arrChar (0x" << &arrChar << ") = " << arrChar << "\n";
cout <<"\n";
cout << "ptr2int (0x" << &ptr2int << ") = 0x" << ptr2int << "\n";
cout << "ptr2ptr (0x" << &ptr2ptr << ") = 0x" << ptr2ptr << "\n";
cout << "ptr2ptr2 (0x" << &ptr2ptr2 << ") = 0x" << ptr2ptr2 << "\n";
cout << "\n";
cout << "Press ENTER to print again.";
cout << "\n";
cout << flush;
cin.get();
cout << "----------------------------------------\n\n\n";
//system("CLS");
}
return 0;
}
Управляемое исключение win32 произошло, когда GETSTRINGFROMMEM.EXE [16984]]