私は.obj
ファイルに興味がありました: 私はそれらが何であるか (またはそれらが何を含んでいるか) をほとんど知らないので、Vim テキストエディターでファイルを開いたところ、中にはエイリアンのような言語が見つかりました...
それらが何を表し、その内容が何であるかを理解する方法はありますか? また、それらは何のために使用されているのでしょうか?
ありがとう。
私は.obj
ファイルに興味がありました: 私はそれらが何であるか (またはそれらが何を含んでいるか) をほとんど知らないので、Vim テキストエディターでファイルを開いたところ、中にはエイリアンのような言語が見つかりました...
それらが何を表し、その内容が何であるかを理解する方法はありますか? また、それらは何のために使用されているのでしょうか?
ありがとう。
Sure.
But every different platform has a different object format. On Windows, you could use a tool like dumpbin (dumpbin comes with Visual Studio). On Linux, you could use "dumpobj", or disassemble the program.
Here's a good link for Linux:
http://www.linuxjournal.com/article/1060
PS: objdump also lets you disassemble the object. Like you used to be able to do with "debug" on DOS PCs...
で使用される.obj
ファイルlink.exe
は、MS COFF 形式です。
ここで「Microsoft PE and COFF Specification」を見つけて、.obj
それに従ってファイルを解析できます。
または、 のような既存のツールを使用することもできますdumpbin
。
The readelf
tool is good at showing you some details on the data:
$ readelf -a /usr/bin/readelf
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
...
Some of its abilities to inspect specific sections of the executable can come in handy too:
$ readelf -p .rodata /usr/bin/readelf | more
String dump of section '.rodata':
[ 4] R_IA64_IMM14
[ 11] R_IA64_NONE
...
[ 1f58] Personality routine:
[ 1f70] __gcc_personality_v0
[ 1f85] __gxx_personality_v0
[ 1f9a] __gcj_personality_v0
[ 1faf] __gnu_objc_personality_v0
...
Actually disassembling the code is a bit of a stretch; if you compile your code with -g
for debugging symbols, you can use readelf --debug-dump
to read the program source, type information, etc.