当我打开了iOS框架通讯录与IDA,我得到了下面的代码:我如何在ARM汇编得到正确的选择
**__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( )叫。
来自互联网一些帮助,我做以下事情:
后MOVW R1,#0x2B06和MOVT.W R1,#0XB,我得到了R1 = 0x000B2B06
后ADD R1,PC,我得到R1 = 0x000B2B06 + PC(A13A)+ 4 = 0x000BCC44,其中A13A是ADD R1的地址,PC
该地址附近的内容是:
_ _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.But当我登录我得到了 “setupInitialStackAndLoadState:” 工作流程实际上是调用。
我的方法得到选择器有什么问题吗?
“initAsAddressBook”方法调用另一个“initAsAddressBook”选择器是有意义的。你为什么认为这个调用进入“setupInitialStackAndLoadState”?你如何“记录工作流程”? –
我使用MSMessageHook在每个方法的开头和结尾添加日志,包括“initAsAddressBook:withAddressBook:withS ...”。应用程序在运行时,我得到了以下日志:启动:ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook_ 开始:ABPeoplePickerNavigationController_setupInitialStackAndLoadState_ ...完成:ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook_and没有开始:ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook_withStyle_出现在日志文件中! – youmingtaizi