macos - 如何检查 MacOS 可执行文件 (Mach-O)?

标签 macos executable mach-o

如何查看有关 MacOS 二进制文件的一些基本信息,特别是用于构建它的内容、链接的框架以及它使用的系统调用?

我试过 nmotool -L但他们的输出只是部分有用。

例如,什么表明二进制文件是使用 xcode 或 golang 编译器构建的?

注意。我对逆向工程 macos 二进制文件不感兴趣。我只想使用已包含在 OOTB 中的工具更好地了解我的系统上运行的内容。

最佳答案

使用的编译器不是一个简单的问题。一些编译器嵌入了关于它们自己的信息,有时你会发现通过运行 strings ,但不能保证。也就是说,Mac 上的答案几乎总是 clang ,因此获得基础知识通常并不难。举个例子:

strings iTunes | grep clang
COMPILER=clang-9.0.0
但这只是运气(甚至可能不准确)。
IDA Pro在这方面做得很好,是逆向工程工作的黄金标准。如果这类事情对您很重要,那么 IDA Pro 就是您的工具。它的价格昂贵。
要获取它在运行时链接的框架列表,otool -L是您想要的工具。我不明白你所说的“不太可读”是什么意思。它只是打印出所有框架,每行一个。很难想象还有什么比这更具可读性的了。你在找什么?otool -L不会告诉您使用了哪些静态库,因此“它是针对哪些框架构建的”可能过于宽泛而无法回答。您通常可以找到知名静态库(例如 OpenSSL)的符号,但没有简单的方法可以准确地知道二进制文件中包含的内容,尤其是在调试信息被剥离的情况下。 (如果有调试信息,那么文件路径往往是可用的,这可以告诉你更多关于它是如何构建的。)
没有简单的静态方法来获取所有系统调用的列表,因为它们可能隐藏在库中。 nm不过,这通常是您想要的。但是,它包含许多不是“系统”调用的内容,因为它将包含从外部源链接的每个符号(您可能需要类似 nm -ju 的东西)。同样,我不确定您所说的“可读性不强”是什么意思。每行一个符号。
为了在运行时获取系统调用列表,请使用 dtruss 运行应用程序。 .它将输出每个系统调用,并将重点放在实际的“系统”调用(即系统调用)上。

关于macos - 如何检查 MacOS 可执行文件 (Mach-O)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50657646/

相关文章:

macos - Mac上默认的tesseract安装文件夹在哪里?

osx-snow-leopard - 如何从 AppleScript 制作可执行程序

javascript - 如何从 React-Electron 项目创建可执行文件

macos - 手工制作的 macOS 可执行文件

xcode - 即使在将 .m 类文件链接到 Xcode 中的构建阶段后,Apple Mach-O 链接器仍会出现重复符号错误

ios - Mach-O 符号 stub (IOS)

cocoa - 将 CFPropertyList 保存到用户文件夹

python - 使用 pyenv 安装的 python 导入时找不到 '_sqlite3' 模块

python - 如何在 Mac OS X 的 python 中处理 raw_input() 的 EOFError

c++ - 导入库<->动态链接库兼容性