![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Дан адрес (к примеру) 0x7c901230. Нужно получить описание этого адреса, как в отладчике NTSD (WinDbg), т.е.
7c901230 == ntdll!DbgBreakPoint 7c901231 == ntdll!DbgBreakPoint+1 и т.д. Вот написал функцию, но она выдает только название функции (а имя модуля не выдаёт):
Помогите решить проблему. |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Самый простой способ это перечислить все модули процесса с помощью CreateToolhelp32Snapshot(флаг TH32CS_SNAPMODULE), где функции Module32First и Module32Next возвращают структуру:
Так вот если твой адрес >= modBaseAddr && <= modBaseAddr+modBaseSize then szModule тебе в помощь. Второй вариант(так делают системные функции) это выровнять твой адрес на нижнюю границу по значению 10000h(базы всех модулей в памяти находятся по адресам кратным этому значению), можешь поспользоваться этой функцией для выравнивания:
Выравнил, теперь в цикле, отнимая каждый раз от выровненного адреса 10000h, проверяй не попал ли ты на начало какого-либо модуля(можешь по сигнатуре MZ, ибо если это начало какого-либо модуля, т.е. его hModule, то первыми двумя байтами там будет 'MZ' или 0x4D5A), если попал, то дальше вызывай с полученной базой функцию GetModuleBaseName и радуйся. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Меня только беспокоит то, что всю эту работу должна выполнять отладочная библиотека, и что она сделает это намного быстрее.
ntdll!DbgBreakPoint ntdll!DbgBreakPoint+1 Как это смещение получить? |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Какая такая библиотека? В прицнипе твои действия итак в минимуму сведены, выровнять значение и максимум сделать пару иттераций в цикле после чего вызвав ещё одну API, тут минимальные затраты в скорости.
offset = 0x7c901231 - GetProcessAddress(GetModuleHandle("ntdll.dll"), "DbgBreakPoint"); -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Почему бы тебе не посмотреть экспорт dbghelp или его заголовочный файл, там нек так много функций, может найдёшь для себя что-либо полезное. Вообще подобная инфа очень похожа на отладочную информацию, которая берётся из оталдочной директории отладчиком и обрабатывается соответствующим образом. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Об этом и идт речь. Описание этих функция и MSDN'е есть. Только какие функции использовать - вопрос. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
http://forum.web-hack.ru/index.php?showtopic=49187
Это сообщение отредактировал(а) W4FhLF - 10.12.2006, 17:55 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
разобрался. спасибо.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |