про objective-c cocoa ARM

Тема в разделе "WASM.RESEARCH", создана пользователем ktoto, 13 мар 2008.

  1. ktoto

    ktoto New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    21
    Не подскажет ли кто нибудь нотации вызовов
    для _objc_msgSend.
    Я так понимаю что в R1 должен быть метод.
    В каких регистрах должно быть остальное?


    Был бы очень признателен если бы ткнули меня в более продвинутый инструмент для разбора ARM.


    вот пример :
    __text:00001AF8 LDR R5, =unk_E518
    __text:00001AFC LDR R1, [PC,R5] ; "text"
    __text:00001B00 LDR R0, [R4,#0x5C]
    __text:00001B04 BL _objc_msgSend
    __text:00001B08 CMP R0, #0
    __text:00001B0C BEQ loc_1B38
    __text:00001B10 LDR R5, =unk_E500
    __text:00001B14 LDR R1, [PC,R5] ; "text"
    __text:00001B18 LDR R0, [R4,#0x5C]
    __text:00001B1C BL _objc_msgSend
    __text:00001B20 LDR R5, =unk_E4F4
    __text:00001B24 LDR R1, [PC,R5] ; "copy"
    __text:00001B28 BL _objc_msgSend
    __text:00001B2C STR R0, [R4,#0x58]
    __text:00001B30 MOV R5, #0
    __text:00001B34 STR R5, [R4,#0x5C]
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Прототип такой:
    id objc_msgSend(id self, SEL op, ...);
    В EABI (стандартный ABI для арма) первых четыре параметра - в R0-R3, остальное через стек.
    Почитай еще вот это http://xtin.activebb.net/forum-f2/tema-t49.htm
    Там про x86, но принцип тот же.
     
  3. ktoto

    ktoto New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    21
    Большое спасибо.
    попутно еще вопрос

    __text:00002728 08 38 9F E5 LDR R3, =unk_D908
    __text:0000272C 03 B0 9F E7 LDR R11, [PC,R3] ; "setBodyText:"
    __text:00002730 50 00 9D E5 LDR R0, [SP,#0x9C+var_4C]
    __text:00002734 CD 0D 00 EB BL _objc_msgSend

    D908 + 2730 = 10038
    смотрим туда там
    LocalizedStringForKey:value:table:
    но IDA подставляет setBodyText:

    message_refs:00010038 B0 58 00 00 off_10038 DCD aLocalizedstrin ; DATA XREF: sub_1A2C+1B0o
    __message_refs:00010038 ; sub_1DF0+80o ...
    __message_refs:00010038 ; "localizedStringForKey:value:table:"
    __message_refs:0001003C 80 5A 00 00 off_1003C DCD aSetbodytext ; DATA XREF: sub_1A2C+21Co
    __message_refs:0001003C ; sub_218C+5A0o ...
    __message_refs:0001003C ; "setBodyText:"

    Глюки IDA или я торможу ?
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    видимо результат возвращает в R0.
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    http://www.keil.com/support/man/docs/armasm/armasm_cegibccg.htm#Babbdajb
    Таким образом, значение PC для инструкции по адресу 272C равняется 2734, а не 2730.
     
  6. ktoto

    ktoto New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    21
    Хм. Очень странное поведение для процессора, что программный счетчик обгоняет на 8 байт текущую позицию.
    может связанно с упреждающими выборками. :dntknw:
    Но все равно спасибо . Приму к сведению.
     
  7. ConstZ

    ConstZ New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    42
    Думаю, это связано с реализацией возврата из подпрограммы в "древних" версиях ARM, пока не ввели команду BLX.

    Например:
    ; вызов функции
    MOV LR,PC
    MOV PC,R12
    ; продолжение
    ....
    ; возврат из функции
    MOV PC,LR