怎么找汇编dcd指令对应的函数位置?


#1

断点调试的时候,发现LR寄存器指向了一段DCD的汇编代码,搜了一大圈看到的解释都很难理解。想问一下,我应该怎么找DCD对应的执行块?

(lldb) reg read
General Purpose Registers:
        r0 = 0x00353a0c  @"%@"
        r1 = 0x1579d850
        r2 = 0x00000000
        r3 = 0x2a0d9488  "length"
        r4 = 0x36d0bae1  libobjc.A.dylib`objc_msgSend + 1
        r5 = 0x155146e0
        r6 = 0x155f8520
        r7 = 0x00532470
        r8 = 0x155156e0
        r9 = 0x16188a40
       r10 = 0x15512200
       r11 = 0x00000040
       r12 = 0x003445a4  (void *)0x26308d51: NSLog + 1
        sp = 0x0053235c
        lr = 0x002088ed  GoRun`-[CVInstance on:type:] + 823
        pc = 0x26308d50  Foundation`NSLog
      cpsr = 0x60000030


__text:00118DE8                 DCD 0xB50362C4, 0x10F240, 0xFB78F7FF, 0xF857461A, 0xF8573C98
__text:00118DE8                 DCD 0xB503CC88, 0x56F240, 0xFB6EF7FF, 0x611AF24F, 0x228F1A7
__text:00118DE8                 DCD 0xF8472300, 0xF8570C18, 0xB5030C88, 0x14F240, 0xFB60F7FF
__text:00118DE8                 DCD 0x113F2C0, 0x68094479, 0xF240B503, 0xF7FF005D, 0xF857FB57
__text:00118DE8                 DCD 0xF8473CA4, 0x46191CA8, 0xF240B503, 0xF7FF001E, 0xF247FB4D
__text:00118DE8                 DCD 0xF2C0222E, 0x447A0215, 0xC1CF847, 0xB5036810, 0x60F240
__text:00118DE8                 DCD 0xFB40F7FF, 0xF107447A, 0xF8570308, 0xF8C99C80, 0xF8573000
__text:00118DE8                 DCD 0xB5033C24, 0x11F240, 0xFB32F7FF, 0x3C28F847, 0xF8574608
__text:00118DE8                 DCD 0xF8471C9C, 0xF00B9CAC, 0xB503FA88, 0x58F240, 0xFB24F7FF
__text:00118DE8                 DCD 0x2C38F857, 0xCA4F847, 0xB5034610, 0x5CF240, 0xFB1AF7FF
__text:00118DE8                 DCD 0xEC98F857, 0xEC10F847, 0xB5034691, 0x5FF240, 0xFB10F7FF
__text:00118DE8                 DCD 0x115F2C0, 0xF8574479, 0xB5032CB0, 0x38F240, 0xFB06F7FF
__text:00118DE8                 DCD 0xCE0F847, 0xCE0F857, 0x2108F64A, 0x114F2C0, 0xB5034479
__text:00118DE8                 DCD 0x65F240, 0xFAF8F7FF, 0xCF4F857, 0xE94CF108, 0xCD4F857

#2

这堆DCD IDA里复制出来的? 如果是, 那就把光标放上去, 依次按 u -> y -> p


#3

多谢解答。
按照你说的的确出现了对应的函数,但是这个函数前面和后面 都变成了DCB,这个是怎么回事呢?断点一个函数,发现函数执行完后 LR指向的是这些DCB,该怎么理解这些莫名的DCB?

__text:00118DE2                 DCB 0x79 ; y
__text:00118DE3                 DCB 0x44 ; D
__text:00118DE4                 DCB    7
__text:00118DE5                 DCB 0xF1
__text:00118DE6                 DCB    8
__text:00118DE7                 DCB    2
__text:00118DE8
__text:00118DE8 ; =============== S U B R O U T I N E =======================================
__text:00118DE8
__text:00118DE8 ; Attributes: noreturn
__text:00118DE8
__text:00118DE8 sub_118DE8
__text:00118DE8                 PUSH            {R0,R1,LR}
__text:00118DEA                 MOVW            R0, #0x1C
__text:00118DEE                 BL              loc_1185FC
__text:00118DEE ; End of function sub_118DE8
__text:00118DEE
__text:00118DEE ; ---------------------------------------------------------------------------
__text:00118DF2                 DCB    9
__text:00118DF3                 DCB 0x68 ; h
__text:00118DF4                 DCB 0x47 ; G
__text:00118DF5                 DCB 0xF2
__text:00118DF6                 DCB 0xB2
__text:00118DF7                 DCB 0x23 ; #
__text:00118DF8                 DCB 0xC0

#4

IDA没有自动识别为指令而已