otool-目标文件显示工具

373 阅读5分钟

目标

显示目标文件(*.a)内容

句法

otool [option ... ] [file ... ]

描述

这个otool命令显示目标文件或者库的指定部分,它是检查Mach-O二进制文件的首选工具,特别是对于坏的、损坏的或者模糊的二进制文件。它对于检查新的Mach-O文件格式改变也是非常有用的。

由于历史原因,基于LLVM的llvm-objdump工具不支持以“otool-compatibility”模式去显示Mach-O信息,关于使用llvm-objdum的方式详情参见llvm-otoo1(1)命令行,注意llvm-objdump是不能在所有的Mach-O文件中显示信息.

如果不使用-m选项,则文件参数可能为libx.a(foo.o)形式,去请求仅关于该目标文件的信息,而不是整个库的信息。(通常这个参数在shell中必须被引用``libx.a(foo.o)''),otool-classic 可以明白Mach-O文件,也可以明白通用文件格式,Otool-classic 理解 Mach-O(Mach 对象)文件和通用文件格式。Otool-classic可以以其原始(数字)形式(不带 -v 标志)或使用常量的宏名称等符号形式(带 -v 或 -V 标志)显示指定信息。

选项

必须至少指定以下选项之一:

选项描述
-a如果这个文件是archive文件(.a文件),则显示archive文件头
-S如果这个文件是archive文件(.a文件),显示archive文件中的__.SYMDEF SORTED文件内容
-f显示通用headers
-h显示Mach header
-l显示加载命令
-L显示目标文件使用的共享库的名称和版本号,如果文件是共享库,则显示共享库ID。
-D仅显示共享库的安装名称。详情查看install_name_tool命令获取更多信息
-s segname sectname显示section(segname,sectname),如果指定了-v标志,则显示section类型,除非类型为0(section header flag)。如果指定了-V标识,则(__OBJC,__protocol)、(__OBJC,__string_object) 和 (__OBJC,__runtime_setup)部分也会以符号的方式显示,对于未知section的类型,如果指定了-V标志,则section的内容以规范的hex+ASCll方式显示,一列十六进制值与一列ASCII字符并排打印。
-t显示section(__TEXT,__text)中的内容,用-v标志则反编译这个text。用-V标志还反编译操作数
-x显示在文件中找到的每个__text部分的内容。这在查看 Mach 内核和其他在多个段中具有 __text 部分的文件时很有用,或者当 __text 部分位于 __TEXT 之外的某个位置时。用-v标志则反编译这个text。用-V标志还反编译操作数
-d显示section (__DATA,__data)的内容
-o显示被Objective-C运行时系统使用的__OBJC段的内容。
-r显示重定位条目
-c显示核心文件中的参数字符串(argv[]和envp[])。
-I显示间接符号表。
-T显示动态链接共享库的目录
-R显示动态链接共享库的引用表
-M显示动态链接共享库的模块表
-H显示两级命名空间提示表
-G在代码表中显示数据。
-C显示链接器优化提示(也可以添加-v用于详细模式)。
-P将info plist部分(__TEXT,__info_plist)打印为字符串。
-dyld_info打印 dyld 用于解析最终链接二进制文件中的外部引用的绑定和变基信息。
-dyld_opcodes打印最终链接二进制文件中存在的原始 dyld 绑定和变基操作码。这些操作码存储在 LC_DYLD_INFO* 加载命令指向的区域中。
-show_latency在进行反汇编时打印延迟注释以获取说明。
-chained_fixups打印存在于使用链式修正构建的最终链接二进制文件中的原始链式修正数据。链接的修正数据要么存储在 LC_DYLD_CHAINED_FIXUPS 加载命令指向的区域中,要么存储在 (__TEXT,__chain_starts)部分中。该数据包括修复链在每一页上的起始位置和每个绑定的符号信息。使用 -dyld_info 选项查看每个链中的各个链接。

也可提供下列选择:

选项描述
-j在进行反汇编时打印指令的操作码字节。
-m不认为目标文件名采用 archive(member) 语法,它允许文件名包含括号
-p name与-t和-v或者-V一起使用,从符号name开始反编译,直到(__TEXT,__text)结尾。这个选项也可以与-x选项一起使用,从找到 __text 部分的任何段中的符号name开始反汇编。
-q反汇编时使用llvm反汇编程序;这适用于 x86 和 arm 架构。这是默认设置。
-Q反汇编时使用 otool-classic(1) 的反汇编程序。
-v尽可能详细(象征性地)显示反汇编代码。
-V以符号方式显示反汇编的操作数(这意味着 -v 选项)。这对 -s、-t 和 -x 选项很有用。
-X不在反汇编部分中显示leading地址与headers
-addr_slide=arg使用 -s、-t 或 -o 选项反汇编二进制文件时,在每个指针值显示时添加任意slide。这对于将 otool 输出与正在运行的进程的输出进行匹配很有用
-arch arch_type为 otool-classic(1) 指定文件的架构 arch_type 以在文件是通用文件(即具有多个体系结构的文件)时对其进行操作。 (有关当前已知的arch_types,请参见arch(3)。)arch_type 可以是“all”以对文件中的所有架构进行操作。如果文件包含主机架构,则默认仅显示主机架构;否则,将显示文件中的所有架构。
-function_offsets在进行反汇编时,打印最后一个打印标签的小数偏移量。
-mcpu=arg使用 llvm 反汇编程序进行反汇编时,请使用 cpu arg。
--vesion打印otool-classic(1)版本信息。

例子