#include <windows.h>
#include <cstring>
#include <iostream>
bool ReadRemoteString(HANDLE hProcess, LPCVOID address, char* buffer, size_t maxSize) {
// Читаем строку из удаленного процесса
SIZE_T bytesRead;
if (!ReadProcessMemory(hProcess, address, buffer, maxSize - 1, &bytesRead)) {
return false;
}
// Гарантируем нуль-терминатор
buffer[bytesRead] = '\0';
return true;
}
// Пример использования
int main() {
// Предположим, у нас есть HANDLE процесса и адрес строки
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, processId);
LPCVOID remoteStringAddress = (LPCVOID)0x12345678; // Пример адреса
const size_t BUFFER_SIZE = 256;
char buffer[BUFFER_SIZE];
if (ReadRemoteString(hProcess, remoteStringAddress, buffer, BUFFER_SIZE)) {
const char* str = buffer;
// Используем strlen для получения длины
size_t length = strlen(str);
std::cout << "String length: " << length << std::endl;
std::cout << "String content: " << str << std::endl;
// Сравнение с другой строкой
if (strcmp(str, "target string") == 0) {
std::cout << "Strings match!" << std::endl;
}
// Или через strlen для проверки длины
if (strlen(str) > 0) {
std::cout << "String is not empty" << std::endl;
}
} else {
DWORD error = GetLastError();
std::cerr << "Failed to read process memory. Error: " << error << std::endl;
}
CloseHandle(hProcess);
return 0;
}