Перейти к содержанию

Рекомендуемые сообщения

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

while (VirtualQueryEx(hndl, (LPCVOID)(0 + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION)))
	{
		if (mbi.State == MEM_COMMIT)
		{
			cc++;
		}
		offset += mbi.RegionSize;
		
	}

на x32 работает нормально

Ссылка на комментарий
Поделиться на другие сайты

Большее адресное пространство памяти.

Больше памяти для сканирования.

Для примера:

В CheatEngine должен был заметить

начало и конец адресов сканирования. 

x32 - 0 до 7FFFFFFF

x64 - 0 до 7FFFFFFFFFFFFFFF

Изменено пользователем TechnoBOY
Ссылка на комментарий
Поделиться на другие сайты

12 минут назад, TechnoBOY сказал:

x64 - 0 до 7FFFFFFFFFFFFFFF

но ведь процесс не обязательно занимает столько памяти. Нужно как-то определить количество памяти, выделенной под x64 процесс

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Hack сказал:

Скомпилировал как  32bit или 64bit?

32 бит, не думаю, что это влияет.
 

while (VirtualQueryEx(hndl, (LPCVOID)(0 + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION)))
	{
		if (mbi.State == MEM_COMMIT)
		{
			cc++;
		}
		offset += mbi.RegionSize;
		
	}

в цикле перебираются все страницы памяти. Если перебирать их в процессе x64, то это окажется невероятно долго ,вот в чём проблема. Нужно как-то перебирать только страницы определённого процесса

Ссылка на комментарий
Поделиться на другие сайты

Как же не влияет.

Сколько весит переменная где ты хранишь адрес?  32bit? он может хранить такой адрес 7FFFFFFFFFFFFFFF?
VirtualQueryEx и эта функция не может принять 64bit адрес.

 

На сколько долго он у тебя сканирует, бесконечно?

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Senpai сказал:

тогда вопрос, как сканировать только память процесса  и не перебирать все страницы памяти?

 

if(mbi.State != MEM_FREE)

плюс цикл не верный, ты вообще в курсе как будет такой цикл работать?

 

while (VirtualQueryEx(hndl, (LPCVOID)(0 + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION)))

 

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, partoftheworlD сказал:

 


if(mbi.State != MEM_FREE)

плюс цикл не верный, ты вообще в курсе как будет такой цикл работать?

 


while (VirtualQueryEx(hndl, (LPCVOID)(0 + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION)))

 

oeqALabGGnc.jpg
А а как? while(offset<size) ? Я не понял, почему так много страниц памяти? Мне нужна только память процесса

Ссылка на комментарий
Поделиться на другие сайты

54 минуты назад, partoftheworlD сказал:

не понял, но очень интересно, почему, когда я вывожу в цикле размеры страниц памяти, их получается так много? Это нормально чи не?

5 часов назад, Senpai сказал:

oeqALabGGnc.jpg

 

Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, Senpai сказал:

получить адреса страниц памяти определённого процесса

Тогда

18 часов назад, Senpai сказал:

их получается так много? Это нормально чи не?

Нормально

Ссылка на комментарий
Поделиться на другие сайты

В 25.06.2019 в 10:38, imaginary сказал:

Тогда

Нормально

w9xiUT8i4Eg.jpg 
почему получается 34 мб?
hyX8TPdfGrg.jpg 
Хотя 
GetProcessMemoryInfo(hndl, &pmc, sizeof(PROCESS_MEMORY_COUNTERS));  
cout << pmc.WorkingSetSize/1024 << endl;
выдаёт 6512 кб

Ссылка на комментарий
Поделиться на другие сайты

Только что, Senpai сказал:

почему получается 34 мб?

В комментарии к RegionSize
"Размер области, начинающейся с базового адреса, в котором все страницы имеют одинаковые атрибуты, в байтах."
Там ещё есть cb
"Размер структуры в байтах."
Посмотри это, хотя я не особо понимаю зачем тебе, если и так можно получить размер рабочей области

Ссылка на комментарий
Поделиться на другие сайты

В 26.06.2019 в 18:19, imaginary сказал:

В комментарии к RegionSize
"Размер области, начинающейся с базового адреса, в котором все страницы имеют одинаковые атрибуты, в байтах."
Там ещё есть cb
"Размер структуры в байтах."
Посмотри это, хотя я не особо понимаю зачем тебе, если и так можно получить размер рабочей области

нет, вы не поняли. Вопрос в том, почему в сумме страницы памяти процесса (mem_commit) занимают 34 мб?

Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, Senpai сказал:

почему в сумме страницы

Потому что " Размер области, начинающейся с базового адреса, в котором все страницы имеют одинаковые атрибуты, в байтах"

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.