Получение личных страниц памяти процесса от себя (как VMMap) - PullRequest
1 голос
/ 01 марта 2020

У меня есть небольшое приложение C ++, которое использует хостинг CLR, мне нужно получить доступ к данным, отображенным в памяти, с помощью do tnet из C ++ (как необработанные данные).

Я обнаружил, что он имеет фиксированный размер , Я хочу знать, как я могу сделать тот же процесс, VMMap получает список частных блоков памяти и проверяет размер, если они соответствуют размеру, который я прочитал по адресу.

Снимок экрана блока памяти

Как я могу получить эти данные памяти?

1 Ответ

1 голос
/ 02 марта 2020

Вот проект с открытым исходным кодом с точной вещью, которую вы хотите, и код написан очень хорошо и чисто, и это помогло мне слишком много раз, Большое спасибо автору.

Посмотрите файл VMMap. cpp.

  1. Поскольку вы упомянули, что код владеет процессом, получите ваш процесс следующим образом:

    process(GetCurrentProcessId()

  2. Используйте детали 5 и получите все необходимые данные.

Вот пример функции с использованием VMMap Library коды:

process* target_process;

unsigned long long GetPrivateMemoryAddressBySize(DWORD pid,long size,int offset)
{
    target_process = &(process(pid));
    process_memory memory(*target_process);

    for (std::map<unsigned long long, process_memory_group>::const_iterator it_group = memory.groups().begin(); it_group != memory.groups().end(); it_group++) {
        if ((*it_group).second.size() / 1024 == size) {
            return (*it_group).second.base() + offset;
        }
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...