Привыкаешь к функции дополнительные ссылки связывания из.pdb?

Я пытаюсь определить статический вызов графа.exe с помощью.pdb и DIA SDK. К сожалению, при инкрементном связывании дополнительные батутные вызовы, вызываемые функцией, не отображаются при использовании образца dia2dump.

Если вы запускаете и связываете пример dia2dump (или простой пример здесь) с включенной отладкой и добавочной связью, вызовите wprintf или же printf не отображаются в дампе символов любой функции. Однако, если вы отключите инкрементные ссылки, они это сделают.

Есть ли способ получить дополнительные батуты, используемые функцией через DIA? Или я должен взломать файлы.obj и.lib?

1 ответ

Как вы связываетесь с ЭЛТ? Статический или динамический?

Я скомпилировал образец в VS2010 (с динамическим / DLL CRT) и загрузил полученный.exe в IDA Pro. Принимая Fatal функция (из образца) в качестве примера, все его printf вызовы компилируются непосредственно в ссылки на запись импорта.exe для этой функции (т.е. __imp__printf). Возможно, поэтому вы не видите, как они появляются на вашей свалке. Если я использую статическую связь с CRT (с инкрементным включением), он вызывает ILT. Если я выключаю инкрементное, он вызывает printf напрямую (так как он не импортируется)

С динамическим CRT, косвенная (вызывает импорт) и ILT (вызывает косвенная; я полагаю, ваш "батут") версии функции printf, и они все еще существуют в инкрементном.exe, но не имеют ссылок на них.

Образец корректно выгружает ILT (пример printf ниже) сам по себе, так что я бы подумал, что сможет корректно вывести их в дамп символа функции, когда они на самом деле вызываются. Тем не менее, мой опыт работы с DIA ограничен, так что сейчас я более или менее говорю из своей задницы.

0x00011799 (PublicSymbol) @ILT+1940(_printf)
Другие вопросы по тегам