问题标签 [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.
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.
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 操作数是相反的。
macos - MacOSX:哪些动态库由二进制链接?
我无法弄清楚为什么我的二进制文件没有加载。它是由 MATLAB 加载的 dylib(MEX 文件),并链接到不同位置的许多 dylib。MATLAB 告诉我它无法加载 MEX 文件,但我无法弄清楚它找不到哪些依赖项。
有人对如何调试这样的东西有任何建议吗?
在 Linux 上,ldd
是调试此问题的完美工具。人们一直说otool -L
MacOS相当于Linux ldd
,但事实并非如此。ldd
实际上会查找库,并告诉您可以找到哪些库,以及在哪里找到它们。otool -L
只告诉您需要链接哪些库。它不会努力检查它们是否在那里。它甚至不会告诉您使用@rpath
.
otool -l
(小写 L)为您提供“加载命令”的转储,在那里您可以看到LC_RPATH
命令,这些命令确定了@rpath
搜索库的位置。但是这些无法向我解释找不到哪个依赖项。
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 上可能缺少什么 - 它没有正确表示以及如何解决这个问题。
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 的列表,但是在哪里可以找到dylib
iOS 设备中支持的 s 列表?
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 是否还需要?
objective-c - 计算objective-c二进制文件中选择器的数量
是否有工具/脚本可以帮助我迭代(或仅计算)objective-c 二进制文件中的所有选择器。我想静态分析目标 c 二进制文件并获得该指标。我试过otool -tV
了,但它转储的只是我无法解析的十六进制数据。有些人建议使用lldb
,但我不确定如何做到这一点。
bash - Mac OS X:如何在脚本中获取 otool 的结果?
我想在脚本中更改 dylib 搜索路径。在终端中,我使用 otool -L my.dylib,然后查看搜索路径是什么,并使用 install_name_tool 进行更改。install_name_tool (-change) 使用以前的路径和新路径作为参数。如何将 otool -L 的结果获取到脚本变量?
c++ - 从静态库中剥离/删除调试符号和存档名称
我在我的 Mac 上使用 clang 编译了一个静态库(C++)(比如说,libmylib_DARWIN.a
对于libmylib_LINUX.a
2 个架构)(Apple LLVM version 9.0.0 (clang-900.0.39.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,没有谈论多平台,也没有提到存档名称。