Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Как получить const char* в эксернале

Пример:
Expand Collapse Copy
#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;

}
Вот тебе пример, надеюсь дальше сам поймешь
 
Пример:
Expand Collapse Copy
#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;

}
Вот тебе пример, надеюсь дальше сам поймешь
От души
 
Назад
Сверху Снизу