向通过 ida 和 lldb 计算出的最后地址添加断点,附带的指令信息无法对上ida上的汇编信息


#1

越狱机为 iOS8.4.1 iPhone5

[  0] 0x00094000 /System/Library/CoreServices/SpringBoard.app/SpringBoard(0x0000000000098000)

计算偏移后基地址为 0x00014A10 + 0x00094000 = 0x000A8A10

(lldb) br s -a 0x000A8A10
Breakpoint 1: where = SpringBoard`_mh_execute_header + 50656, address = 0x000a8a10
Process 84 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x000a8a10 SpringBoard`_mh_execute_header + 68112
SpringBoard`_mh_execute_header:
->  0xa8a10 <+68112>: svcge  #0x3b5f0
    0xa8a14 <+68116>: stceq  p9, c14, [r0, #-180]
    0xa8a18 <+68120>: pkhbtmi r11, r3, r4, lsl #1
    0xa8a1c <+68124>: rscspl pc, r6, r3, asr #4
Target 0: (SpringBoard) stopped.
->  0xa8a10 <+68112>: svcge  #0x3b5f0
    0xa8a14 <+68116>: stceq  p9, c14, [r0, #-180]
    0xa8a18 <+68120>: pkhbtmi r11, r3, r4, lsl #1
    0xa8a1c <+68124>: rscspl pc, r6, r3, asr #4

这一段,并没有像书中那样,基本和汇编语言一一对应,请问是正常的么。


#2

书上的信息大概是这样的

-> 0xcc730: push {r4, r5, r6, r7, 1r}
    0xcc732: add   r7, sp, #12
    0xcc734: push.w {r8, r10, r11}
    0xcc738: sub   sp, #80

这个和汇编语言基本是对应的,并且,后面 print 的例子, 对应的指令 MOVS R6, #0 也是这种情况


#3

对不对上不是看汇编指令,而是看二进制代码是否一致来判断断点的位置是否正确


#4

多谢指点,我自己再去查查资料吧,你说的 看二进制代码是否一致,我都不知道怎么操作。。:joy:


#5

memory read


#6

我看看。 :grinning:


#7

你的IDA分析的SpringBoard二进制文件,是从哪里拿到的?


#8

越狱机上, 就是LLDB image list 指令的那个路径。