问题标签 [otool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
506 浏览

macos - Why is otool truncating my disassembly output?

When I run this command

otool will correctly dump the text section of binary. E.g.

But when I run this command:

otool skips a huge part of the text section:

The first 3805646 bytes are simply skipped and not disassembled. If I open the binary in lldb, I can disassemble code at the skipped addresses just fine.

Has anyone ever made similar experiences? Does otool maybe have an internal size limit and truncates sections beyond that limit? Has anyone discovered a work-around or knows a comparable tool that is available for free?

I tried to disassemble the whole binary with lldb:

Setting -e to the address of the last byte in the text section but that doesn't work either. Actually lldb stops output after disassembling about 5000 bytes of the text section.

0 投票
0 回答
91 浏览

assembly - 操作数顺序是 xcrun otool 和 capstone、IDA 之间的区别

所以我有一个简单的 hello world 程序:

如果我们在 x86_64 上编译并获取二进制文件,并打印它的 asm 代码和机器代码:

汇编代码:

和机器码:

如果我尝试使用 keystone 转换“mov rsp rbp”,它会给我机器代码:

0x48 0x89 0xec

这与otool的不同48 89 e5

经过一番尝试和搜索,我发现otool的操作数顺序是左->右,然而,keystone或IDA认为顺序是右->左。

有人可以帮助我,为什么 otool 打印相反的顺序?

我查了intel的asm手册,顺序也是右->左。所以我不明白为什么 otool print 操作数是相反的。

0 投票
2 回答
13263 浏览

macos - MacOSX:哪些动态库由二进制链接?

我无法弄清楚为什么我的二进制文件没有加载。它是由 MATLAB 加载的 dylib(MEX 文件),并链接到不同位置的许多 dylib。MATLAB 告诉我它无法加载 MEX 文件,但我无法弄清楚它找不到哪些依赖项。

有人对如何调试这样的东西有任何建议吗?

在 Linux 上,ldd是调试此问题的完美工具。人们一直说otool -LMacOS相当于Linux ldd,但事实并非如此。ldd实际上会查找库,并告诉您可以找到哪些库,以及在哪里找到它们。otool -L只告诉您需要链接哪些库。它不会努力检查它们是否在那里。它甚至不会告诉您使用@rpath.

otool -l(小写 L)为您提供“加载命令”的转储,在那里您可以看到LC_RPATH命令,这些命令确定了@rpath搜索库的位置。但是这些无法向我解释找不到哪个依赖项。

0 投票
2 回答
291 浏览

ios - 符号化崩溃报告 ios

除了崩溃报告,我还有 .app 和 .dSYM 包。我试图通过运行以下命令来表示崩溃报告

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash crash.crash > SymbolicatedPaperio.crash

异常堆栈跟踪的前几行看起来像,

Last Exception Backtrace: 0 CoreFoundation 0x00000001898a61c0 0x189777000 + 1241536 1 libobjc.A.dylib 0x00000001882e055c 0x1882d8000 + 34140 2 CoreFoundation 0x00000001898a6094 0x189777000 + 1241236 3 Foundation 0x000000018a333808 0x18a285000 + 714760 4 UIKit 0x000000018f984848 0x18f6f1000 + 2701384 5 UIKit 0x000000018f9a4fac 0x18f6f1000 + 2834348 6 CoreFoundation 0x00000001898537dc 0x189777000 + 903132 7 CoreFoundation 0x000000018985140c 0x189777000 + 893964 8 CoreFoundation 0x0000000189780068 0x189777000 + 36968 9 paperio 0x00000001000b0d80 0x1000a4000 + 52608 10 paperio 0x00000001000bf0fc 0x1000a4000 + 110844 11 UIKit 0x000000018f768f3c 0x18f6f1000 + 491324 12 UIKit 0x000000018f987158 0x18f6f1000 + 2711896 13 FrontBoardServices 0x000000018b4365e8 0x18b413000 + 144872 14 Foundation 0x000000018a345794 0x18a285000 + 788372 15 BaseBoard 0x000000018b3b0f00 0x18b37e000 + 208640 16 FrontBoardServices 0x000000018b4306a8 0x18b413000 + 120488 17 FrontBoardServices 0x000000018b4363c4 0x18b413000 + 144324 18 UIKit 0x000000018f9885c0 0x18f6f1000 + 2717120 19 UIKit 0x000000018f988264 0x18f6f1000 + 2716260 20 UIKit 0x000000018fcb9ba4 0x18f6f1000 + 6065060

对于第一行,在我的 mac 上,它没有符号化,输出保持不变(与上面的非符号化行一样)。但是,在不同的 Mac 上,我可以看到输出为:

0 CoreFoundation 0x00000001898a61c0 __exceptionPreprocess + 124

所有框架和库都在发生这种情况。想了解我的 Mac 上可能缺少什么 - 它没有正确表示以及如何解决这个问题。

0 投票
1 回答
2815 浏览

ios - iOS 应用程序的 otool 输出

如果我otool -L ...在 iOS .ipa 文件的主可执行文件上运行,我会看到以下输出:

/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation /System/Library/Frameworks/UIKit.framework/UIKit ... @rpath/DMSDK.framework/DMSDK ... /usr/lib/libz.1.dylib /usr/lib/libc++.1.dylib /usr/lib/libiconv.2.dylib /usr/lib/libsqlite3.dylib

这告诉我我的应用程序使用/引用/需要的动态库。

我的问题:这些是指ios 设备本身存在的全局目录吗?我相信答案是肯定的,但这并不意味着所有 iOS 设备都已经libsqlite安装在它们上面(我只会觉得这很令人惊讶,因为作为一名网络开发人员,我认为 sqlite 更像是一个用户空间的东西,我会感到惊讶'会得到 Apple 的足够支持来成为预安装的 dylib)?

为什么一些 dylibs 来自于/System/Library/Frameworks而一些来自于/usr/lib/...?我可以找到iOS frameworks 的列表,但是在哪里可以找到dylibiOS 设备中支持的 s 列表?

0 投票
2 回答
2446 浏览

ios - 如何检测 iOS 应用程序中是否启用了堆栈粉碎保护

我希望能够检查是否在基于 Xcode 9 且目标为 iOS 11 的 iOS 应用程序中启用了堆栈粉碎保护(-fstack-protector-all)。

我构建了一个在“其他 C 标志”中启用了 -fstack-protector-all 的应用程序,它确实构建并运行了,但是如何验证堆栈粉碎保护是否已启用?

那里有很多较旧的(2013 年及更早的)资源提到otool -Iv appName |grep stack_chk,但我在我的应用程序二进制文件上运行了它,并且在输出中找不到 stack_chk。

是否有与该命令等效的现代命令?考虑到 Xcode 中的当前默认设置,-fstack-protector-all 是否还需要?

0 投票
2 回答
320 浏览

objective-c - 计算objective-c二进制文件中选择器的数量

是否有工具/脚本可以帮助我迭代(或仅计算)objective-c 二进制文件中的所有选择器。我想静态分析目标 c 二进制文件并获得该指标。我试过otool -tV了,但它转储的只是我无法解析的十六进制数据。有些人建议使用lldb,但我不确定如何做到这一点。

0 投票
1 回答
317 浏览

bash - Mac OS X:如何在脚本中获取 otool 的结果?

我想在脚本中更改 dylib 搜索路径。在终端中,我使用 otool -L my.dylib,然后查看搜索路径是什么,并使用 install_name_tool 进行更改。install_name_tool (-change) 使用以前的路径和新路径作为参数。如何将 otool -L 的结果获取到脚本变量?

0 投票
0 回答
410 浏览

c++ - C++ & Xcode - 静态链接库

我有一个 C++ 项目,我使用 Xcode 9.2 和 gcc 来编译它。我有一个链接的静态库列表,您可以在下图中看到其中的一些:

将二进制文件与 Xcode 的库部分链接

如您所见,它们已正确列在“构建阶段”XCode 面板的“使用库链接二进制文件”部分中。

如果我在用于生成它的同一台机器上运行可执行文件,一切正常。当我尝试在另一台 Mac 上运行二进制文件时,问题就开始了。程序未启动并返回以下消息:

在可执行文件上运行otool -L这是结果:

所以我对与 Xcode 的静态链接有点困惑,因为我希望这些库应该与可执行文件静态链接,但根据上述结果,它们似乎是动态链接的。

我的目的是在其他机器上运行可执行文件而不安装其他组件。

0 投票
1 回答
7190 浏览

c++ - 从静态库中剥离/删除调试符号和存档名称

我在我的 Mac 上使用 clang 编译了一个静态库(C++)(比如说,libmylib_DARWIN.a对于libmylib_LINUX.a2 个架构)(Apple LLVM version 9.0.0 (clang-900.0.39.2)如果有任何相关性)。

目前,有两个问题:

  1. 静态库(使用当前构建配置)包含调试符号
  2. 它还显示用于存档的目标文件的名称

    otool -Iv libmylib_DARWIN.a

    Archive : libmylib_DARWIN.a libmylib_DARWIN.a(firstobjectfile.cpp.o) libmylib_DARWIN.a(secondobjectfile.cpp.o) ....

我想从这个库中删除调试符号和存档文件名我想知道是否有一种方便的方法可以在更改我的构建配置的情况下做到这一点。

  • Mac 上会strip为 DARWIN 和 LINUX 构建的库执行此操作吗?还有什么我需要注意的吗?
  • strip似乎没有删除存档文件名

SO上有一些类似的问题;但是,我发现的那些处理 iOS、Objective C,没有谈论多平台,也没有提到存档名称。