Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查MacOS可执行文件(Mach-O)?_Macos_Executable_Mach O - Fatal编程技术网

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

如何检查MacOS可执行文件(Mach-O)?,macos,executable,mach-o,Macos,Executable,Mach O,如何查看有关MacOS二进制文件的一些基本信息,特别是用于构建它的内容、它链接到的框架以及它使用的系统调用 我尝试了nm和otool-L,但它们的输出只是部分有用 例如,什么会表明二进制文件是用xcode或golang编译器构建的 注意。我对逆向工程macos二进制文件不感兴趣。我只是想更好地了解我的系统上运行的是什么,只使用OOTB中已经包含的工具。所使用的编译器不是一个简单的问题。有些编译器会嵌入关于自身的信息,有时您会通过运行字符串,发现这一点,但这并不能保证。这就是说,Mac上的答案几乎

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

我尝试了
nm
otool-L
,但它们的输出只是部分有用

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


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

所使用的编译器不是一个简单的问题。有些编译器会嵌入关于自身的信息,有时您会通过运行
字符串
,发现这一点,但这并不能保证。这就是说,Mac上的答案几乎总是
clangg
,因此获得基本知识通常并不难。例如:

strings iTunes | grep clang
COMPILER=clang-9.0.0
但这只是运气(甚至可能不准确)

在这方面做得很好,是逆向工程工作的黄金标准。如果这类事情对你很重要,那么IDA Pro就是工具。很贵

要获得运行时链接的框架列表,您需要的工具是
otool-L
。我不明白你说的“不太可读”是什么意思。它只是打印出所有的框架,每行一个。很难想象还有比这更具可读性的了。你在这里找什么

otool-L
不会告诉您使用了哪些静态库,因此“它是基于哪些框架构建的”可能过于宽泛而无法回答。您通常可以找到众所周知的静态库(例如OpenSSL)的符号,但是没有简单的方法可以精确地知道二进制文件中包含了什么,特别是在删除调试信息的情况下。(如果有调试信息,那么文件路径往往是可用的,这可以告诉您更多关于它是如何构建的。)

没有简单的静态方法来获取所有系统调用的列表,因为这些调用可能被隐藏在库中<代码>nm
通常是您想要的。但是,它包含了很多不是“系统”调用的东西,因为它将包含从外部源链接的每个符号(您可能需要类似于
nm-ju
)。再一次,我不确定你所说的“不太可读”是什么意思。它是每行一个符号


要在运行时获取系统调用列表,请使用
dtruss
运行应用程序。它将在执行时输出每个系统调用,并将重点放在实际的“系统”调用(即系统调用)。

我喜欢检查macOS文件的
jtool
radare2
。它们都可以打印链接到的动态库的标志、系统函数调用。。