可以读取目标文件
It is possible to read an object file?
我对.obj
文件很好奇:我几乎不知道它们是什么(或它们包含什么),所以我用Vim文本编辑器打开它们,我发现里面是一种类似外星人的语言…
是否有办法理解它们代表什么以及它们的内容是什么还有,它们的用途是什么?
谢谢。
当然。
但是每个不同的平台都有不同的对象格式。在Windows上,你可以使用像dumpbin这样的工具(dumpbin是Visual Studio自带的)。在Linux上,您可以使用"dumpobj",或者反汇编程序。
这里有一个很好的Linux链接:
http://www.linuxjournal.com/article/1060PS:Objdump还允许您反汇编对象。
link.exe
使用的.obj
文件为MS COFF格式。
您可以在这里找到"Microsoft PE and COFF Specification",并根据它解析.obj
文件。
或者,您可以使用现有的工具,如dumpbin
。
readelf
工具很擅长向您显示一些关于数据的细节:
$ 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
...
它的一些检查可执行文件的特定部分的能力也可以派上用场:
$ 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
...
实际上反汇编代码有点牵强;如果您使用-g
来编译代码以调试符号,则可以使用readelf --debug-dump
来读取程序源代码、类型信息等。
相关文章:
- 为测试目标创建具有不同源文件夹的文件
- 如何为包含头文件的目标编写生成文件?
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 生成文件:6:目标'all'的配方在 Ubuntu-16.04 上失败
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 使用 Libssh 将文件从服务器复制到客户端:分配文件复制目标路径时出现问题
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 在目标计算机上访问 POSIX 信号灯时出现可执行文件崩溃(SEGV_MAPERR)
- 如何找到目标文件 *.o 的 ram rom 使用情况(.bss .text .rodata .data)?
- 如何使用cmake从主要的CMakeList.txt复制目标文件?
- 可变参数模板在目标文件中有重复的符号?
- 在 Linux 上,目标文件比在 macOS 或 Windows 上大 2.5 倍
- 为什么即使链接器找到目标文件,我的程序也看不到函数定义?
- 从.o目标文件中提取函数的原始机器代码?
- 使文件目标$(%符号)
- 针对不同生成文件目标的不同变量集
- 如何在不放置任何物理依赖项的情况下指定生成文件目标生成顺序
- extconf.rb:如何根据头文件更改生成生成文件目标
- 通过代码生成,使文件目标始终是最新的
- "Optional"生成文件中的目标文件目标?