跳转至

4.1 Computer Architecture

Mon Lecture

Mon 的 Lecture 延续 3.2 的内容,相关抽象笔记查看 Chapter 3.2 即可,最后介绍了一个叫 od 的工具,老师也拓展了:

od 是 Unix 和类 Unix 操作系统中的一个命令行工具,全称为 octal dump,它用于以八进制(或其他进制)的形式查看文件或数据的内容。od 可以显示文件中的字节或数据块,并将它们以八进制、十六进制、十进制、二进制或 ASCII 格式输出。

常见选项:

  • -b:以字节的八进制格式输出。
  • -x:以十六进制格式输出。
  • -d:以十进制格式输出。
  • -c:将每个字节显示为 ASCII 字符。

示例:

运行以下命令:

od -b /bin/ls

该命令会以八进制字节表示法,查看 /bin/ls 文件(这是系统上执行 ls 命令的二进制文件)的内容。

输出解释:

输出的每一行通常包含两个部分: 1. 左侧的地址偏移量,表示文件中的位置。 2. 右侧的八进制值,表示文件中的字节内容。

例如,输出的一部分可能是这样的:

0000000 177 105 114 106 002 001 001 000
0000010 000 000 000 000 000 000 000 000

  • 00000000000010 表示文件的字节偏移位置。
  • 177 105 114 ... 是文件的字节值,以八进制表示。

应用场景:

  • 查看二进制文件od 可以用来查看无法通过文本编辑器读取的二进制文件内容。
  • 调试:可以帮助开发者查看文件的底层字节结构,调试文件格式或协议。
  • 文件检查:快速检查文件的内容,尤其是一些未知或损坏的文件。

od 是一个低级别的工具,主要用于查看文件的原始数据。

otool 是 macOS 和其他基于 Darwin 的操作系统上的一个命令行工具,专门用于显示和分析 Mach-O 格式的二进制文件(macOS 和 iOS 上的可执行文件、库、目标文件等)。

Mach-O 文件是 macOS 和 iOS 上的二进制文件格式,类似于 Linux 上的 ELF 文件格式。

otool 的功能

otool 提供了对 Mach-O 文件内部结构的详细查看,包括但不限于以下内容: - 文件头信息 - 字符表 - 符号表 - 程序的段、节信息 - 反汇编代码

常用选项

  • -t:显示文件的文本段,即可执行的机器指令。这会显示文件的反汇编代码。
  • -v:以详细模式输出。
  • -V:同时显示原始字节码和汇编指令。
  • | less:管道操作,将输出通过 less 分页显示,便于逐页查看长输出内容。

示例解读

otool -tvV /bin/ls | less
这条命令的含义是: 1. 使用 otool/bin/ls(ls 命令的可执行文件)进行反汇编,查看其中的机器码和汇编指令。 2. 通过 -t 选项,提取其文本段,显示汇编代码。 3. 使用 -v-V 选项,以详细模式输出并包括原始字节码和对应的反汇编指令。 4. 最后通过 less 命令分页显示输出内容,方便用户阅读。

otool 的应用场景

  • 查看 Mach-O 文件的结构:开发者可以使用 otool 查看 macOS 和 iOS 应用的可执行文件、库或目标文件的详细结构信息。
  • 调试和逆向工程:通过反汇编和查看符号表,otool 是调试程序、分析应用行为、逆向工程等的常用工具。
  • 依赖分析:开发者还可以使用 otool 分析文件所依赖的动态库和其他外部链接。

因此,otool 是 macOS 开发者进行底层分析的重要工具,类似于 Linux 上的 objdumpreadelf