标签: otool

匹配iOS崩溃转储中的偏移到反汇编的二进制文件

我无法将iOS崩溃转储的堆栈跟踪中的偏移与otool输出的二进制反汇编中的偏移进行匹配.

任何人都可以确认我原则上如何匹配这些.例如,如果我在崩溃转储中获得一行:

0 myapp  0x00005b0a  0x1000 + 19210
Run Code Online (Sandbox Code Playgroud)

我希望二进制文件中违规指令的偏移量为0x5b0a,0x4b0a ....还是其他什么?

在解码头信息时,otool还提供了这样的信息(实际代码从文件中的偏移量0x0000224c开始):

Section
  sectname __text
   segname __TEXT
      addr 0x0000224c
      size 0x00063ad2
    offset 4684
     align 2^2 (4)
    reloff 0
    nreloc 0
      type S_REGULAR
attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
 reserved1 0
 reserved2 0
Run Code Online (Sandbox Code Playgroud)

所以,我并不是100%确定我正确地解释了这一点,但似乎是说代码在文件中的+ 0x224c处最终在内存中的偏移量0x124c,但后来我不确定这是怎么回事例如,安装在位置0x1000.

我遇到的问题是,假设偏移量为0x5b0a,那里的指令,0x4b0a和0x6b0a的指令都没有意义,因为它是有问题的实际指令(包括例如位于堆栈下方的位置然后不指向的事实)分支指令).

(我知道,至少在ARM的早期版本中,由于指令流水线,PC的值与相应的内存地址之间存在差异.我假设在报告的偏移量中会考虑这种差异在崩溃转储中,或者无论如何,我会看到有问题的分支指令,如果没有考虑到这样的差异,那么任何一方指示的指令......)

任何人都可以放弃任何光线吗?

otool ios

14
推荐指数
2
解决办法
3248
查看次数

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

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

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

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

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

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

c++ deployment macos otool

13
推荐指数
1
解决办法
4596
查看次数

是否可以编辑和重新编译iOS二进制文件?

经过大量时间与Google合作,我决定在这里提出这个问题.但我无法得到我的问题的答案.以下是详细信息:

我有一个申请并最近发布到Cydia.它已被其他人破解并在torrent网站上发布.有趣的是我内部有一个二进制校验和验证机制,他们能够破解整个东西,并根据他们对二进制文件所做的更改创建了新的校验和文件.他们编辑了两个函数并对其进行反编译并将其发布给种子.

所以我已经用IDA Pro做了一些研究,发现可以看到函数和类的实际实现.但是为了编辑函数,他们必须找到该函数的地址并通过HEX EDITOR编辑它.这部分让我感到困惑,是否有人帮我这个?我不想让它"不可撼动":) ..我猜不是那么容易.:)但我真的想知道他们是如何破解的?:)

我的问题是如何编辑iOS二进制文件中的函数并重新编译它?例如,我的一个班级中有以下方法.

- (id) getSomething {

   return @"Something";
}
Run Code Online (Sandbox Code Playgroud)

我想编辑这个函数的返回值.那可能吗?

reverse-engineering otool ida ios

12
推荐指数
1
解决办法
3548
查看次数

对boost库的依赖没有完整路径

我成功构建了动态库,依赖于boost库,这些库是使用自定义前缀(./b2 install --prefix=PREFIX)构建和安装的.但是,当我otool -L在我的库上运行时,我得到如下输出:

...
libboost_regex.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
...
Run Code Online (Sandbox Code Playgroud)

与其他依赖项不同,它没有完全通向这些boost库的路径.当我的lib被应用程序加载时,这会导致运行时错误.我知道可以使用install_name_tool手动修复此问题.但是,我想弄清楚,为什么它只发生在boost库中,并且不会发生在我的lib依赖的其他依赖项上?

编辑

我被要求给出一个构建命令的例子,但像往常一样,"现实生活"的例子有点复杂.就我而言,有一个libA.dylib依赖于提升的库.然后,我的图书馆libMy.dylib依赖libA.dylib和提升.在configure执行简单库存在检查(类似于自定义测试程序AC_CHECK_LIB)的步骤中出现问题.此检查尝试构建一个与之相关联的小测试程序,libA.dylib以证明其可用性libA.dylib并且失败 - 由于无法找到增强库的错误.当然它不会找到它们因为otool -L libA.dylib在没有完整路径的情况下给我提升库.

c++ macos boost dylib otool

11
推荐指数
1
解决办法
1196
查看次数

install_name_tool -change 和 -id 之间的区别

