Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Дизассемблирование библиотеки


Автор: T0ohtik 23.2.2009, 16:25
Привет! С ассемблером знаком весьма смутно, в пределах университетской программы.Сейчас программирую на С/С++ под UNIX (Mac OS). Так получилось, что надо дизассемблировать одну динамическую библиотеку (dylib) найти одну функцию и узнать какие она параметры принимает (тип, количество) и какие возвращает. Либу открывал через IDA. Функцию нашел, но по коду только смутные представления:
Код

__text:30A59EB0                 BL      _SBGetApplicationBadge
__text:30A59EB4                 CMP     R0, #0
__text:30A59EB8                 BNE     loc_30A59EE4
__text:30A59EBC                 LDRSB   R3, [SP]
__text:30A59EC0                 CMP     R3, #0
__text:30A59EC4                 BEQ     loc_30A59EE4
__text:30A59EC8                 LDR     R0, =(unk_38A85224 - 0x30A59EE0)
__text:30A59ECC                 LDR     R1, =(unk_38A8718C - 0x30A59EDC)
__text:30A59ED0                 MOV     R2, SP
__text:30A59ED4                 LDR     R1, [PC,R1]     ; "stringWithUTF8String:"
__text:30A59ED8                 LDR     R0, [PC,R0]
__text:30A59EDC                 BL      _objc_msgSend
__text:30A59EE0                 B       loc_30A59EE8
__text:30A59EE4 ; ---------------------------------------------------------------------------
__text:30A59EE4
__text:30A59EE4 loc_30A59EE4                            ; CODE XREF: __text:30A59EB8j
__text:30A59EE4                                         ; __text:30A59EC4j
__text:30A59EE4                 MOV     R0, #0
__text:30A59EE8
__text:30A59EE8 loc_30A59EE8                            ; CODE XREF: __text:30A59EE0j
__text:30A59EE8                 SUB     SP, R7, #8
__text:30A59EEC                 LDMFD   SP!, {R4,R5,R7,PC}
__text:30A59EEC ; ---------------------------------------------------------------------------
__text:30A59EF0 off_30A59EF0    DCD unk_38A871EC - 0x30A59E88 ; DATA XREF: __text:30A59E78r
__text:30A59EF4 off_30A59EF4    DCD unk_38A872DC - 0x30A59E9C ; DATA XREF: __text:30A59E90r
__text:30A59EF8 off_30A59EF8    DCD unk_38A85224 - 0x30A59EE0 ; DATA XREF: __text:30A59EC8r
__text:30A59EFC off_30A59EFC    DCD unk_38A8718C - 0x30A59EDC ; DATA XREF: __text:30A59ECCr


Как я понял CMP     R0, #0 делает сравнение 0 параметра функции с #0. #0 - это скорее всего строка? А R0, R1 ... Rx - это параметры функции? Что значит строка LDRSB   R3, [SP] - по гуглу понял, что это загрузка из памяти?
Далее следует вообще что то не понятное:
LDR     R0, =(unk_38A85224 - 0x30A59EE0) при наведении мышки на unk_38A85224 всплывает подсказка, в ней присутствует слово NSString - в Ojective C это строка. Т.е. как я понял идет объявление строки? Заранее спасибо!

Автор: p51x 19.3.2009, 14:41
Rx - регистры, #0 - это 0
LDRSB  R3, [SP]     - загрузка байта со знаком в регистр R3 из памяти, адрес в SP
LDR     R0, =(unk_38A85224 - 0x30A59EE0) - это не объявление, а загрузка в регистр (возможно указателя на строку)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)