![]() |
|
|
![]()
|
|
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
Итак, может название не соответствует теме, но все же, как узнать, сколько программа использует памяти для данных(exe) и допустим, если больше 100 byte, то ее завершить или хотя бы узнать об этом.
Программа должна работать под OC Windows XP. Я не прошу писать ее полность, но хотя бы саму суть. -------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
Причем программа сторонняя, т.е. не размер под данные у своей программы, а именно у чужой.
-------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| DenDen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 25.3.2004 Репутация: нет Всего: нет |
Это в с++.
DWORD GetProcessHeaps(DWORD HeapNumber,void** HANDLES,HANDLE hProcess); насчет порядка аргументов не уверен. вернет реальное количество куч процесса. для каждой вызываешь DWORD HeapSize(HANDLE); и суммируешь. Хотя ради прикола можно написать свой дров, чтобы получить доступ в режим ядра и покопаться в Виндовском защищенном режиме(99,99999%, что порушишь всю систему.) |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
туфта все это
кучи тут не причем она при загрузке образа выделяется а потом прога GlobalAlloc делает для выделения памяти надать его перехватывать -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
oleg1973
А поподробнее можно, сам код даже. А вообще цели таковы: 1) Допустим, программа выполняет сложный алгоритм, мне нужно проверить, чтобы время работы этого алгоритма не превышало определенное кол-во миллисекунд. 2) Нужно ограничить программу определенным объемом памяти, в случае переполнения, узнать об этом и завершить программу. -------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| oleg1973 |
|
|||
![]() 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 тоесть при вызове данной функ управление к нам передет таким образом посчитаем ксолько памяти прога вражеская аллокашивает и если че мы ее вырубим ну а время работы прги вражеской также делается креате процесс потом мы делаем к примеру sleep на 1 сек и после етого закрываем процесс вражеский кто не успел тот опоздал -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
oleg1973
А можно тоже, но на Delphi, а то я на C особо не умею кодить, тем более на Visual C.
что это значит? -------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| Dr.Death |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 950 Регистрация: 15.7.2003 Где: Волгоград Репутация: нет Всего: 1 |
Люди, объясните мне!
-------------------- Жизнь коротка, чтобы быть в ней слабым.© Арнольд Шварцнеггер |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
что значит патчить? это ты имел ввиду?
ну заменить кусок кода своим там где вызов процедуры для выделения памяти, подставить аддресс своей процедуры -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| DenDen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 25.3.2004 Репутация: нет Всего: нет |
Вообще говоря, если хочешь узнать сколько всего жрет процесс вместе с кодом и стеками потоков, существует простой способ(но это не в ассемблер, а в с++)
постранично вызывать VirtualQueryEx(HANDLE hProcess, PVOID pvAdr,PBASIC_INFORMATION pbinfo,DWORD chto-to) передавая в pvAdr адрес следующей страницы и так до, по-моему, 0ч08.....адреса.Считаешь Количество занятых страниц. Очень хороший пример приведен в Рихтере "Винда с учетом 64 разрядной версии". Найти Рихтера просто--зайти на форум с++, там что-то о нем обсуждается. Наверняка у того, которые поднял эту тему есть Рихтер в е-варианте. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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'а тоже должен этим страдать)... -------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |