Привыкаете к функции дополнительные ссылки связывания из .pdb? - PullRequest
0 голосов
/ 03 августа 2011

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

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

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

1 Ответ

1 голос
/ 04 августа 2011

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

Я скомпилировал образец в 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)
...