Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите API-функции 
:(
    Опции темы
vzf
Дата 20.10.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте. Подскажите, кто знает, функции дл определения следующих вещей:

- определение адреса, по которому загружен текущий процесс
- определение максимального и минимального адресов виртуальной памяти системы
- определение dll-модулей "подгружаемых" текущим процессом и адресов, по которым они загружены
- определение адресов, по которым текущий процесс не может производить запись

Буду очень признателен.
--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
BUGOR
Дата 21.10.2006, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

- определение адреса, по которому загружен текущий процесс


GetModuleHandle(0);

Это даст смещение образа файла отображённого на память(ну или ImageBase данного процесса, думаю ты именно это имел ввиду), а каждый процесс имеет своё адресное пространство, которое начинается с 0x1000.

Цитата

- определение максимального и минимального адресов виртуальной памяти системы


Что это значит? Каждый процесс имеет своё собственное адресное пространство с адреса 0x1000 до 0x7FFFFFFF и общее пространство(которое доступно только на уровне ядра) начиная с 0x80000000 и до 0xFFFFFFFFF, это собственно  ты хотел узнать? Или самый высокий адресс памяти который используется? Тогда начиная со смещения 0x1000 вызывай:

Код

DWORD VirtualQuery(

    LPCVOID lpAddress,    // address of region 
    PMEMORY_BASIC_INFORMATION lpBuffer,    // address of information buffer  
    DWORD dwLength    // size of buffer 
   );


Пока она возвращает валидную структуру регионы памяти есть(шаг описка определяется MEMORY_BASIC_INFORMATION.RegionSize)

Цитата

- определение dll-модулей "подгружаемых" текущим процессом и адресов, по которым они загружены


Это легко делается с помощью CreateToolhelp32Snapshot с флагом TH32CS_SNAPMODULE, приводить пример не вижу смысла, их хватает и на этом форуме и в сети.

Цитата

- определение адресов, по которым текущий процесс не может производить запись


Опять же вызов VirtualQuery, которая в возвращаемой структуре MEMORY_BASIC_INFORMATION имеет поле AllocationProtect, проверяй его на аттрибут PAGE_READWRITE, PAGE_WRITECOPY, PAGE_EXECUTE_READWRITE и PAGE_EXECUTE_WRITECOPY.


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
vzf
Дата 21.10.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Благодарю.
--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
ЫукпШ
Дата 22.10.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(vzf @ 20.10.2006,  20:20)
- определение адреса, по которому загружен текущий процесс

..WinMain (HINSTANCE hThisInst...

 hThisInst это и есть ImageBase.

 Для любого окна (контрола) приложения его можно определить:
Код

    hInstance  = (HINSTANCE)::GetWindowLong (hWnd,(int)GWL_HINSTANCE);


Это сообщение отредактировал(а) ЫукпШ - 22.10.2006, 16:47
PM MAIL   Вверх
Damarus
Дата 22.10.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(ЫукпШ @  22.10.2006,  17:46 Найти цитируемый пост)
..WinMain (HINSTANCE hThisInst... hThisInst это и есть ImageBase.

А если нет WinMain smile 

PM MAIL ICQ Jabber   Вверх
ЫукпШ
Дата 22.10.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Damarus @ 22.10.2006,  16:56)
А если нет WinMain smile


 У DLL это будет:
 .... DllMain (HANDLE hinstDLL..

 Кроме указанного выше способа - GetModuleHandle(0); - существуют и другие.  smile 
Например:
1. порыцца в PE заголовке конкретного модуля. smile 
2. сделать CreateProcess для PE-TOOLS и считать нужную
информацию из его окошка.  smile  



Это сообщение отредактировал(а) ЫукпШ - 22.10.2006, 18:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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