Я вижу странное поведение выводимых объектными файлами инструментов Microsoft Visual Studio 2003. Утилита file
сообщает мне:
asmfile.obj: 80386 COFF executable not stripped - version 30821
Для объектов, созданных ассемблером, но для объектов, поступающих из файлов C, я получаю просто:
cfile.obj: data
Используя утилиту Microsoft dumpbin
и objdump
, которые я получил от cygwin, я могу разобрать файл, собранный из сборки, но я не получаю никаких полезных результатов от любой утилиты для файлов, созданных на языке C.
У меня есть пара вопросов, связанных с этой разницей:
- Какой формат объектного файла генерируется компилятором MSVC2003?
- Как мне разобрать этот объектный файл?
Я особенно заинтересован в получении разборки в синтаксисе AT & T - я делаю порт с большой исходной базой, чтобы он работал с GCC, и я хотел бы использовать этот метод в качестве ярлыка для некоторых встроенных сборок процедуры в проекте.
Редактировать: Добавление дополнительной информации.
Когда я запускаю dumpbin
на одном из этих файлов, я ничего не получаю:
C:\> dumpbin /disasm Func.obj
Microsoft (R) COFF/PE Dumper Version 7.10.6030
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file Func.obj
FileType: ANONYMOUS OBJECT
С objdump
это дает:
$ objdump -d Func.obj
objdump: Func.obj: File truncated
На файлах, собранных из сборки, я получаю разумные результаты.
Редактировать снова: добавление информации командной строки.
Файлы сборки создаются с помощью командной строки, похожей на следующую:
ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm
ml
когда выполняется сам, говорит:
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Файлы C создаются с помощью следующей команды:
cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi
-Gm -O1 -Oy- -Gy -GL -X CFile.c
Есть некоторые опции -I
и -D
, переданные ml
и cl
, но я здесь для краткости опущен. Варианты cl
описаны здесь .