逆向iOS SDK -- +[UIImage imageNamed:] 的实现
来源:互联网 发布:矩阵分解模型 sgd 编辑:程序博客网 时间:2024/05/18 01:21
汇编代码:
; Dump of assembler code for function +[UIImage imageNamed:]
; R0 = UIImage, R1 = "imageNamed:", R2 = imageFileName
push {r4, r5, r7, lr} ; 从右向左,依次将这些寄存器压栈
movw r1, #62936 ;R1(低16位) = selRef_mainBundle 地址偏移量的低 16 位的
add r7, sp, #8 ; R7 = 栈上的值
movt r1, #3292 ; R1(高16高) = selRef_mainBundle 地址偏移量的高 16 位
movw r0, #44426 ; R0(低16位) = classRef_NSBundle 偏移量的低 16 位
movt r0, #3293 ; R0(高16位) = classRef_NSBundle 偏移量的高 16 位
add r1, pc ; R1 = selRef_mainBundle
add r0, pc ; R0 = classRef_NSBundle
mov r4, r2 ; R4 = R2 = imageFileName
ldr r1, [r1, #0] ; R1 = "mainBundle"
ldr r0, [r0, #0] ; R0 = NSBundle
blx 0x31f862a4 <dyld_stub_objc_msgSend> ; [NSBundle mainBundle]
mov r5, r0 ; R5 = R0 = mainBundle
bl 0x31e0abb4 <_UIScreenForce1xScale> ; _UIScreenForce1xScale(),
;判断是否是高清屏:高清屏返回 YES,低分屏返回 NO
mov r1, r5 ; R1 = R5 = mainBundle
mov r2, r0 ; R2 = R0 = isRetina
mov r0, r4 ; R0 = R4 = imageFileName
ldmia.w sp!, {r4, r5, r7, lr} ;
b.w 0x31bc2898 <_UIImageAtPath> ;
;_UIImageAtPath(NSString *imageFileName, NSBundle *mainBundle, BOOL isRetina)
nop
; End of assembler dump.
伪代码:
+ (UIImage *)imageNamed:(NSString *)imageFileName {
NSBundle *mainBundle = [NSBundlemainBundle];
BOOL isRetina = _UIScreenForce1xScale();
return_UIImageAtPath(imageFileName, mainBundle, isRetina);
}
- 逆向iOS SDK -- +[UIImage imageNamed:] 的实现
- ios开发UIImage imageNamed方法的误用
- ios开发UIImage imageNamed方法的误用
- ios开发UIImage imageNamed方法的误用
- ios开发UIImage imageNamed方法
- UIImage imageNamed的释放问题
- 逆向iOS SDK -- _UIImageAtPath 的实现(SDK 6.1)
- 逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)
- iOS UIImage类 imageNamed方法使用不当
- (UIImage *)imageNamed
- (UIImage *)imageNamed
- UIImage简谈:[UIImage imageNamed:]与 [UIImage imageWithContentsOfFile]的区别
- UIImage的ImageNamed 和 ImageWithContentOfFile的区别
- 关于 UIImage ImageNamed的内存释放。
- UIImage imageNamed引起的内存问题1
- UIImage imageNamed引起的内存问题2
- UIImage imageNamed 与 imageWithContentsOfFile的区别
- UIImage imageNamed 内存问题!!!
- x3d
- 底层移植之RBL, UBL, Uboot的关系
- 【PHP】基础笔记 05 —— 表达式
- hdu 1870 栈
- Oracle 数据泵详解
- 逆向iOS SDK -- +[UIImage imageNamed:] 的实现
- cocos2d-x lua 之 CCBezierBy 使节点按贝塞尔曲线运动
- 【PHP】基础笔记 06 —— 运算符
- WebGL
- Android开发入门之JUnit
- 【PHP】基础笔记 07 —— 流程控制 之 条件语句
- select, poll和epoll的区别
- 使用特定方法操作SQLite数据库
- Leetcode: Unique Path I & II, Minimum Path Sum, Triangle