尝试运行我在Mac OS X中发送的可执行文件时,出现以下错误
dyld: Library not loaded: libboost_atomic.dylib
Referenced from: /Users/"Directory my executable is in"
Reason: image not found
Trace/BPT trap:5
Run Code Online (Sandbox Code Playgroud)
我已经安装了boost库,它们位于/opt/local/lib
.我认为这个问题与可执行文件有关,只查看它所在的目录,就像我在那里粘贴'libboost_atomic.dylib'一样,它不再关心它了.不幸的是,它抱怨它无法找到下一个升级库.
有没有一种简单的方法来解决这个问题?
假设我已经制作了一个不使用Xcode的osX应用程序.在使用GCC编译后,我得到一个可执行文件,链接到其他几个库.其中一些库可能再次动态链接到其他非标准系统库
是否有任何工具存在,它通过首先制作所需的目录结构,然后递归复制/检查/修复链接来确保所有动态依赖关系也在应用程序包中,从而制作OSX App包?
我想我可以尝试写这样的东西,但我想知道这样的事情是否已经存在.
我现在用的otool
,nm
和Fraise
文本编辑器拆解Mach-o
二进制文件.此时我的工作流程非常简单:
nm -g
Run Code Online (Sandbox Code Playgroud)
otool -vt
Run Code Online (Sandbox Code Playgroud)
我正在寻找简化使用disasm代码的工具Mac OS X
.
我正在使用最新版本的Xcode 4开发Cocoa应用程序,我想将动态库链接到我的项目(dylibs
).
我读的地方,在我的项目库添加是不够的,因为我有运行install_name_tool
,并otool
让我的项目中使用我的项目被捆绑的库.
我已经阅读了手册页install_name_tool
,但我不明白为什么我必须这样做.
图书馆如何运作?特别感兴趣的是应用程序和库具有指向我机器中特定位置的路径的部分,例如/usr/local/lib/mylibrary.dylib
运行时otool -L
我正在尝试让我的软件在 macOS 上可用,在我的工具链中,我使用该ldd -r MyModel.so
命令来验证一切是否顺利,但我确实无法在 macOS 上找到具有相同行为的等效命令。
otool
和nm
似乎是两个方向,但是他们的哪个选项提供了 的行为ldd -r
?还有其他工具可以用于此目的吗?
是否可以获得可执行文件的完整反汇编(可以作为汇编程序的输入)?
当我使用时,otool -tV a.out
我只看到文本部分.数据等其他部分不可见.
当我使用时gdb
,disassemble命令需要一个开始和结束地址.但是我不知道如何找出二进制文件的开始和结束地址(比如a.out).
我正在尝试反汇编可执行文件,修改汇编代码然后重新组装它.那可能吗?
如果能够找到二进制文件中所有部分的名称,它也会有所帮助.
苹果建议我使用"字符串"或"otool"来破解我的代码中的私人api(isinf),我完全是新手,所以任何帮助如何使用这些工具
我很难理解文件中的绝对路径@loader_path
.
user@local:~$ otool -L zlib.so
zlib.so:
@loader_path/../../libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
Run Code Online (Sandbox Code Playgroud)
我想知道系统在哪里找到libz.1.dylib.
从一些Mac文档:
@ loader_path /此变量替换为包含mach-o二进制文件的目录的路径,该二进制文件包含使用@loader_path的load命令.因此,在每个二进制文件中,@ download_path解析为不同的路径
我猜想这意味着@loader_path只是目标文件(zlib.so
)的路径,但这似乎不是真的.
是否有任何命令行实用程序将@loader_path解析为尝试打开库时使用的实际路径?
相当简单的问题 - 如果我有一个.framework
文件,是否有一个命令/工具可用于确定用于创建框架的SDK和部署目标版本?
同样,这可以在存储在.app文件中的应用程序二进制文件上执行吗?我希望自动化一个脚本,该脚本将搜索以前构建的应用程序/框架列表,而不需要原始.xcodeproj
文件,并确定它们的高/低支持的操作系统版本.
我希望能够检查在Xcode 9上构建的iOS应用程序中是否启用了堆栈粉碎保护(-fstack-protector-all),目标是iOS 11.
我在"其他C标志"中启用了-fstack-protector-all的应用程序,它确实构建并运行,但是如何验证是否启用了堆栈粉碎保护?
有很多较旧的(2013年及之前的)资源提到otool -Iv appName |grep stack_chk
,但我在我的应用程序二进制文件上运行它,并且在输出中找不到stack_chk.
那个命令有现代的等价物吗?是-fstack-protector - 根据Xcode中当前的默认设置,所有甚至都是必需的?