首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将iOS崩溃转储中的偏移量与反汇编二进制文件进行匹配

将iOS崩溃转储中的偏移量与反汇编二进制文件进行匹配
EN

Stack Overflow用户
提问于 2012-05-14 06:05:11
回答 2查看 3.5K关注 0票数 15

我很难将iOS崩溃转储的堆栈跟踪中的偏移量与otool的二进制文件反汇编中的偏移量进行匹配。

有人能确认一下原则上我是怎么匹配这些的吗。例如,如果我在崩溃转储中得到一行:

代码语言:javascript
复制
0 myapp  0x00005b0a  0x1000 + 19210

我是否期望二进制文件中违规指令的偏移量是0x5b0a,0x4b0a.还是别的什么?

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

代码语言:javascript
复制
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

所以,我不是100%确定我是否正确地解释了这一点,但它似乎是说,在文件中的+0x224c处的代码,最终在内存中的偏移量0x124c,但我不太确定这与例如,0x1000的位置是如何匹配的。

我遇到的问题是,如果给定偏移量0x5b0a,那里的指令、0x4b0a的指令或0x6b0a的指令都不是实际的指令(包括堆栈后面的位置不指向分支指令这一事实)。

(我知道,至少在ARM的早期版本中,由于指令管道的存在,PC的值与相应的内存地址之间存在差异。我假设在崩溃转储中报告的偏移量中会考虑到这样的差异,或者至少,如果没有考虑到这种差异,我会看到所涉及的分支指令中的几个指令。)

有人能给我点光吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-26 21:41:26

如果myapp没有去掉符号,您就可以使用atos了。

您可以通过man atos获取更多详细信息,但是对于您的问题来说,这应该足够了:

代码语言:javascript
复制
-o symbol_file # debugging information output by the compiler this may be a dSYM or the binary itself depending on who you saved symbol information
-l load address # the base address in the process space at which your library is loaded into the springboard process (Looks like 0x1000)
Also a list of addresses you wish to symbolicate

Usage:
    atos -o myapp -l 0x1000 0x00005b0a 0x0005bca ... etc

该输出应该是终端的符号名列表。同样,这要求myapp没有去掉符号。

票数 2
EN

Stack Overflow用户

发布于 2013-09-30 20:11:39

__TEXT段的虚拟地址添加到崩溃转储中给定的相对地址。结果是要在反汇编中查找的地址。以下是几个步骤:

  1. 使用otool -lv <application-binary>从应用程序二进制转储加载命令。查找__TEXT段的load命令和vmaddr (通常是0x1000 )的关联值。您不需要上面所示的有关__text部分的信息,只需要有关崩溃转储中的段.
  2. 的信息,调用堆栈中的地址是以0x00124ff4 0xf4000 + 200692形式给出的。最后一部分是十进制二进制内的偏移量。将其添加到步骤1中获得的值并转换为十六进制。在本例中,我们将计算0x1000 + 200692,即十六进制中的0x31ff4
  3. 使用otool -tV <application-binary>来转储应用程序二进制的反汇编。定位步骤2中获得的地址(本例中为0x31ff4)。对于调用堆栈的最顶层帧,这是应用程序崩溃的地方。对于所有其他级别,计算出的地址应该是一个分支指令,它对应于堆栈中下一个更高的级别.

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10578155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档