當我打開了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