2014-03-10 5 views
2

Я написал эту простую библиотеку с:Как разобрать статическую библиотеку .lib?

library.h:

int sum(int a, int b); 

library.c:

#include "library.h" 
int sum(int a, int b) { 
    return a+b; 
} 

Я составил его cl.exe (Visual Studio 2012), используя эти команды:

cl /c /EHsc library.cpp 
lib library.obj 

который скомпилировал его как файл библиотеки статических ссылок .lib. Теперь я хотел бы посмотреть, как компилятор сгенерировал код сборки, для обучения/академических целей. Обратите внимание: я не хочу декомпилировать его, я просто хочу прочитать созданную сборку. Я попытался открыть .lib с w32dasm, но у меня появилось много странных символов, и похоже, что инструмент не может прочитать файл. Я выполнил аналогичную задачу с динамической библиотекой ссылок (сгенерирован из того же источника), и она сработала; в том, что мне удалось просмотреть код сборки с помощью w32dasm. Итак, мой вопрос: можно ли просмотреть код сборки статической библиотеки ссылок, как это можно сделать с динамической библиотекой ссылок? Если да, то какой будет правильный инструмент для использования, поскольку w32dasm не представляется правильным инструментом.

+0

Возможный дубликат [Использование GCC для создания удобочитаемой сборки?] (Http://stackoverflow.com/questions/1289881/using-gcc-to-produce-readable-assembly) –

+0

@usmcs Благодарим вас за решение моих английских орфографических ошибок – WileTheCoyot

+0

@HansPassant делает objdump работу под окнами? – WileTheCoyot

ответ

1

Это технически немного отличается тем, что его не будет разбирать файл .lib, но для большинства целей должно быть достаточно:

Вы можете использовать /FA переключатель, как описано подробно here. Более точно вы, вероятно, захотите использовать /FAs, который должен создать файл .asm для каждого исходного файла, содержащего как сборку, так и исходный код, что полезно для справки. Например, если добавить это к вашей команде cl:

cl /c /EHsc /FAs library.cpp 

Это должно, в дополнение к своей нормальной функции, создать файл library.asm. Этот файл может содержать много материала, поэтому поиск по нему - хорошая идея.

Если вы используете Visual Studio IDE, вы также можете установить точку останова, начать отладку, а затем щелкнуть правой кнопкой мыши по исходной строке и выбрать Перейти к разборке. Этот параметр отображается в контекстном меню только во время отладки и активен только во время перерыва, поэтому полезно настроить точку останова, но вы также можете рубить вручную.

3

Если вы хотите, чтобы разобрать библиотеку вместо того, чтобы смотреть на сгенерированного компилятором ассемблере, вы можете использовать DUMPBIN tool:

dumpbin /disasm library.lib 

IDA также может обрабатывать статические библиотеки и файлы (и десятки других файлов объекта форматы). Отказ от ответственности: я работаю на Hex-Rays.

Смежные вопросы