2014-09-14 3 views
-2

Вот рутина. Может кто-нибудь объяснить, что мне нужно изменить, чтобы сделать его вернуть значение TRUEIDA Pro: Как изменить подпрограмму, чтобы всегда возвращать true?

__text:00086494 ; =============== S U B R O U T I N E ======================================= 
__text:00086494 
__text:00086494 ; BLAH - (char)free 
__text:00086494 
__text:00086494 ; char __cdecl -[BLAH free](struct BLAH *self, SEL) 
__text:00086494 __BLAH_free_     ; DATA XREF: __objc_const:00BC0CECo 
__text:00086494     MOV    R1, #(_OBJC_IVAR_$_BLAH._free - 0x864A0) ; char _free; 
__text:0008649C     ADD    R1, PC ; char _free; 
__text:0008649E     LDR    R1, [R1] ; char _free; 
__text:000864A0     LDRSB   R0, [R0,R1] 
__text:000864A2     BX    LR 
__text:000864A2 ; End of function -[BLAH free] 
+2

Чтение [Стандарт вызова процедуры архитектуры ARM] (http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf), вероятно, будет хорошим Начало. – Michael

ответ

3

Практически любой ARM ABI передает возвращаемое значение в r0, и этот код выглядит не станет исключением. В этом случае ldrsb r0, [r0, r1] загружает возвращаемое значение с помощью указателя self в r0 и вычисленного смещения в r1. Так как это не имеет побочных эффектов или другого сложного поведения для учетной записи, вы можете просто заменить эту инструкцию в зависимости от того, какое фактическое числовое значение TRUE должно быть, например. mov r0, #1, mvn r0, #0 и т. Д.

+0

Спасибо. Не могли бы вы рассказать об этом немного. Как узнать, что такое числовое значение true. – totalitarian

+0

Декорация символов подразумевает [Objective-C] (http://stackoverflow.com/q/541289/3156750) (и LDRSB сообщает 'подписанный символ'), поэтому определение языка - это хорошее место для начала. В крайнем случае вы обычно можете посмотреть на разборку всех вызывающих абонентов (или отлаживать шаг), чтобы узнать, какие значения они тестируют. – Notlikethat

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