汇编代码:

; 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  高) = selRef_mainBundle 地址偏移量的高 16 位

movw  r0, #44426 位) = classRef_NSBundle 偏移量的低 16 位

movt  r0, #3293  位) = 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:] 的实现的更多相关文章

  1. [原]逆向iOS SDK -- “添加本地通知”的流程分析

    观点: 代码面前没有秘密 添加通知的 Demo 代码 - (void)scheduleOneLocalNotification { [[UIApplication sharedApplication] ...

  2. [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)

    注释过的反汇编代码:http://pan.baidu.com/share/link?shareid=3491166579&uk=537224442 伪代码(不精确,仅供参考): NSStrin ...

  3. [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 6.1)

    汇编代码: ; 状态:R0 = imageFileName, R1 = mainBundle, R2 = isRetina PUSH    {R4-R7,LR} ; R0 = imageFileNam ...

  4. 新浪微博iOS SDK UIImage+WBSDKResize.o

    Undefined symbols for architecture armv7: "_kCGImageSourceThumbnailMaxPixelSize", referenc ...

  5. 逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)

    注释过的反汇编代码:http://pan.baidu.com/share/link?shareid=3491166579&uk=537224442 伪代码(不精确,仅供参考): NSStrin ...

  6. iOS SDK开发汇总

    以前也做过静态库的开发,不过都是一些简单的调用,最近在做项目的时候,发现其中还有很多问题,所以建个小项目简单记录遇到的问题以及正确的解决办法. 在项目中遇到的问题如下:xib文件获取不到, story ...

  7. 转载-iOS SDK开发

    最近帮兄弟公司的做支付业务sdk,积累了 sdk 封装的经验!下面我会从零开始把我的 sdk 封装和调试经历分享给大家,希望能给看到这篇文章的人有所帮助! 本文我会从以下几个方面来讲述: Framew ...

  8. 【原】iOS学习48地图

    一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人.微博.支付宝等 在上述应 ...

  9. 【原】iOS学习44之动画

    1. 简单动画 1> UIImageView GIF 动画 GIF图的原理是:获取图片,存储在图片数组中,按照图片数组的顺序将图片以一定的速度播放 UIImageView *showGifima ...

随机推荐

  1. ios 调节器 modal 得知

    代码中创建: 1.appdelegate 该contoller放置controller下一个 - (BOOL)application:(UIApplication *)application didF ...

  2. Redis实现高并发分布式序列号

    使用Redis实现高并发分布式序列号生成服务 序列号的构成 为建立良好的数据治理方案,作数据掌握.分析.统计.商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和 ...

  3. 【从翻译mos文章】oracle linux 和外部存储系统 关系

    oracle  linux 和外部存储系统 关系 参考原始: Oracle Linux and External Storage Systems (Doc ID 753050.1) 范围: Linux ...

  4. Windows Phone 8.1 应用生命周期

    原文:Windows Phone 8.1 应用生命周期 一.“后退键”不会终止应用 关于 Windows Phone 8.1 的应用生命周期,第一个要知道的关键就是:“后退键”不会终止应用! 在 8. ...

  5. SVN & Git (二)

    Git:是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus T ...

  6. 【甘道夫】Ubuntu群集配置 - 免费登陆

    引言 这是几年前写的文章,但一直以来该问题被反复问到.所以我决定将它又一次搬上屏幕. 正文 三个节点:masternode    slavenode1   slavenode2 第一步:全部节点分别生 ...

  7. C语言中关键字auto、static、register、const、volatile、extern的作用

    原文:C语言中关键字auto.static.register.const.volatile.extern的作用 关键字auto.static.register.const.volatile.exter ...

  8. DDD分层架构之仓储

    DDD分层架构之仓储(层超类型基础篇) 前一篇介绍了仓储的基本概念,并谈了我对仓储的一些认识,本文将实现仓储的基本功能. 仓储代表聚合在内存中的集合,所以仓储的接口需要模拟得像一个集合.仓储中有很多操 ...

  9. Model和Entity Framework

    Model和Entity Framework 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 下一节:ASP.NET MVC5 + EF6 入门教程 (6) View中 ...

  10. [译]内存中的Java数组是怎么样的

    (文章翻译自What does a Java array look like in memory?) Java中的数组存储了两个中的一个类型:原始类型的类或则是引用类型(比如指针) 当一个对象通过Ne ...