| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Получение описания адреса с помощью DebugAPI |
| Автор: 586 10.12.2006, 04:31 | ||
| Дан адрес (к примеру) 0x7c901230. Нужно получить описание этого адреса, как в отладчике NTSD (WinDbg), т.е. 7c901230 == ntdll!DbgBreakPoint 7c901231 == ntdll!DbgBreakPoint+1 и т.д. Вот написал функцию, но она выдает только название функции (а имя модуля не выдаёт):
Помогите решить проблему. |
| Автор: W4FhLF 10.12.2006, 10:25 | ||||
Самый простой способ это перечислить все модули процесса с помощью CreateToolhelp32Snapshot(флаг TH32CS_SNAPMODULE), где функции Module32First и Module32Next возвращают структуру:
Так вот если твой адрес >= modBaseAddr && <= modBaseAddr+modBaseSize then szModule тебе в помощь. Второй вариант(так делают системные функции) это выровнять твой адрес на нижнюю границу по значению 10000h(базы всех модулей в памяти находятся по адресам кратным этому значению), можешь поспользоваться этой функцией для выравнивания:
Выравнил, теперь в цикле, отнимая каждый раз от выровненного адреса 10000h, проверяй не попал ли ты на начало какого-либо модуля(можешь по сигнатуре MZ, ибо если это начало какого-либо модуля, т.е. его hModule, то первыми двумя байтами там будет 'MZ' или 0x4D5A), если попал, то дальше вызывай с полученной базой функцию GetModuleBaseName и радуйся. |
| Автор: 586 10.12.2006, 16:17 |
| Меня только беспокоит то, что всю эту работу должна выполнять отладочная библиотека, и что она сделает это намного быстрее. ntdll!DbgBreakPoint ntdll!DbgBreakPoint+1 Как это смещение получить? |
| Автор: W4FhLF 10.12.2006, 16:28 | ||||
Какая такая библиотека? В прицнипе твои действия итак в минимуму сведены, выровнять значение и максимум сделать пару иттераций в цикле после чего вызвав ещё одну API, тут минимальные затраты в скорости.
offset = 0x7c901231 - GetProcessAddress(GetModuleHandle("ntdll.dll"), "DbgBreakPoint"); |
| Автор: W4FhLF 10.12.2006, 17:19 | ||
Почему бы тебе не посмотреть экспорт dbghelp или его заголовочный файл, там нек так много функций, может найдёшь для себя что-либо полезное. Вообще подобная инфа очень похожа на отладочную информацию, которая берётся из оталдочной директории отладчиком и обрабатывается соответствующим образом. |
| Автор: 586 10.12.2006, 17:29 | ||
Об этом и идт речь. Описание этих функция и MSDN'е есть. Только какие функции использовать - вопрос. |
| Автор: W4FhLF 10.12.2006, 17:52 |
| http://forum.web-hack.ru/index.php?showtopic=49187 |
| Автор: 586 11.12.2006, 03:17 |
| разобрался. спасибо. |