[原]逆向iOS SDK -- +[UIImage imageNamed:] 的实现
汇编代码:
|
; 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:] 的实现的更多相关文章
- [原]逆向iOS SDK -- “添加本地通知”的流程分析
观点: 代码面前没有秘密 添加通知的 Demo 代码 - (void)scheduleOneLocalNotification { [[UIApplication sharedApplication] ...
- [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)
注释过的反汇编代码:http://pan.baidu.com/share/link?shareid=3491166579&uk=537224442 伪代码(不精确,仅供参考): NSStrin ...
- [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 6.1)
汇编代码: ; 状态:R0 = imageFileName, R1 = mainBundle, R2 = isRetina PUSH {R4-R7,LR} ; R0 = imageFileNam ...
- 新浪微博iOS SDK UIImage+WBSDKResize.o
Undefined symbols for architecture armv7: "_kCGImageSourceThumbnailMaxPixelSize", referenc ...
- 逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)
注释过的反汇编代码:http://pan.baidu.com/share/link?shareid=3491166579&uk=537224442 伪代码(不精确,仅供参考): NSStrin ...
- iOS SDK开发汇总
以前也做过静态库的开发,不过都是一些简单的调用,最近在做项目的时候,发现其中还有很多问题,所以建个小项目简单记录遇到的问题以及正确的解决办法. 在项目中遇到的问题如下:xib文件获取不到, story ...
- 转载-iOS SDK开发
最近帮兄弟公司的做支付业务sdk,积累了 sdk 封装的经验!下面我会从零开始把我的 sdk 封装和调试经历分享给大家,希望能给看到这篇文章的人有所帮助! 本文我会从以下几个方面来讲述: Framew ...
- 【原】iOS学习48地图
一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人.微博.支付宝等 在上述应 ...
- 【原】iOS学习44之动画
1. 简单动画 1> UIImageView GIF 动画 GIF图的原理是:获取图片,存储在图片数组中,按照图片数组的顺序将图片以一定的速度播放 UIImageView *showGifima ...
随机推荐
- js 正则学习小记之左最长规则
原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'.其实我们的本意是想得到整 ...
- Android真正简单的教程-第十二枪(ViewFlipper实现滑动效果)
直接看代码 1.MainActivity.java: package org.yayun.demo; import android.app.Activity; import android.os.Bu ...
- Java NIO的多路复用及reactor
(from:http://developer.51cto.com/art/201112/306489.htm) 以下描述,为了说明问题,就提提历史(类似的东西,网上一搜一大把,但是希望你能在这里止步, ...
- 【百度地图API】如何制作泡泡放大镜?
原文:[百度地图API]如何制作泡泡放大镜? 任务描述: 我不喜欢API提供的缩放控件耶…… 我能不能使用其他方式放大地图勒? 当然阔以啦! 现在就来教大家如何动手制作一个可爱的泡泡放大镜! 使用它, ...
- HDU 1501 Zipper(DP,DFS)
意甲冠军 是否可以由串来推断a,b字符不改变其相对为了获取字符串的组合c 本题有两种解法 DP或者DFS 考虑DP 令d[i][j]表示是否能有a的前i个字符和b的前j个字符组合得到c的前i+j ...
- 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理(5)(终结)
App已经上线了,应用宝上搜索“健身小管家”即可找到,不过存在几个问题:
- 第1章3节《MonkeyRunner源码剖析》概述:架构(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- 请确保在编译时已将“AjaxControlToolkit.Properties.Resources.NET4.resources”正确嵌入或链接到程序集“AjaxControlToolkit”
原文:请确保在编译时已将"AjaxControlToolkit.Properties.Resources.NET4.resources"正确嵌入或链接到程序集"AjaxC ...
- MVC多模板支持
参考: ASP.NET MVC:多模板支持
- oracle中导入导出数据备份数据库
原文:oracle中导入导出数据备份数据库 数据库所在位置 将数据导出到的文件名 用户名 备份数据库 :exp c ...