В этом ответе предполагается, что вы хотите проанализировать стандартный исполняемый файл Windows, который динамически связан с другими библиотеками импорта (.lib и ассоциированные файлы .dll, которые не являются статически связанными), и если это так, вы хотите интерпретировать Файловая структура PE (Portable Executable).
Вот хорошая статья , с которой можно начать, с примером кода для выгрузки PE-заголовка.
Вы захотите сосредоточиться на таблице импорта (раздел .idata) для вызовов внешней библиотеки и таблице экспорта (раздел .edata) для вызовов, определенных внутри исполняемого файла и помеченных как экспортируемые (обычно это существует только в файлах DLL). ).
Для статических библиотек их формат называется COFF, и есть утилита DUMPBIN , которая поставляется вместе с Visual Studio, которую вы можете использовать для быстрого просмотра ваших файлов lib и даже выгрузки разборки кода, если Вы хотели.
Утилита DUMPBIN, которая поставляется с 32-разрядной версией
Microsoft Visual C ++, сочетает в себе возможности LINK, LIB и
EXEHDR утилиты. Сочетание этих инструментов имеет возможность
предоставить информацию о формате и символах, представленных в
исполняемые, библиотечные и DLL-файлы.
Информацию о структуре файлов COFF см. В этой статье .
Выяснить, если вызов функции из библиотеки или нет, было бы непросто, но, насколько я помню, большинство статических вызовов библиотеки в коде на самом деле являются вызовами thunk (простые вызовы jmp к реальному объектному коду, скопированному из библиотеки) и они имеют небольшой размер (обычно около 5 байт), в то время как «определяемые пользователем» не являются громоздкими, а представляют собой вызовы на основе bp.