0

当我用 IDA 打开 iOS 框架地址簿时,我得到以下代码:

**__ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook__
var_C= -0xC
PUSH            {R7,LR}
MOV             R7, SP
SUB             SP, SP, #4
MOVW            R1, #0x2B06
MOV.W           R12, #0
MOVT.W          R1, #0xB
STR.W           R12, [SP,#0xC+var_C]
ADD             R1, PC
LDR             R1, [R1]
BLX             _objc_msgSend
ADD             SP, SP, #4
POP             {R7,PC}
; End of function __ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook__**

如何在调用 _objc_msgSend() 之前知道 R1 中存储了哪些选择器。

在互联网的帮助下,我做了以下事情:

  1. 在 MOVW R1, #0x2B06 和 MOVT.W R1, #0xB 之后,我得到了 R1=0x000B2B06

  2. 在 ADD R1, PC 之后,我得到 R1=0x000B2B06+PC(A13A)+4=0x000BCC44,其中 A13A 是 ADD R1, PC 的地址

  3. 该地址附近的内容是:

    __objc_selrefs:000BCC44 DCD aInitasaddres_0 ; “initAsAddressBook:withAddressBook:withS”... __objc_selrefs:000BCC48 DCD aDefaultstylepr ; "defaultStyleProviderForStyle:" __objc_selrefs:000BCC4C DCD aInitwithnaviga ; "initWithNavigationController:" __objc_selrefs:000BCC50 DCD aSetupinitialst ; “setupInitialStackAndLoadState:”

所以我得到了选择器“initAsAddressBook:withAddressBook:withS ...”,

4.但是当我记录工作流时,我得到了“setupInitialStackAndLoadState:”实际上被调用了。

我获取选择器的方法有什么问题吗?

4

1 回答 1

0

我认为这只是您的日志记录工具的错误或时间问题。显然是在召唤initAsAddressBook:withAddressBook:withStyle:。这是 IDA 6.3 显示的内容(看起来有点不同):

__text:000014A8       PUSH            {R7,LR}
__text:000014AA       ADD             R7, SP, #0
__text:000014AC       SUB             SP, SP, #4
__text:000014AE       LDR             R1, =(selRef_initAsAddressBook_withAddressBook_withStyle_ - 0x14BA)
__text:000014B0       SXTB            R2, R2
__text:000014B2       MOV.W           R12, #0
__text:000014B6       ADD             R1, PC ; selRef_initAsAddressBook_withAddressBook_withStyle_
__text:000014B8       STR.W           R12, [SP,#4+var_4]
__text:000014BC       LDR             R1, [R1]          ; "initAsAddressBook:withAddressBook:withS"...
__text:000014BE       BLX             _objc_msgSend
__text:000014C2       SUB.W           SP, R7, #0
__text:000014C6       POP             {R7,PC}

选择setupInitialStackAndLoadState器稍后在initAsAddressBook:withAddressBook:withStyle:.

于 2012-06-01T15:05:43.937 回答