![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Адресное пространство проги [D6, WinXP]
Alex_win © (2002-07-17 09:26:00)Уважаемые мастера извените, что повторяюсь, но что-то не вижу ни своих ни чьих-либо вопросов в этом форуме за 15,16 числа.
Подскажите как определить адреса моей и какой-либо любой другой работающей проги в оперативной памяти (начальный адрес, сегменты и т.д.)
Заранее спасибо.
Digitman (2002-07-18 14:19:00) [1]>Edmond
Да как тебе будет угодно)
P.S.
"Вот приедет барин, барин нас рассудит"))) ... стоило ли копаться в его словах...
Edmond (2002-07-18 14:12:00) [2]Digitman © (17.07.02 15:11)...
ОК!!! Не будем копаться в словах :).
Это неинтересно.
Digitman (2002-07-18 14:07:00) [3]>Edmond
Кто "он" ? Автор ? Да, он и написал - "память", причем уточнил - "оперативная". Заметь - не линейная, не виртуальная, не еще какая-то там, а именно - оперативная. А оперативная память, imho - далеко не виртуальная ...
Edmond (2002-07-18 14:00:00) [4]НЕТ!!!!!! Извините, но это неточность.
Цитата:
TMemoryBasicInformation.BaseAddress и TMemoryBasicInformation.AllocationBase возвращают виртуальные адреса, а не физические.
Вот если б он написал "память". Я согласен.
Но "Виртуальные адреса"....
Digitman (2002-07-18 13:52:00) [5]>Edmond
А тут автор как бы "оперативную память" упомянул. Как прикажешь ассоциировать это ? Думаю, что все-таки с физ.памятью, а не виртуальной. Потому как понятие "сегмент" фигурирует и в вирт. и в физ.модели АП
Edmond (2002-07-18 13:31:00) [6]Секундочку, что это за бред с виртуальными адресами и физическими!!!!!!!!!
Digitman (2002-07-17 15:11:00) [7]>watcher
Насчет возможностей на эту тему ф-ции VirtualQueryEx() ты ошибаешься.
TMemoryBasicInformation.BaseAddress и TMemoryBasicInformation.AllocationBase возвращают виртуальные адреса, а не физические.
watcher (2002-07-17 14:41:00) [8]вся информация возвращается простым вызовом VirtualQueryEx()
(и, если очень нужно, GetModuleBaseName()).
На практике это редко нужно, но бывает...
Да и вопрос так звучал.
Digitman (2002-07-17 14:23:00) [9]Физические адреса страничных сегментов можно, конечно, узнать, получив доступ к таблице GDT.
В Маздае это достаточно просто, на NT-платформах - весьма проблематично.
Но - зачем ? Каков практ.смысл сего для прикладных задач, решаемых в Делфи ?
watcher (2002-07-17 14:09:00) [10]to Edmond © (17.07.02 12:28)
GetModuleHandle() работает только в текущем процессе
+ нужно знать имя модуля. Можно конечно вызвать EnumProcessModules(), но зачем ?
Edmond (2002-07-17 12:28:00) [11]Ещё раз отвечаю:
HMODULE GetModuleHandle( PCTSTR pszModule);
Возвращает описатель, базовый адрес процесса, или DLL.
Если системе удаёться загрузить ваш процесс по установленному адресу, который обычно есть как 0x00400000, то эта функция вернёт именно 0x00400000.
Edmond
watcher (2002-07-17 12:18:00) [12]VirtualQuery(Ex) ()
Digitman (2002-07-17 10:14:00) [13]А это зачем ?
IlyaA (2002-07-17 10:14:00) [14]Реальные адреса ты не сможешь узнать (почитай про устройство функционирования Virtual Memory).
А так могу тебе сказать, что каждому процессу выдел. 4Гб адрессного пространства. Если не ошибаюсь, то первый Гб проецируется на адрессное пр-во ядра ОС, след. три для проги.