Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер памяти для данных, программы 
:(
    Опции темы
Dr.Death
Дата 19.4.2004, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Итак, может название не соответствует теме, но все же, как узнать, сколько программа использует памяти для данных(exe) и допустим, если больше 100 byte, то ее завершить или хотя бы узнать об этом.
Программа должна работать под OC Windows XP. Я не прошу писать ее полность, но хотя бы саму суть.


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
Dr.Death
Дата 19.4.2004, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Причем программа сторонняя, т.е. не размер под данные у своей программы, а именно у чужой.


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
DenDen
Дата 19.4.2004, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 25.3.2004

Репутация: нет
Всего: нет



Это в с++.
DWORD GetProcessHeaps(DWORD HeapNumber,void** HANDLES,HANDLE hProcess);
насчет порядка аргументов не уверен.
вернет реальное количество куч процесса.
для каждой вызываешь
DWORD HeapSize(HANDLE);
и суммируешь. Хотя ради прикола можно написать свой дров, чтобы получить доступ в режим ядра и покопаться в Виндовском защищенном режиме(99,99999%, что порушишь всю систему.)
PM MAIL   Вверх
oleg1973
Дата 19.4.2004, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



туфта все это
кучи тут не причем
она при загрузке образа выделяется
а потом прога GlobalAlloc делает для выделения памяти
надать его перехватывать


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Dr.Death
Дата 20.4.2004, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



oleg1973
А поподробнее можно, сам код даже.
А вообще цели таковы:
1) Допустим, программа выполняет сложный алгоритм, мне нужно проверить, чтобы время работы этого алгоритма не превышало определенное кол-во миллисекунд.
2) Нужно ограничить программу определенным объемом памяти, в случае переполнения, узнать об этом и завершить программу.


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 21.4.2004, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



яб сделал так
invoke CreateProcess,0,fnome,0,0,FALSE,CREATE_SUSPENDED,0, 0,sinfo, pinfo
создаем процесс но не запускаем его
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,[pinfo.dwProcessId]
открываем его
invoke VirtualProtectEx (тут всякие параметры)
меняем у процесса атрибуты (точнее у памяти куда он загружен) на реад/врите
invoke WriteProcessMemory
патчим кусок кода откуда вызывается GlobalAlloc
тоесть при вызове данной функ управление к нам передет
таким образом посчитаем ксолько памяти прога вражеская аллокашивает и если че мы ее вырубим

ну а время работы прги вражеской также делается smile.gif
креате процесс
потом мы делаем к примеру sleep на 1 сек
и после етого закрываем процесс вражеский
кто не успел тот опоздал smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Dr.Death
Дата 21.4.2004, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



oleg1973
А можно тоже, но на Delphi, а то я на C особо не умею кодить, тем более на Visual C.
Цитата
патчим кусок кода откуда вызывается GlobalAlloc

что это значит? wow.gif smile.gif



--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
Dr.Death
Дата 23.4.2004, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 950
Регистрация: 15.7.2003
Где: Волгоград

Репутация: нет
Всего: 1



Люди, объясните мне!


--------------------
Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 23.4.2004, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



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


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
DenDen
Дата 24.4.2004, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 25.3.2004

Репутация: нет
Всего: нет



Вообще говоря, если хочешь узнать сколько всего жрет процесс вместе с кодом и стеками потоков, существует простой способ(но это не в ассемблер, а в с++)
постранично вызывать VirtualQueryEx(HANDLE hProcess, PVOID pvAdr,PBASIC_INFORMATION pbinfo,DWORD chto-to) передавая в pvAdr адрес следующей страницы и так до, по-моему, 0ч08.....адреса.Считаешь Количество занятых страниц. Очень хороший пример приведен в Рихтере "Винда с учетом 64 разрядной версии". Найти Рихтера просто--зайти на форум с++, там что-то о нем обсуждается. Наверняка у того, которые поднял эту тему есть Рихтер в е-варианте.
PM MAIL   Вверх
p0s0l
Дата 25.4.2004, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Под NTями (2k,xp) можно юзать perfomance counters.
Например, для твоего случая подойдет счетчик с таким именем (в примере - блокнот):
\Process(NOTEPAD)\Private Bytes
Проверял - сбацал прогу, которая время от времени выделяла 1 мб памяти. Этот Private Bytes увеличивался на 1 мег каждый раз...
Для получения значения счетчика тебе понадобятся такие функции:
PdhOpenQuery
PdhAddCounter
PdhCollectQueryData
PdhGetFormattedCounterValue
PdhCloseQuery

Есть еще счетчик "Virtual Bytes", но он считает объем всей виртуальной памяти, т.е. и подключенные DLL (способ DenDen'а тоже должен этим страдать)...


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.