Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Подскажите API-функции |
Автор: vzf 20.10.2006, 20:20 |
Здравствуйте. Подскажите, кто знает, функции дл определения следующих вещей: - определение адреса, по которому загружен текущий процесс - определение максимального и минимального адресов виртуальной памяти системы - определение dll-модулей "подгружаемых" текущим процессом и адресов, по которым они загружены - определение адресов, по которым текущий процесс не может производить запись Буду очень признателен. |
Автор: BUGOR 21.10.2006, 07:13 | ||||||||||
GetModuleHandle(0); Это даст смещение образа файла отображённого на память(ну или ImageBase данного процесса, думаю ты именно это имел ввиду), а каждый процесс имеет своё адресное пространство, которое начинается с 0x1000.
Что это значит? Каждый процесс имеет своё собственное адресное пространство с адреса 0x1000 до 0x7FFFFFFF и общее пространство(которое доступно только на уровне ядра) начиная с 0x80000000 и до 0xFFFFFFFFF, это собственно ты хотел узнать? Или самый высокий адресс памяти который используется? Тогда начиная со смещения 0x1000 вызывай:
Пока она возвращает валидную структуру регионы памяти есть(шаг описка определяется MEMORY_BASIC_INFORMATION.RegionSize)
Это легко делается с помощью CreateToolhelp32Snapshot с флагом TH32CS_SNAPMODULE, приводить пример не вижу смысла, их хватает и на этом форуме и в сети.
Опять же вызов VirtualQuery, которая в возвращаемой структуре MEMORY_BASIC_INFORMATION имеет поле AllocationProtect, проверяй его на аттрибут PAGE_READWRITE, PAGE_WRITECOPY, PAGE_EXECUTE_READWRITE и PAGE_EXECUTE_WRITECOPY. |
Автор: vzf 21.10.2006, 21:33 |
Благодарю. |
Автор: ЫукпШ 22.10.2006, 16:46 | ||||
..WinMain (HINSTANCE hThisInst... hThisInst это и есть ImageBase. Для любого окна (контрола) приложения его можно определить:
|
Автор: Damarus 22.10.2006, 16:56 |
А если нет WinMain ![]() |
Автор: ЫукпШ 22.10.2006, 18:01 | ||
У DLL это будет: .... DllMain (HANDLE hinstDLL.. Кроме указанного выше способа - GetModuleHandle(0); - существуют и другие. ![]() Например: 1. порыцца в PE заголовке конкретного модуля. ![]() 2. сделать CreateProcess для PE-TOOLS и считать нужную информацию из его окошка. ![]() |