`
wanzhanzhuce
  • 浏览: 28311 次
社区版块
存档分类
最新评论

[转]IOS热更新研究

阅读更多
http://blog.csdn.net/yy405145590/article/details/41282669

主要思路是替换掉在mono里image.c的mono_image_open_from_data_with_name函数,HOOK掉加载DLL的地方,实现读取自定义的DLL文件。


检查发现在Xcode工程里的libiPhone-lib.a里存在mono的库文件,在libiPhone-lib.a下有两个CPU架构的库

[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo -info libiPhone-lib.a 
 
Architectures in the fat file: libiPhone-lib.a are: armv7 i386 

使用
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo libiPhone-lib.a -thin armv7 -output libiPhone-lib.arm 

解压出armv7的库文件
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -t libiPhone-lib.arm 
[html] view plaincopy在CODE上查看代码片派生到我的代码片
filterscpuimplvectordata.o 
filterscpuimplwarp.o 
filterscpumipmaps.o 
filterscpupassvectordata.o 
filterscpupvrtc.o 
filterscpufxmapsbuffer.o 
filterscpufxmapsmain.o 
filterscpufxmapsdrawjob.o 
filterscpufxmapsdrawqueue.o 
filterscpufxmapsjob.o 
filterscpufxmapspool.o 
filterscpufxmapsthread.o 
parsebitmap.o 
parseblend.o 
parseblur.o 
parsechannelsshuffle.o 
parsecommon.o 
parsecontext.o 
parsedata.o 
parsedirectionalmotionblur.o 
parsedirectionalwarp.o 
parseemboss.o 
parsefxmaps.o 
parsefxmapssetcell.o 
parsegradientmap.o 
parsegrayscaleconversion.o 
parsehsl.o 
parselevels.o 
parsemotionblur.o 
parsenormal.o 
parsesharpen.o 
parsetransformation2d.o 
parseuniformcolor.o 
parsevectorgraphicsdata.o 
parsewarp.o 
apicontext.o 
apihandle.o 
apiversion.o 
libCrashReporter-iphoneos.a-armv7-master.o 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -t libiPhone-lib.arm | grep image.o 
[html] view plaincopy在CODE上查看代码片派生到我的代码片
image.o 
可以看到armv7下确实有image.o的模块


解压出image.o模块

[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -x libiPhone-lib.arm image.o 
用十六进制工具搜索

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
mono_image_open_from_data_with_name  替换成  mono_image_open_from_data_with_xxxx 

自己编译一个imagehook.c的文件生成imagehook.o,内容如下

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
#include <stdio.h> 
 
extern int * 
mono_image_open_from_data_with_xxxx( 
                                    char *data, unsigned int data_len, 
                                    int  need_copy, 
                                    int *status, 
                                    int only, const char *name); 
 
 
int * 
mono_image_open_from_data_with_name( 
                                    char *data, unsigned int data_len, 
                                    int  need_copy, 
                                    int *status, 
                                    int only, const char *name) 

    printf("call mono_image_open_from_data_with_name 0x%x 0x%x 0x%x 0x%x 0x%x %s", (int)data, (int)data_len, need_copy, (int)status, only, name); 
    return mono_image_open_from_data_with_xxxx(data, data_len, need_copy, status, only, name); 


将image.o 和 imagehook.o重新打包进libiPhone-lib.arm
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -r libiPhone-lib.arm image.o 
ar -q libiPhone-lib.arm imagehook.o 

重新生成libiPhone-lib.a
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo libiPhone-lib.a -replace armv7 libiPhone-lib.arm -output libiPhone-lib.a_01 

这样用新生成的libiPhone-lib.a去链接应用程序会发现调用到了我们自己的函数。

但是你会发现都是没用的,因为mono在IOS下是FULL AOT模式编译的,每个脚本dll会生成对应的.s汇编代码直接连接到可执行文件里面.
分享到:
评论

相关推荐

    reactnative-源码-热更新 iOS

    在本文中,我们将深入探讨React Native(RN)的热更新技术在iOS平台上的实现,以及如何通过源码来理解和配置这一功能。React Native作为一个流行的开源框架,允许开发者使用JavaScript编写原生移动应用。热更新是RN...

    Swift-react-native自建热更新版本升级工具demoios

    在iOS应用开发中,为了提供更好的用户体验和及时修复线上问题,开发者经常需要使用热更新技术。Swift和React Native是两种非常流行的开发语言和框架,它们分别用于原生iOS开发和跨平台开发。在这个名为"Swift-react-...

    egret之安卓热更新下载.zip

    在“egret之安卓热更新下载.zip”这个压缩包中,我们聚焦的是如何在Android平台上实现Egret项目的热更新功能,...通过学习和研究这个示例,开发者能够提升其Egret项目的技术实力,提供更加流畅、及时的更新体验给用户。

    Unity热更新ILRuntime 插件

    ILRuntime插件尤其适用于安卓和iOS平台,这两个平台由于其自身的特性,通常对应用的更新过程有着严格的限制。 Unity3D是全球广泛使用的跨平台3D游戏开发工具,它基于C#编程语言,使用Mono/.NET框架。然而,原生的...

    Quick-Cocos2dx-Community 3.6.5 Release Note 带官方热更新等demo

    Quick-Cocos2dx-Community 3.6.5版本发布说明是Cocos2d-x社区的一个重要里程碑,这个版本包含了官方支持的热更新功能以及其他一些关键的改进和演示项目。Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,并...

    2018年最新的微信小程序-IOS系统中 源码

    5. 小程序更新:微信小程序支持热更新,开发者可以通过版本控制策略来更新用户的小程序版本。 6. 微信支付:微信小程序内可以集成微信支付功能,实现商品购买等交易行为。 7. 调试和测试:微信开发者工具提供了...

    swift-HotFix一种轻量级的可以通过苹果审核的热修复方案可以替代JSPatch

    开发者可以研究这些资源来了解具体的实现细节和使用方法,例如如何构建修复包,如何在应用中集成热修复机制,以及如何进行测试和调试。 总的来说,Swift HotFix为iOS开发者提供了一种在不影响苹果审核流程的前提下...

    ios-tableview嵌套使用实现评论与对评论评论的功能.zip

    在iOS开发中,UITableView是一种非常常见的控件,用于展示数据列表。...通过研究这个示例项目,开发者可以学习到如何在iOS应用中实现复杂列表交互,这对于构建具有深度和层次感的评论系统至关重要。

    iOS-Monitor-Platform, iOS 性能监控 SDK —— Wedjat(华狄特)开发过程的调研和整理.zip

    这篇关于Wedjat的调研和整理文章,将深入探讨如何有效地利用SDK进行性能分析,提供最佳实践和案例研究,帮助开发者提升iOS应用的性能监控能力。通过对Wedjat SDK的学习和实践,开发者可以更好地理解iOS应用的性能...

    IOS上的手电筒,摸拟打火机源代码

    在iOS平台上,手电筒和模拟打火机的应用开发涉及到多方面的...通过学习这个项目,开发者不仅可以了解到如何在iOS平台上实现这些功能,还可以研究如何优化性能、提高用户体验,以及如何处理各种设备和系统兼容性问题。

    一个reactnativeApp模拟JueJinApp可运行在Android和iOS之上

    React的声明式编程模型使得UI的更新变得简单且高效,只需要更改数据,React会自动计算出最小化的UI变化并进行更新。 JueJinApp是知名的中文技术社区掘金的移动应用,其特点是提供技术文章、问答、项目分享等服务。...

    React Native版本的Bilibili客户端,支持iOS和Android用户.zip

    此外,热更新是React Native的一个亮点,通过`CodePush`等服务,开发者可以在用户不更新应用的情况下推送新的JavaScript代码,提高了迭代效率。 对于测试和调试,React Native提供了模拟器和真机调试工具,如Chrome...

    bugly热修改Demo

    【Bugly热修改Demo】是一个基于Bugly平台的热修复示例项目,旨在帮助开发者理解和应用热更新技术。Bugly是腾讯推出的一款专注于移动应用稳定性管理的服务,它提供了强大的异常上报、分析以及热修复功能,使得开发者...

    IOS应用源码之andresbonilla-Balloon-Pop-Fever-42b8b8d.zip

    这个项目是一款基于iOS平台的休闲游戏,名为“气球爆破热”,通过分析其源码,我们可以了解如何在iOS上构建类似的游戏应用,以及运用Swift编程语言和UIKit框架的关键技术。 首先,项目使用了Swift作为主要的编程...

    应用自动更新demo

    例如,Android和iOS对于应用更新的处理方式有所不同,Android支持更加灵活的热更新,而iOS则更强调通过App Store进行官方更新。因此,开发自动更新功能时,需要根据目标平台的规范和最佳实践进行适配。 总的来说,...

    iOS组件化路由设计思路分析1

    在iOS应用开发中,组件化路由设计是一种解决复杂项目结构和多组件交互问题的重要方法。...通过深入研究和实践,开发者可以找到适合自己项目的最佳路由设计方案,提高应用的灵活性、可维护性和用户体验。

    WeatherAppReactNative采用reactnative构建的天气预报iOSApp

    同时,React Native也支持热更新,开发者可以无需重新安装应用即可实时更新代码。 【WeatherAppReactNative项目简介】 "WeatherAppReactNative"是一个利用React Native构建的天气预报应用,专为iOS平台设计。该...

    Leanpub.Functional Reactive Programming on iOS.2014.pdf

    文档还可能涉及一些对于初学者来说可能较为抽象的概念,例如信号的热(Hot)和冷(Cold)信号、信号的多播(Multicasting)和如何将响应式编程与iOS开发中的模型-视图-视图模型(Model-View-ViewModel, MVVM)架构模式...

    信息安全_数据安全_D1T2 - Apple iOS UI Access Permi.pdf

    3. 发布月度更新进行热修复和打补丁。 4. 通过发布新的iOS版本来彻底解决。 例如,在iOS v6.0 - v6.1中,存在紧急密码绕过漏洞,受影响的设备包括iPhone 5、5s、iPad及iPad 2系列。这种漏洞允许在物理访问设备并...

Global site tag (gtag.js) - Google Analytics