我开始学习逆向工程,所以我正在尝试逆向为 ARM(iOS) 编译的示例应用程序,现在我正在研究代码。
此部分WHILE
正好位于函数开始值的开头和之前。但我找不到原始值。
这是函数 .h 文件:
#import "NSObject.h"
@interface SampleCalc : NSObject
+ (double)doCalc:(double)arg1;
@end
这是ARM代码:
+[SampleCalc doCalc:]:
0002f198 movw sb, #0x6cb4 ; Objective C Implementation defined at 0x95db8 (class method), :lower16:(0xc5e60 - 0x2f1ac)
0002f19c vmov.i32 d18, #0x0
0002f1a0 movt sb, #0x9 ; :upper16:(0xc5e60 - 0x2f1ac)
0002f1a4 vmov d16, r2, r3
0002f1a8 add sb, pc ; 0xc5e60
0002f1aa movs r2, #0x0
0002f1ac add.w r3, sb, #0x8 ; 0xc5e68
0002f1b0 vldr d17, [sb]
如果我理解正确,这是 ARM PIC(位置无关代码)。
但我不明白这里的逻辑0002f1b0
- 括号是否意味着sb
存储地址并加载值d17
?地址是什么 -0xc5e68
正确吗?
其中0xc5e60
包含:
000c5e60 db 0x00 ;
000c5e61 db 0x00 ; '.'
000c5e62 db 0x00 ; '.'
000c5e63 db 0x00 ; '.'
000c5e64 db 0x00 ; '.'
000c5e65 db 0x00 ; '.'
000c5e66 db 0x33 ; '3'
000c5e67 db 0x40 ; '@'
000c5e68 db 0x00 ;
000c5e69 db 0x00 ; '.'
000c5e6a db 0x00 ; '.'
000c5e6b db 0x00 ; '.'
000c5e6c db 0x00 ; '.'
000c5e6d db 0x00 ; '.'
000c5e6e db 0x34 ; '4'
000c5e6f db 0x40 ; '@'
000c5e70 db 0x00 ; '.'
000c5e71 db 0x00 ; '.'
000c5e72 db 0x00 ; '.'
000c5e73 db 0x00 ; '.'
000c5e74 db 0x00 ; '.'
000c5e75 db 0x00 ; '.'
000c5e76 db 0x35 ; '5'
那么这是否意味着D17
获得价值0x00
?
额外的问题,如果可能的话,所有这些.
和@
.
谢谢。