2012-06-01 3 views
0

Когда я открываю рамки IOS AddressBook с 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__** 

Как можно узнать, что селектор хранится в R1 перед тем _objc_msgSend () называется.

С некоторой помощью Интернета, я делаю следующие вещи:

  1. После MOVW R1, # 0x2B06 и MOVT.W R1, # 0xB, я получил R1 = 0x000B2B06

  2. After 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: тетивы ...",

4.Ы при входе в рабочем процессе, я получил, что "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

 Смежные вопросы

  • Нет связанных вопросов^_^