汇编代码:

; 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. 并查集(Union-Find)算法介绍

    原文链接:http://blog.csdn.net/dm_vincent/article/details/7655764 本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构 ...

  2. C#中反射的概念及其使用(转)

    提纲:1. 什么是反射2. 命名空间与装配件的关系3. 运行期得到类型信息有什么用4. 如何使用反射获取类型5. 如何根据类型来动态创建对象6. 如何获取方法以及动态调用方法7. 动态创建委托 1.什 ...

  3. 触摸屏touchstart 与 click

    设计效果:当手指点击或触摸红框线menuList之外的部分时,弹框menuList消失. 问题:在优化触屏版的时候发现如图问题.当menuList弹出.手指触摸屏幕向下滑动时,menuList弹框不消 ...

  4. [mysql]刷新windows恢复后mysql和&quot;Access denied for user&#39;root&#39;@&#39;IP&#39;&quot;处理问题

    mysql数据库软件实际上是绿色的,重装系统后能够继续使用. 1.重装系统保留原有的后mysql安装文件夹,数据文件夹. 2.制作用于启动一个批处理文件mysql:[run.bat]的文件存储在mys ...

  5. linux_创建用户_copy远程文件_解压缩_执行

    查看历史命令: history 创建用户: sudo useradd -m -s /bin/bash cph  [会自动创建cph文件夹,并将才cph文件夹权限和组设为cph] 创建用户密码: pas ...

  6. Log4j2 简明教程

    一.概述 log4j2官方文档内容非常多,要一次性了解全部是不可能的.正确的步骤应当是先了解最常见的配置,当发现原有知识无法解决问题,再重新查看文档看有没有合适的配置.下面将从文件结构入手,再到简单的 ...

  7. Spark入门级小玩

    ·背景 随着周边吐槽hadoop的声音渐渐多起来之后,spark也逐渐进入了大家的视野.之前,笔者有粗略的写过一篇spark的安装和性能比较[http://www.cnblogs.com/zacard ...

  8. ORACLE 中极易混淆的几个 NAME 的分析和总结

    我们知道,Oracle中的各种NAME会在我们的各个配置文件里常常出现,大致有下面这些: 在init.ora中有DB_NAME,INSTANCE_NAME,SERVICE_NAME 配置DG的时候,为 ...

  9. 非常多人不愿意承认汉澳sinox已经超过windows

    汉澳sinox採用的zfs和jail打造高可靠性存储server和矩阵计算机,这不是windows和linux能相提并论的. 只是非常多人立即出来出来反驳说,windows驱动程序多(就是支持硬件多) ...

  10. 面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

    什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...