我已经在这个概念上挣扎了一段时间,我无法真正理解-change和之间的区别-id。手册页指出

 -id name
              Changes  the  shared  library identification name of a dynamic shared library to name.  If the Mach-O binary is not a dynamic
              shared library and the -id option is specified it is ignored.

-change old new
              Changes  the dependent shared library install name old to new in the specified Mach-O binary.  More than one of these options
              can be specified.  If the Mach-O binary does not contain the old install name in a specified …
Run Code Online (Sandbox Code Playgroud)

macos xcode otool install-name-tool

10
推荐指数
2
解决办法
6323
查看次数

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

我想用一些代码修补一块废弃软件.

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

我使用hexeditor添加了相应的加载命令(LC_ LOAD_DYLIB),并使用mach-o标头.

otool报告我期望看到的内容,因此我非常确信文件格式正确.

Load command 63
          cmd LC_LOAD_DYLIB
      cmdsize 60
         name @executable_path/libAltInput.dylib (offset 24)
   time stamp 1183743291 Fri Jul  6 19:34:51 2007
      current version 0.0.0
compatibility version 0.0.0

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

dyld: bad external relocation length

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

有人有主意吗?

macos mach-o dylib otool dyld

9
推荐指数
1
解决办法
4481
查看次数

MacOSX:哪些动态库通过二进制链接?

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

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

在Linux上,ldd是调试此问题的理想工具。人们一直说otool -LMacOS与Linux等效ldd,但这不是事实。ldd实际上会查找这些库,并告诉您可以找到哪些库以及在何处找到它们。otool -L仅告诉您需要链接的库。无需检查它们是否存在。它甚至没有告诉您使用库时在哪里搜索库@rpath

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

macos rpath otool ldd

8
推荐指数
2
解决办法
3786
查看次数

otool 报告的依赖路径不是加载程序找到依赖项的路径

希望这不是重复的(我发现了很多类似的问题,但不完全是我要问的问题)。

\n\n

当我运行时在linux上ldd <path/to/executable>,我会得到一个很好的共享库依赖项列表,以及动态链接器找到这些依赖项的路径(或者一条未找到依赖项的消息)。

\n\n

在mac上使用时otool -L <path/to/executable>我得到依赖项,并且路径是相对于 rpath 的,即使依赖项不存在。本质上,它报告依赖关系应该相对于 rpath 的位置,而不是动态链接器发现的位置。据我了解,otool 直接从二进制文件中读取此信息,而不是像 ldd 那样调用链接器。

\n\n

我知道我可以通过将 DYLD_PRINT_LIBRARIES 变量设置为 1 来运行可执行文件来获取这些路径,但这对于动态库不起作用,甚至对于可执行文件也不方便。

\n\n

所以我的问题是,我可以在 mac 中获得与 ldd 完全相同的行为吗?

\n\n

o工具信息:

\n\n
\xe2\x9e\x9c  otool --version\nllvm-otool(1): Apple Inc. version cctools-906\nApple LLVM version 9.1.0 (clang-902.0.39.1)\n  Optimized build.\n  Default target: x86_64-apple-darwin17.5.0\n  Host CPU: ivybridge\n
Run Code Online (Sandbox Code Playgroud)\n

macos otool ldd

8
推荐指数
0
解决办法
457
查看次数

使用otool反汇编默认iOS应用程序

当我尝试用otool反汇编iOS应用程序(不是app store)时,它不会分成不同的方法.这只是一个巨大的部分.这是我正在使用的命令:
otool -tV theApp.app/theApp >~/Desktop/output.txt
有没有办法让反汇编拆分成方法?

iphone assembly otool disassembly ios

6
推荐指数
1
解决办法
1万
查看次数

"otool"和"file"无法显示".a"文件的体系结构

我用cMake为ARM7构建了一些静态库.通常,当您对.a文件使用next命令时,它会显示以下体系结构:

FE

mac:libs User$ file ./libcurl.a 
./libcurl.a: Mach-O universal binary with 3 architectures
./libcurl.a (for architecture armv6):   current ar archive random library
./libcurl.a (for architecture armv7):   current ar archive random library
./libcurl.a (for architecture i386):    current ar archive random library
Run Code Online (Sandbox Code Playgroud)

或者fe

mac:libs User$ otool -vf ./libboost_regex.a 
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture armv6
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V6
    capabilities 0x0
    offset 68
    size 9550024
    align 2^2 (4)
architecture armv7
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7
    capabilities 0x0
    offset 9550092
    size 9390544
    align …
Run Code Online (Sandbox Code Playgroud)

arm file build cmake otool

6
推荐指数
1
解决办法
3682
查看次数