Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Виртуальное адресное пространство процесса.

74K
26 ноября 2011 года
efviop
13 / / 24.11.2011
Добрый день Уважаемые! С недавних пор меня стала волновать одна проблемка. В адресном пространстве любого процесса есть довольно большие участки со значением 0. Занимаясь оптимизацией поиска значений в памяти осенила меня мысль! Зачем перелопачивать эти нулевые участки если искомое значение не ноль? Да и даже при поиске нулевых значений я не думаю что нужное значение находится иммено в этих участках. Так вот вопрос: для чего нужны такие участки в памяти и можно ли их какнибудь обойти?
41K
27 ноября 2011 года
kisssko
108 / / 28.10.2010
А что именно нужно то? :) Не достаточно ясно вопрос поставлен.
14
27 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
В адресном пространстве любого процесса есть и участки доступа к которым нет ни на чтение, ни на запись.
74K
27 ноября 2011 года
efviop
13 / / 24.11.2011
Цитата: Phodopus
В адресном пространстве любого процесса есть и участки доступа к которым нет ни на чтение, ни на запись.



и с этим трудно спорить))

14
28 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Сложно понять о каких именно участках вы ведете речь. Все же ненулевых подавляющее большинство.
74K
28 ноября 2011 года
efviop
13 / / 24.11.2011
Цитата: Phodopus
Сложно понять о каких именно участках вы ведете речь. Все же ненулевых подавляющее большинство.


я имею ввиду нулевые участки станиц регионов доступных для чтения и записи.Сказочно бы было знать адреса и размеры этих участков, чтобы исключить их из поиска))тогда скорость поиска резко возрасла.У меня есть предположение что легендарный ArtMoney известный своей огромной скоростью поиска использует похожий механизм.

74K
28 ноября 2011 года
efviop
13 / / 24.11.2011
вот как я осуществляю поиск целых значений размером 4 байта.
int search; //переменная для поиска
char *pbuff; // указатель на буфер куда я скопировал целый регион из памяти чужого процесса
int size_region; // размер региона
int offset = 0; // смещение в буфере
while(1)
{
if(offset > (size_region-4))
break;
//далее разыменовываю преобразованый указатель и сравниваю
if(search == *(int*)pbuff)
{
cout << "Значение найдено!\n";
offset += 4;
pbuff += 4;
}
else
{
offset ++;
pbuff ++;
}
}
Мне кажется, что в этом цикле оптимизировать уже нечего.
Знать бы мне адреса и размеры нулевых участков.
char *pnull;
int size_null_space;
while(1)
{
if(pbuff == pnull)
{
offset += size_null_space;
pbuff += size_null_space;
}
if(offset > (size_region-4))
break;

if(search == *(int*)pbuff)
{
cout << "Значение найдено!\n";
offset += 4;
pbuff += 4;
}
else
{
offset ++;
pbuff ++;
}
}
260
28 ноября 2011 года
Ramon
1.1K / / 16.08.2003
VirtualQueryEx, NtQueryInformationProcess.
74K
28 ноября 2011 года
efviop
13 / / 24.11.2011



Благодарю! Глянул winternl.h. Впечатляет! Будет чем заняться долгими зимними вечерами))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог