Демонтируйте выход компилятора Microsoft Visual Studio 2003 года

Я вижу то, что я думаю, странное поведение от объектных файлов, произведенных инструментами Microsoft Visual Studio 2003. file утилита говорит мне:

asmfile.obj: 80386 COFF executable not stripped - version 30821

Для объектов, созданных ассемблером, но для объектов, прибывающих из файлов C, я становлюсь справедливым:

cfile.obj: data

Использование Microsoft dumpbin утилита и objdump Я добрался от cygwin, я могу демонтировать созданный из блока файл, но я не получаю полезных результатов ни одной утилиты для файлов C-built.

У меня есть несколько вопросов, связанных с этим различием:

  1. Что формат объектных файлов сгенерирован компилятором MSVC2003?
  2. Как я могу демонтировать тот объектный файл?

Я особенно интересуюсь получением дизассемблирования в синтаксисе 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 опции описаны здесь.

5
задан Quonux 27 May 2014 в 14:19
поделиться

1 ответ

Редактировать на основе опций командной строки cl, добавленных к вопросу:

Я думаю, что проблема заключается в использовании опции /GL, которая указывает, что будет произведена оптимизация генерации кода во время соединения. из документальной страницы по этой опции:

obj файлы, созданные с помощью /GL, не будут доступны для таких утилит компоновщика, как EDITBIN и DUMPBIN.

Использование этой опции заставляет компилятор генерировать .obj файлы, над которыми компоновщик может проводить программную оптимизацию - очевидно, формат файла является проприетарным (возможно, он где-то задокументирован, но я подозреваю, что нет).

В документации по /GL (также известной как "оптимизация всей программы", "генерация кода во время соединения" или LTCG) содержится несколько предупреждений о совместимости файлов .obj или библиотек, содержащих такие файлы объектов.


Оригинальный ответ:

Что именно находится в исходном тексте C для файла .obj, который вы пытаетесь дизассемблировать? Я получил следующее, используя dumpbin /disasm test.obj для простой программы 'hello world':

Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file test.obj

File Type: COFF OBJECT

_main:
  00000000: 55                 push        ebp
  00000001: 8B EC              mov         ebp,esp
  00000003: 6A 01              push        1
  00000005: 68 00 00 00 00     push        offset $SG4665
  0000000A: E8 00 00 00 00     call        _printf
  0000000F: 83 C4 08           add         esp,8
  00000012: 33 C0              xor         eax,eax
  00000014: 3B EC              cmp         ebp,esp
  00000016: E8 00 00 00 00     call        __RTC_CheckEsp
  0000001B: 5D                 pop         ebp
  0000001C: C3                 ret

  Summary

         7AC .debug$S
          30 .debug$T
          2F .drectve
           4 .rdata
           4 .rtc$IMZ
           4 .rtc$TMZ
          1D .text

Примечание: здесь используется .obj файл, скомпилированный и dumpbin, предоставленный VS2005, но я не могу представить, что это сильно изменилось по сравнению с VS2003.

4
ответ дан 15 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: