Как разрешить символы из адресов памяти в nt.sys и w32k.sys

В 64-разрядных выпусках Windows 7/8/2012 трассировщик ядра ETW предоставляет адреса памяти для событий ввода системного вызова. Я хотел бы сопоставить эти адреса с чем-то значимым, например, с именем функции, которая находится по этому адресу: например. АкцептКоннектПорт.

Я знаю, что могу использовать ln (список ближайших символов) в сеансе отладчика ядра для поиска символов по определенному адресу. Чего я хочу, так это сделать это программно. Есть ли библиотека, которую я могу использовать для поиска символа по заданному адресу памяти?

Еще лучше, есть ли авторитетный справочник по смещениям памяти для разных версий Windows. Я нашел эту таблицу, но эти числа не соответствуют ни одному из имеющихся у меня адресов памяти наблюдаемый.


person canzar    schedule 10.04.2014    source источник
comment
смотрели ли вы домашнюю страницу Dependency Walker (depends.exe) www.dependencywalker.com   -  person Marichyasana    schedule 10.04.2014
comment
Вы можете использовать библиотеку DbgHelp для получения соответствующих символов с сервера символов Microsoft и выполнения поиска — msdn.microsoft.com/en-us/library/windows/desktop/   -  person nobody    schedule 10.04.2014
comment
Сомнительно, что существует какой-либо опубликованный список (официальный или неофициальный) адресов функций. Это было бы массивно, так как адреса в модуле могут меняться каждый раз, когда происходит обновление Windows.   -  person nobody    schedule 10.04.2014
comment
@Marichyasana Dependency Walker выглядит многообещающе, но точки входа, показанные в программе, не соответствуют ни одному из смещений, которые я наблюдал в трассировках ядра.   -  person canzar    schedule 10.04.2014
comment
@AndrewMedico Я думаю, что ключом здесь является DbgHelp. Спасибо за ссылку.   -  person canzar    schedule 10.04.2014


Ответы (1)


В прошлом я работал над проектом, который должен был сделать это. Мы использовали API DbgHelp, который Эндрю упомянул в своем комментарии, чтобы загрузить соответствующие файлы .PDB и найти в них нужные нам смещения.

С тех пор я пошел дальше, поэтому у меня нет доступа к исходному коду этого проекта, но эта страница — хорошее место для начала.

person Roger Lipscombe    schedule 10.04.2014
comment
Это выглядит полезно, но код, с которым я работаю, написан на C#. Похоже, мне придется немного поработать, чтобы взаимодействовать с API. - person canzar; 11.04.2014
comment
Как выяснилось, для DebugHelp также существует интерфейс командной строки, dbg.exe, входящий в состав средств отладки Windows. - person canzar; 11.04.2014