2012-06-01 22 views
0

當我打開了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( )叫。

來自互聯網一些幫助,我做以下事情:

  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.But當我登錄我得到了 「setupInitialStackAndLoadState:」 工作流程實際上是調用。

我的方法得到選擇器有什麼問題嗎?

+0

「initAsAddressBook」方法調用另一個「initAsAddressBook」選擇器是有意義的。你爲什麼認爲這個調用進入「setupInitialStackAndLoadState」?你如何「記錄工作流程」? –

+0

我使用MSMessageHook在每個方法的開頭和結尾添加日誌,包括「initAsAddressBook:withAddressBook:withS ...」。應用程序在運行時,我得到了以下日誌:啓動:ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook_ 開始:ABPeoplePickerNavigationController_setupInitialStackAndLoadState_ ...完成:ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook_and沒有開始:ABPeoplePickerNavigationController_initAsAddressBook_withAddressBook_withStyle_出現在日誌文件中! – youmingtaizi

回答

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:以後調用。

+0

但在我的日誌文件中,不調用initAsAddressBook:withAddressBook:withStyle:方法。所謂的是initAsAddressBook:withAddressBook :.所以也許你說什麼「setupInitialStackAndLoadState選擇器稍後在initAsAddressBook中調用:withAddressBook:withStyle:」沒有任何意義! – youmingtaizi