问题标签 [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 回答
5757 浏览

macos - 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件 (OSX)

我正在寻找用一些代码修补一块废弃软件。

该软件是基于碳的,所以我不能使用 InputManager(至少,我认为我不能)。我的想法是添加对 mach-o 标头的 dylib 引用,并在调用初始化例程时启动一个新线程。

我已经使用 hexeditor 添加适当的加载命令 (LC_LOAD_DYLIB) 来处理 mach-o 标头。

otool 报告了我希望看到的内容,因此我相当有信心该文件的格式正确。

但是,启动二进制文件会给我以下错误

我能猜到这意味着我需要修改 LC_ SYMTAB 或 LC_ DYNSYMTAB 部分......

有人有想法么?

0 投票
1 回答
6461 浏览

iphone - 在mac上使用otool有什么技巧?

我想查看应用程序的标题。我试试这个:

myMac:~ me$ /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool [-fahlLDtdorSTMRIHvVcXm] /Developer/Platforms/TheIPhoneApplication -f

文件肯定在那里。

但它告诉我“找不到文件”。任何的想法?

0 投票
4 回答
8299 浏览

cocoa - 使用 otool(递归)查找应用所需的共享库

我有一个 Cocoa 应用程序,它使用 otool 来查找应用程序正常运行所需的共享库。例如,假设我在使用 QTKit.framework 的应用程序上运行 otool -L。我得到程序使用的共享库列表(包括基本框架,如 Cocoa.framework 和 AppKit.framework):

这表明该应用程序使用 QTKit.framework。但是,如果我在 QTKit.framework (/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit) 的二进制文件上再次使用“otool -L”,我会得到:

这显示了应用程序二进制文件中原始 otool 输出显示的加载更多框架。有没有办法让 otool 递归运行,这意味着它会抓取应用程序需要的框架,然后进入并搜索每个框架的依赖关系?

0 投票
7 回答
53003 浏览

macos - 构建 OSX 应用程序包

假设我在不使用 Xcode 的情况下制作了一个 osX 应用程序。用 GCC 编译后,我得到一个链接到其他几个库的可执行文件。其中一些库可能再次动态链接到其他非标准系统库

是否存在任何工具通过首先制作所需的目录结构然后递归复制/检查/修复链接以确保所有动态依赖项也在应用程序包中来制作 OSX 应用程序包?

我想我可以尝试写这样的东西,但我想知道这样的东西是否已经存在。

0 投票
3 回答
1172 浏览

assembly - 如何确定可执行文件中反汇编代码的位置?

我有一个包含错误的可执行文件(C++,i386,在 MacOS/X Tiger 下编译,如果重要的话)。该错误的修复很简单——代码中有一个地方调用了 fork() 而它不应该调用。因为修复很简单,并且因为此时从头开始重新编译可执行文件很困难(不要问),所以我想直接修补可执行文件/二进制文件。

作为迈出的第一步,我在我的可执行文件上运行了“otool -tV MyExecutableName”,瞧,我在反汇编输出中找到了这个:

所以我想做的是替换第 0002ce19 行的操作码,而不是调用 _fork,它只是无条件地跳转到失败的情况(即它应该像 fork() 返回 -1 一样)

不幸的是,我是反汇编/二进制补丁的新手,所以我不确定如何去做。特别是,我的问题是:

1) 我应该将哪些字节写入位置 0002ce19 到 0002xe1d 以获得我想要的?我假设它是“jmp 0x0002cf02”的组装等价物,但我如何弄清楚这些字节是什么?

2)“otool -tV”打印的偏移量似乎是可执行文件的__TEXT段的偏移量。如何找出打印的偏移量和文件顶部之间的字节增量,以便我可以编辑/修补文件中的正确字节?

感谢您提供的任何建议!

0 投票
3 回答
5323 浏览

c++ - MacOSX:如何将依赖项收集到本地包中?

我正在创建一个依赖于其他几个库的插件应用程序(dylib)。这些其他库安装在我的系统上,但不保证安装在任何用户的系统上。所以我需要找到一种方法将依赖项与我的应用程序捆绑在一起。

我发现我可以otool用来列出或更改其他 dylib 的路径。这将允许创建一个文件夹来捆绑我的插件应用程序和所有需要的依赖项。

但是,手动执行此操作似乎是一项耗时且愚蠢的任务。是否有可用于自动化的实用程序?

或者也许我做错了,对于这个问题有更好,更明显的方法?

编辑 我创建了一个自动化大部分任务的脚本

0 投票
1 回答
2122 浏览

assembly - 理解 arm 汇编代码结构的问题

代码如下,我想在结尾部分知道

这是否对这行代码进行计算,因为它加载了结尾部分中定义的地址

为什么以这种方式组织代码?

0 投票
1 回答
238 浏览

assembly - 为什么 otool 结果的第一列不连续?

如果这是一个真正的菜鸟问题,我很抱歉。我正在使用 otool 反汇编文件,这是我感兴趣的方法的结果:

如您所见,第一列不是连续的。这是否意味着有些指令是otool无法反汇编的?或者这是否意味着某些汇编指令与实际(机器)指令的长度不同?

谢谢!

0 投票
1 回答
552 浏览

macos - otool“大写”字段的含义

当我运行otool -favh some/library.so时,有以下字段:

  • “大写”列的含义是什么?
  • 大写列不同会导致链接失败吗?
0 投票
0 回答
416 浏览

macos - 如何将 otool 输出转换为可编译形式?

问候,我已经从 mac i386 二进制文件(通过otx和 otool -tV )创建了几个文本文件,但是当我尝试再次重新编译它们时,我失败了。

我试过 cc -x assembler test.s 但我几乎每行都得到这个:

test.s:9342:Junk character 48 (0).

test.s:9342:Rest of line ignored. 1st junk character valued 48 (0).

如何将 otool 输出转换为可编译形式?有可能的?

提前感谢任何提示和提示如何做到这一点