Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 3
1

Поиск в занятой памяти процессом

26.08.2016, 12:00. Показов 740. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день такой вопрос, как осуществить поиск значений только в занятой памяти одного процесса через другой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DWORD ProcessID;
HANDLE Process;
 
PROCESSENTRY32 ProcessEntry;
 
bool ProcessTry(char* addres) {
    ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
 
    do {
 
        if (!strcmp(ProcessEntry.szExeFile, addres)) {
            CloseHandle(hSnap);
 
            ProcessID = ProcessEntry.th32ProcessID;
            Process = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
            std::cout << "Process founded !";
            return true;
        }
 
    } while (Process32Next(hSnap, &ProcessEntry));
 
    CloseHandle(hSnap);
    std::cerr << "Process not found !" << std::endl;
    return false;
}
Вот так ищу хэндл процесса, а как отсканить память занятую только этим процессом и можно ли, пробовал чистый перебор от 0x00000000 до 0xffffffff очень долго, если кто подскажет буду благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2016, 12:00
Ответы с готовыми решениями:

Отследить изменение памяти сторонним процессом
Есть основное приложение1. Есть приложение2, которое считывает и изменяет его память. Надо...

Показать размер памяти, используемой конкретным процессом
Пытаюсь сделать программу которая будет показывать кол-во используемой памяти конкретным процессом....

Определение размера динамической памяти, используемой процессом
Доброго всем времени суток! В общем задача следующая... Я, с помощь функции CreateProcess() создаю...

Определение памяти, занятой процессом
Ребят не подскажите как определить память занятую определенным процессом? Необходимо получить имя...

3
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
26.08.2016, 15:00 2
Я сам такое не делал, но вообще мне кажется что тебе поможет функция VirtualQueryEx, просто просто пробегись с ее помощью по регионам процесса и проверяй структуру MEMORY_BASIC_INFORMATION, если в ней поле State равно MEM_COMMIT, значит на этот регион адресного пространства спроецирована физическая память, то есть этот регион не просто зарезервирован, а именно связан с физ. памятью. Вот такие вот регионы и читай.

А вообще, что значит "занятой памяти"?
0
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 3
26.08.2016, 15:23  [ТС] 3
ASCII, ну вплане ту которую сейчас использует процесс, спасибо за наводку попробую реализовать, если что выйдет скину код
0
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
26.08.2016, 16:09 4
Вот пример, только в данном случае программа просматривает регионы адресного пространства у себя в процессе. Замени на VirtualQueryEx, прикрути это к своему варианту.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <string>
#include <exception>
#include <cstdlib>
#include <windows.h>
#include <tchar.h>
 
std::wstring getProtectString(DWORD protect)
{
    switch (protect)
    {
    case PAGE_READONLY:
        return std::wstring{ L"PAGE_READONLY" };
 
    case PAGE_READWRITE:
        return std::wstring{ L"PAGE_READWRITE" };
 
    case PAGE_WRITECOPY:
        return std::wstring{ L"PAGE_WRITECOPY" };
 
    case PAGE_EXECUTE_READ:
        return std::wstring{ L"PAGE_EXECUTE_READ" };
 
    case PAGE_EXECUTE_READWRITE:
        return std::wstring{ L"PAGE_EXECUTE_READWRITE" };
 
    case PAGE_EXECUTE_WRITECOPY:
        return std::wstring{ L"PAGE_EXECUTE_WRITECOPY" };
 
    case 0:
        return std::wstring{ L"PAGE_NOACCESS" };
 
    default:
        return std::wstring{ L"Unknown" };
    }
}
 
std::wstring getStateString(DWORD state)
{
    switch (state)
    {
    case MEM_COMMIT:
        return std::wstring{ L"MEM_COMMIT" };
 
    case MEM_RESERVE:
        return std::wstring{ L"MEM_RESERVE" };
 
    case MEM_FREE:
        return std::wstring{ L"MEM_FREE" };
 
    default:
        return std::wstring{ L"Unknown" };
    }
}
 
std::wstring getTypeString(DWORD type)
{
    switch (type)
    {
    case MEM_IMAGE:
        return std::wstring{ L"MEM_IMAGE" };
 
    case MEM_MAPPED:
        return std::wstring{ L"MEM_MAPPED" };
 
    case MEM_PRIVATE:
        return std::wstring{ L"MEM_PRIVATE" };
 
    default:
        return std::wstring{ L"Unknown" };
    }
}
 
int _tmain(int argc, TCHAR* argv[])
{
    void* pMemory = 0;
    std::wstring allocProtect;
    std::wstring protect;
    std::wstring state;
    std::wstring type;
    MEMORY_BASIC_INFORMATION memInfo;
 
    for (; VirtualQuery(pMemory, &memInfo, sizeof(memInfo));)
    {
        if (!memInfo.AllocationBase)
        {
            pMemory = (char*)pMemory + memInfo.RegionSize;
            continue;
        }
                
                // relies on copy elision
        allocProtect = getProtectString(memInfo.AllocationProtect);
        protect = getProtectString(memInfo.Protect);
        state = getStateString(memInfo.State);
        type = getTypeString(memInfo.Type);
 
        std::wcout << L"Allocation base: " << memInfo.AllocationBase << std::endl;
        std::wcout << L"Base address:" << memInfo.BaseAddress << std::endl;
        std::wcout << L"Region size: " << memInfo.RegionSize << L" bytes" << std::endl;
        std::wcout << L"Allocation protect: " << allocProtect << std::endl;
        std::wcout << L"Protect: " << protect << std::endl;
        std::wcout << L"State: " << state << std::endl;
        std::wcout << L"Type: " << type << std::endl << std::endl;
 
        pMemory = (char*)pMemory + memInfo.RegionSize;
    }
 
    std::wcin.get();
}
0
26.08.2016, 16:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2016, 16:09
Помогаю со студенческими работами здесь

Освобождение памяти, занятой вектором
У меня задача требует чтобы у вектора было в резерве не более 100 элементов. При постоянном росте...

Получить количество памяти (RAM) на компьютере - занятой и всего
Дано: Microsoft Visual Studio 2013 .Net 4.5.xxx Хочу получить либо объём установленной памяти...

Как убрать пробел из значения переменной для занятой памяти?
Перенесено из темы &quot;Экранирование номера потока в перенаправлении вывода Echo&quot;. Не могу убрать...

Windows/CMD - Закрытие всех заданных процессов, сумма занятой памяти которых больше определенного количества!
Добрый день! Подскажите пожалуйста, в общем есть задача убивать процессы из диспетчера задач сумма...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru