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