Перейти к содержанию
Авторизация  
Senpai

c++ VirtualQueryEx

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

Почему-то данный код работает очень долго, если использовать на процессе 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 процесс

Поделиться сообщением


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

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

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 адрес.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Hack сказал:

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

Примерно да

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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) ? Я не понял, почему так много страниц памяти? Мне нужна только память процесса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, Senpai сказал:

Мне нужна только память процесса

 

https://github.com/x64dbg/x64dbg/blob/7d53b1ae08814665405e84bf39d0a016ab911df5/src/dbg/memory.cpp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
54 минуты назад, partoftheworlD сказал:

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

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

oeqALabGGnc.jpg

 

Поделиться сообщением


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

кто-то может объяснить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
44 минуты назад, Senpai сказал:

кто-то может объяснить?

А что ты сделать то хочешь 😀?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, imaginary сказал:

А что ты сделать то хочешь 😀?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 сказал:

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

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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