汇编代码:

; 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. wp如何代码实现锁屏

    原文:wp如何代码实现锁屏 由于wp系统对开发者相对封闭,造成了用户对那些稍有用处但又不那么有用的功能过度追求,比如说重启.锁屏等功能.针对一个功能写两行代码,再起一个牛逼哼哼的名字,就可以获得超级多 ...

  2. 【Linux】Vim编辑器-批量注释与反注释

    [-] vim编辑器---批量注释与反注释 方法一 块选择模式 插入注释 取消注释 方法二 替换命令 批量注释 取消注释 实例演示   vim编辑器---批量注释与反注释 在使用vim编写代码的时候, ...

  3. 3.集--LinkedTransferQueue得知

    近期在阅读开源项目里,发现有几个project都不尽同样地使用LinkedTransferQueue这个数据结构.比方netty,grizzly,xmemcache,Bonecp. Bonecp还扩展 ...

  4. 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划

    今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...

  5. Linux报too many open files的解决方案

    今天系统中有一台服务器出现异常,有时连简单的shell命令都无法执行,各种奇怪的报错,有的时候又可以成功执行 如: -bash: error while loading shared librarie ...

  6. easyui datagrid shift 多选

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

  7. 前端构建利器Grunt—Bower

    runt + Bower—前端构建利器 目前比较流行的WEB开发的趋势是前后端分离.前端采用重量级的Javascript框架,比如Angular,Ember等,后端采用restful API的Web ...

  8. ASP.NET 5 Identity

    ASP.NET 5 Identity   “跌倒了”指的是这一篇博文:爱与恨的抉择:ASP.NET 5+EntityFramework 7 如果想了解 ASP.NET Identity 的“历史”及“ ...

  9. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...

  10. Oracle并行查询出错

    1.错误描写叙述 ORA-12801: 并行查询服务器P007中发出错误信号 ORA-01722:无效数字 12801.00000 -"error signaled in parallel ...