CN117992101A - 应用程序修改方法、装置、电子设备及存储介质 - Google Patents
应用程序修改方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117992101A CN117992101A CN202211386360.0A CN202211386360A CN117992101A CN 117992101 A CN117992101 A CN 117992101A CN 202211386360 A CN202211386360 A CN 202211386360A CN 117992101 A CN117992101 A CN 117992101A
- Authority
- CN
- China
- Prior art keywords
- target
- call interface
- interface
- dispatch
- modification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003860 storage Methods 0.000 title claims abstract description 55
- 230000004048 modification Effects 0.000 claims abstract description 179
- 238000012986 modification Methods 0.000 claims abstract description 177
- 230000007246 mechanism Effects 0.000 claims abstract description 81
- 238000000034 method Methods 0.000 claims abstract description 59
- 230000006870 function Effects 0.000 claims description 201
- 238000002715 modification method Methods 0.000 claims description 13
- 230000009471 action Effects 0.000 claims description 7
- 238000005516 engineering process Methods 0.000 abstract description 16
- 238000013473 artificial intelligence Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 12
- 238000004590 computer program Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 7
- 241000282414 Homo sapiens Species 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241000282412 Homo Species 0.000 description 1
- 108091029480 NONCODE Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000003796 beauty Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开了一种应用程序修改方法、装置、电子设备及存储介质。本发明实施例可应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景,该方法包括:获取目标调用接口以及原有派发机制;若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的第一修改信息;若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的第二修改信息;根据每个目标调用接口的目标修改信息,生成修改插件;根据修改插件对目标应用程序进行修改,得到修改后的应用程序。根据本申请的方法,通过修改插件对目标应用程序进行修改,并不需要重新编译目标应用程序,从而省去了编译目标应用程序的时间消耗,提高了目标应用程序修改效率。
Description
技术领域
本申请涉及程序编译处理技术领域,更具体地,涉及一种应用程序修改方法、装置、电子设备及存储介质。
背景技术
应用程序通常会包括多个调用接口,调用接口例如可以是函数、方法、协议以及结构体等。应用程序运行于电子设备中时,电子设备会通过各个调用接口对应的派发机制,对各个调用接口进行调用,以使应用程序的各个功能和操作可以正常运行。
目前,应用程序中会预置各个调用接口的地址或函数派发表,其中,函数派发表包括不同调用接口对应的地址。应用程序运行时,应用程序可以通过调用接口的地址对调用接口直接调用,或者通过函数派发表对调用接口进行调用。
然而,若要修改应用程序的调用接口,需要重新编译新版本的应用程序,导致应用程序修改效率较低。
发明内容
有鉴于此,本申请实施例提出了一种应用程序修改方法、装置、电子设备及存储介质。
第一方面,本申请实施例提供了一种应用程序修改方法,方法包括:获取针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制;若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息,具有父子关系的函数派发表中的子函数派发表包括指向该子函数派发表的父函数派发表的指针,具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址;根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件,每个目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息;根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
第二方面,本申请实施例提供了一种应用程序修改装置,装置包括:第一获取模块,用于获取针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制;第二获取模块,用于若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;第三获取模块,用于若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息,具有父子关系的函数派发表中的子函数派发表包括指向该子函数派发表的父函数派发表的指针,具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址;生成模块,用于根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件,每个目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息;修改模块,用于根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
可选地,第一获取模块,还用于获取针对目标应用程序的待修改调用接口参数;从包括目标调用接口的源文件中获取令牌信息;获取与待修改调用接口参数相匹配的令牌信息,作为目标令牌信息;从源文件中获取每个目标令牌信息对应的调用接口,作为对应每个目标令牌信息的目标调用接口;获取针对每个目标调用接口的原有派发机制。
可选地,第一获取模块,还用于获取针对目标应用程序的配置表文件;对配置表文件中的调用接口进行标记,得到标记文件;根据标记文件,确定针对目标应用程序的待修改调用接口参数。
可选地,第一获取模块,还用于通过预置文本对标记文件中的接口参数进行字符串替换,得到替换后的数据;将替换后的数据中的类文件的注释删除,得到针对目标应用程序的待修改调用接口参数。
可选地,第一获取模块,还用于以字符流的方式读取源文件,得到读取数据;从读取数据提取令牌信息。
可选地,第一获取模块,还用于获取令牌信息中关键字的值;获取与待修改调用接口参数的名称相匹配的值所对应的令牌信息,作为目标令牌信息。
可选地,第一获取模块,还用于在源文件中确定每个目标令牌信息的作用区域,作为对应每个目标令牌信息的目标区域;获取每个目标区域中的调用接口,作为每个目标区域对应的目标调用接口。
可选地,第一获取模块,还用于从源文件中确定每个目标调用接口对应的目标区域;若目标调用接口对应的目标区域中的数据满足第一预设条件,确定目标调用接口的原有派发机制为直接派发;若目标调用接口对应的目标区域中的数据满足第二预设条件,确定目标调用接口的原有派发机制为函数表派发。
可选地,第二获取模块,还用于获取目标调用接口的实际调用地址;将实际函数地址入栈到堆栈寄存器中,得到偏移地址。
可选地,修改模块,还用于根据修改插件,生成中间代码;根据中间代码,得到汇编代码;将汇编代码注入目标应用程序,得到修改后的应用程序。
可选地,装置还包括调用模块,用于若检测到修改后的应用程序启动,获取待调用接口;若修改插件包括对应待调用接口的程序计数器寄存器指针以及偏移地址,获取对应待调用接口的程序计数器寄存器指针以及偏移地址;根据待调用接口的偏移地址,通过待调用接口的程序计数器寄存器从堆栈寄存器中获取待调用接口的地址;通过待调用接口的地址,对待调用接口进行调用。
可选地,调用模块,还用于若修改插件包括的函数派发表发生改变,获取对应待调用接口的具有父子关系的函数派发表;通过对应待调用接口的具有父子关系的函数派发表,对待调用接口进行调用。
第三方面,本申请实施例提供了一种电子设备,包括处理器以及存储器;一个或多个程序被存储在存储器中并被配置为由处理器执行以实现上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质中存储有程序代码,其中,在程序代码被处理器运行时执行上述的方法。
第五方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述的方法。
本申请实施例提供的一种应用程序修改方法、装置、电子设备及存储介质,首先确定至少一个目标调用接口以及每个目标调用接口的原有派发机制,再确定直接派发的目标调用接口对应的第一修改信息以及函数表派发的目标调用接口对应的第二修改信息,并根据每个目标调用接口的目标修改信息,生成修改插件,然后通过修改插件对目标应用程序进行修改,并不需要重新编译目标应用程序,从而省去了编译目标应用程序的时间消耗以及资源消耗,提高了目标应用程序修改效率,并降低了目标应用程序的修改成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请实施例示出的应用场景的示意图;
图2示出了本申请一个实施例提出的一种应用程序修改方法的流程图;
图3示出了本申请实施例中一种具有父子关系的函数派发表的示意图;
图4示出了本申请又一个实施例提出的一种应用程序修改方法的流程图;
图5示出了本申请再一个实施例提出的一种应用程序修改方法的流程图;
图6示出了本申请再一个实施例提出的一种应用程序修改方法的流程图;
图7示出了本申请实施例中一种程序修改过程的示意图;
图8示出了本申请一个实施例提出的一种应用程序修改装置的框图;
图9示出了用于执行根据本申请实施例的应用程序修改方法的电子设备的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。根据本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在以下的描述中,所涉及的术语“第一\第二”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
需要说明的是:在本文中提及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术(Cloud technology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,ID entity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
目前,开发人员在使用某些第三方基础swift库(例如包括美颜、图片/视频剪切、播放器等功能对应的调用接口的接口库)时,需要通过预置的框架组件(例如网络、拍照、扫一扫等组件)进行调用。
然而,在某些场景下需要通过利用第三方基础swift库的动态派发特性才能实现功能。例如,在使用第三方库的美颜功能时,需要使用预置的框架组件侧提供的算法模型文件,该算法模型文件是在程序/APP运行时下发,由于开发人员都不能直接修改第三基础swift库以及预置的框架组件,因此,需要基于已有的旧版应用程序,以及新增功能或新增操作对应的调用接口,编译新版应用程序,来实现对应用程序的功能和操作的更新。
基于此,发明人提供了本申请的应用程序修改方法,通过直接派发的目标调用接口对应的第一修改信息以及函数表派发的目标调用接口对应的第二修改信息,并根据每个所述目标调用接口的目标修改信息,生成修改插件,然后通过修改插件对目标应用程序进行修改,并不需要重新编译目标应用程序,从而省去了编译目标应用程序的时间消耗以及资源消耗,实现了基于预置的框架组件,对第三方基础swift库的动态派发,提高了目标应用程序修改效率,并降低了目标应用程序的修改成本。
图1是根据本申请实施例示出的应用场景的示意图。如图1所示,该应用场景包括终端101和服务端102,终端101和服务端102通过有线网络或者无线网络通信连接。
终端101可以是智能手机、平板电脑、笔记本电脑、台式电脑、智能家电、车载终端、飞行器、可穿戴设备终端、虚拟现实设备、智能摄像头以及其他可以进行页面展示的终端设备,或者运行其他可以调用页面展示应用的其他应用(例如即时通讯应用、购物应用、搜索应用、游戏应用、论坛应用、地图交通应用等)。
服务端102可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。服务端102可以用于为终端101运行的应用提供服务。
其中,终端101可以安装有目标应用程序,服务端102可以确定针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制,若目标调用接口的原有派发机制为直接派发,服务端102获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;若目标调用接口的原有派发机制为函数表派发,服务端102获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息,然后由服务端102根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件,其中,每个目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息;最后由服务端102将修改插件发送至终端101,由终端101根据修改插件对安装的目标应用程序进行修改,得到修改后的应用程序。
其中,目标应用程序可以是指任何,待需要修改调用接口的应用程序,可以是电脑端的exe格式的应用程序,也可以是移动终端的APP。在本申请中,目标应用程序可以是开启了动态修改功能的应用程序,也即,目标应用程序得到修改插件后,可通过修改插件进行应用程序的自动修改。
作为又一种实施方式,终端101可以安装有目标应用程序,终端101可以确定针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制,若目标调用接口的原有派发机制为直接派发,终端101获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;若目标调用接口的原有派发机制为函数表派发,终端101获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息,然后由终端101根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件;最后由终端101根据修改插件对安装的目标应用程序进行修改,得到修改后的应用程序。
在本申请实施例中,服务端102可以通过云存储技术,将得到的修改插件存储到云存储系统中,并由云存储系统将修改插件下发至终端101,再由终端101通过修改插件实现应用程序的修改。
为了方便表述,下述各个实施例中,以应用程序的修改由电子设备执行为例进行说明。
请参阅图2,图2示出了本申请一个实施例提出的一种应用程序修改方法的流程图,该方法可以应用于电子设备,电子设备可以是图1中的终端101或服务端102,该方法包括:
S110、获取针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制。
在本实施例中,调用接口可以是指函数、方法、协议、结构体等,其中,协议是一种特殊的函数,协议是调用函数和方法时候所需要遵循的规则,结构体是一种数据结构,一个结构体可以包括字符串、数字、加密信息等用于描述该结构体本身的描述信息。
目标调用接口的原有派发机制是指编译或者获得目标调用接口时,对目标调用接口配置的派发机制。在本申请中,调用接口的派发机制可以包括直接派发、函数表派发和消息机制派发,也即,任意一个目标调用接口的原有派发机制可以是直接派发、函数表派发和消息机制派发中的一个。
其中,直接派发是三种派发方式中最快的,电子设备的CPU(centra lprocessingunit,中央处理单元)直接按照调用接口的地址执行调用;函数表派发是调用接口所在的类会维护一个“函数派发表”,函数派发表包括不同调用接口的地址,调用时电子设备的CPU按照函数派发表去查询调用接口对应的地址,消息机制派发也称为动态派发,能在程序运行过程中去修改函数的调用,影响程序的执行。
目标应用程序可以是基于swift语言的应用程序,针对目标应用程序的目标调用接口也可以是基于swift语言的调用接口。可以是在第三方接口库中,确定针对目标应用程序的目标调用接口,第三方接口库中可以包括多个预置的调用接口,每个预置的调用接口用于实现某一个功能或操作。
当确定需要对某个应用程序添加某个功能或操作时,确定该应用程序为一个目标应用程序,并从第三方接口库中获取添加的功能或操作对应的预置的调用接口,该获取到的预置的调用接口作为目标调用接口。
通常,第三方接口库中的每个预置的调用接口均对应有各自的预置派发机制,可以是在构建每个预置的调用接口时,对该预置的调用接口配置预置派发机制。
在第三方接口库中确定针对目标应用程序的目标调用接口之后,直接获取与目标调用接口对应的预置派发机制,作为目标调用接口的原有派发机制。
例如,第三方接口库包括10预置的调用接口,每个预置的调用接口对应1个预置派发方式和一个功能。确定目标应用程序a1之后,确定对目标应用程序添加扫二维码功能b1,从第三方接口库获取与扫二维码功能b1对应的预置的调用接口c1作为目标调用接口,获取目标调用接口c1对应的预置派发方式——直接派发,将该目标调用接口c1的原有派发方式确定为直接派发。
可选的,还可以获取到用于对目标应用程序进行更新的源文件,源文件也可以是基于swift语言的文件,然后对源文件进行读取和分析,以从源文件中读取针对目标应用程序的目标调用接口以及目标调用接口的原有派发机制。
S120、若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息。
确定出的目标调用接口可能包括多个,针对每一个目标调用接口,若确定其对应的原有派发机制为直接派发,电子设备获取目标调用接口的程序计数器寄存器(也叫PC寄存器)指针以及偏移地址,该偏移地址为目标调用接口在堆栈寄存器中的地址,然后将程序计数器寄存器指针索引到程序计数器寄存器,在通过偏移地址在程序计数器寄存器中调用目标调用接口。
作为一种实施方式,获取针对目标调用接口的偏移地址可以包括:获取目标调用接口的实际调用地址;将实际函数地址入栈到堆栈寄存器中,得到偏移地址。
目标调用接口的实际调用地址是指目标调用接口应用于目标应用程序时,目标调用接口被调用时的地址。确定实际函数地址后,将该实际函数地址入栈(push)到堆栈寄存器中,并获取该目标调用接口在对战寄存器中的地址作为偏移地址。
由于提供目标调用接口的第三方接口库或源文件提供了接口调用的标准方式,包含了参数传递、代理、回调等机制,因此需要保证目标调用接口的调用方式不变的情况下为直接派发方式增加动态性,而直接派发是通过CPU直接按照目标调用接口的地址调用,其本质是通过汇编指令call加上函数地址实现访问,而通过PC寄存器可以使当前执行的指针产生偏移,因而可以在动态修改地址前,先将实际调用地址push到堆栈寄存器中,记录目标调用接口在堆栈寄存器中的偏移地址,等到目标应用程序运行时,通过PC寄存器指针以及偏移地址得到期望调用的地址。
在确定出程序计数器寄存器指针以及偏移地址之后,将他们作为第一修改信息。针对每个直接派发的目标调用接口,均确定对应的第一修改信息。
S130、若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息,具有父子关系的函数派发表中的子函数派发表包括指向该子函数派发表的父函数派发表的指针,具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址。
在本实施例中,具有父子关系的函数派发表中的每个函数派发表均存储至少一个调用接口的地址,具有父子关系的函数派发表中的子函数派发表(也叫子类函数派发表)包括指向该子函数派发表的父函数派发表(也叫父类函数派发表)的指针,具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址。在本申请中,具有父子关系的函数派发表又称为继承体系下的函数派发表。
例如,具有父子关系的函数派发表包括函数派发表A1、函数派发表B1以及函数派发表C1,其中,函数派发表A1是函数派发表B1的子函数派发表(或者说函数派发表B1是函数派发表A1的父函数派发表),函数派发表B1是函数派发表C1的子函数派发表(者说函数派发表C1是函数派发表B1的父函数派发表),函数派发表A1中包括至少一个调用接口对应的地址以及指向函数派发表1B的指针(在本申请中将指向父函数派发表的指针称为超级指针),函数派发表B1中包括至少一个调用接口对应的地址以及指向函数派发表C1的超级指针。
具有父子关系的函数派发表中的每个函数派发表包括该函数派发表对应的类别下的调用接口。例如,人类这一大类对应的函数派发表为男人对应的函数派发表的父函数派发表,人类函数派发表包括人类共有的一些特征(等同于本申请中的调用接口),男人对应的函数派发表包括男人共有的一些特征;同理,男人对应的函数派发表为男教师对应的函数派发表的父函数派发表,男教师对应的函数派发表包括男教师共有的一些特征。
在具有父子关系的子函数派发表中有超级指针去指向父函数派发表,其作用是子函数派发表中未实现的调用接口,会在父函数派发表中寻找并调用。例如,如图3所示,针对某个功能的调用接口为方法9,方法9不存在于子函数派发表A2中,但通过该子函数派发表中的超级指针找到父函数派发表B2,方法9依旧不存在于父函数派发表B2中,在通过B2中的超级指针找到其对应的父函数派发表C2,通过该函数派发表C2的isa指针,在父函数派发表C2中查找方法9。
可以理解的是,由于在编译期间未产生调用接口的实际调用,因此对于被调用的目标调用接口所处位置不确定,在此时我们记录目标调用接口所处类(抽象为上述的人类、男人以及男教师等)的父子关系,通过超级指针拿到父函数表的地址。
根据上述目标调用接口对应的具有父子关系的函数派发表,作为第二修改信息,在调用接口调用过程中,在第二修改信息中确定包括目标调用接口的函数派发表,作为目标调用接口派发表,并从该确定的目标调用接口派发表中获取目标调用接口的地址,将目标调用接口派发表的isa指针和目标调用接口派发表中目标调用接口的地址,作为调用该调用接口的依据。
遍历全部的函数表派发的目标调用接口,确定每个目标调用接口的第二修改信息。
S140、根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件,每个目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息。
针对每个目标调用接口,若目标调用接口为直接派发的调用接口,则获取该目标调用接口的第一修改信息,作为该目标调用接口的目标修改信息;同理,针对每个目标调用接口,若目标调用接口为函数表派发的调用接口,则获取该目标调用接口的第二修改信息,作为该目标调用接口的目标修改信息。
遍历全部的目标调用接口,得到每个目标调用接口的目标修改信息,根据目标修改信息,生成抽象语法树,再将抽象语法树以映射的方式存储在插件中,得到修改插件,其中,修改插件也可以是基于swift语言的。在本申请中,得到抽象语法树的过程也可以称为源文件的语法分析过程。
S150、根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
得到修改插件后,将修改插件发送至目标应用程序,目标应用程序收到修改插件之后,在目标应用程序重新启动时,通过修改插件对目标应用程序进行修改,得到修改后的应用程序,修改后的应用程序在运行过程中可以调用目标调用接口,以实现对应的功能或操作。在本申请中,可以通过clang编译器向目标应用程序中植入修改插件,以实现通过修改插件来修改目标应用程序。
编译器是指把一种编程语言(原始语言)转换为另一种编程语言(目标语言)的程序。编译原理是指在对工程编译的部分进行修改的过程中,通过编译器以植入插件的方式来修改调用接口的派发方式的一种技术。
作为一种实施方式,S150可以包括:根据修改插件,生成中间代码;根据中间代码,得到汇编代码;将汇编代码注入目标应用程序,得到修改后的应用程序。
目标应用程序接收到修改插件后,在目标应用程序重新启动时,对修改插件进行编译,得到中间代码,在对中间代码处理,得到swift语言的汇编代码,然后将汇编代码注入目标应用程序中,得到修改后的应用程序。
在电子设备为服务端102时,可以由服务端102将修改插件发送至终端101,由终端101根据修改插件对安装于本地的目标应用程序进行修改,得到修改后的目标应用程序,从而可以实现目标应用程序的远程在线修改,降低了修改难度,提高了修改效率。
在本实施例中,首先确定至少一个目标调用接口以及每个目标调用接口的原有派发机制,再确定直接派发的目标调用接口对应的第一修改信息以及函数表派发的目标调用接口对应的第二修改信息,并根据每个目标调用接口的目标修改信息,生成修改插件,然后通过修改插件对目标应用程序进行修改,并不需要重新编译目标应用程序,从而省去了编译目标应用程序的时间消耗以及资源消耗,提高了目标应用程序修改效率,并降低了目标应用程序的修改成本。
请参阅图4,图4示出了本申请又一个实施例提出的一种应用程序修改方法的流程图,该方法可以应用于电子设备,电子设备可以是图1中的终端101或服务端102,该方法包括:
210、获取针对目标应用程序的待修改调用接口参数。
待修改调用接口是目标应用程序中,需要进行修改的调用接口,待修改调用接口被修改后,目标应用程序获得新的功能或操作。待修改调用接口参数是指待修改调用接口的参数。待修改调用接口参数可以包括待修改调用接口的名称、返回值以及引用路径以及指针等。
作为一种实施方式,S210可以包括:获取针对目标应用程序的配置表文件;对配置表文件中的调用接口进行标记,得到标记文件;根据标记文件,确定针对目标应用程序的待修改调用接口参数。
可以从针对目标应用程序的服务器(例如发布、管理以及更新目标应用程序的服务器)获取目标应用程序的配置表文件,然后对配置表文件中的调用接口进行标记,得到标记文件,标记文件中包括各种调用接口的参数,然后从标记文件中确定针对目标应用程序的待修改调用接口参数。
可选地,可以通过预置文本对标记文件中的接口参数进行字符串替换,得到替换后的数据;将替换后的数据中的类文件的注释删除,得到针对目标应用程序的待修改调用接口参数。
其中,预置文本可以是用户基于需求设定的字符或字符串,类文件的注释可以包括非代码段数据和数据段的数据。也就是说,通过宏替换将标记文件中的接口参数进行替换,得到替换后的数据,最后将替换后的数据中类文件的注释进行删除,得到待修改调用接口参数。
S220、从包括目标调用接口的源文件中获取令牌信息。
源文件是指用于对目标应用程序进行修改的文件,其包括针对目标应用程序的调用接口以及调用接口的派发方式等信息。令牌信息可以是指token,token可以包括关键字(关键字例如可以是final、dynamic、@objc、@inline、static等)、标识符(调用接口的变量名称,包括基本数据类型和对象类型等)以及字面量(源文件中的值、数值以及字符串等)。在本申请中,根据源文件确定令牌信息的过程也叫做词法分析过程。
可以是通过clang编辑器,对源文件进行词法分析,以提取出上述令牌信息。例如,通过clang-fmodules-dump-tokens xxxx.m进行令牌信息的提取,输出的token包含了位置描述信息,位置描述信息例如类型、值以及位置(所在的行列)等。
作为一种实施方式,S220可以包括:以字符流的方式读取源文件,得到读取数据;从读取数据提取令牌信息。其中,可以是通过clang编辑器在读取数据提取令牌信息。
在本实施例中,可以将源文件存储于电子设备的本地存储器,然后确定源文件的存储目录,并通过存储目录获取源文件,在对源文件进行分析,得到令牌信息。
S230、获取与待修改调用接口参数相匹配的令牌信息,作为目标令牌信息。
得到待修改调用接口参数以及令牌信息之后,将待修改调用接口参数以及令牌信息进行匹配,并将与待修改调用接口参数相匹配的令牌信息,作为目标令牌信息。
作为一种实施方式,与待修改调用接口参数相匹配的令牌信息是指与待修改调用接口参数的名称相匹配的值所对应的令牌信息,也即S230可以包括:获取令牌信息中关键字的值;获取与待修改调用接口参数的名称相匹配的值所对应的令牌信息,作为目标令牌信息。其中,关键字的值是指关键字的value,而对应的,关键字则为value的key。
S240、从源文件中获取每个目标令牌信息对应的调用接口,作为对应每个目标令牌信息的目标调用接口。
确定出目标令牌信息之后,将目标令牌信息所属于的调用接口作为目标调用接口,该目标调用接口即为针对目标应用程序进行修改的调用接口。
S250、获取针对每个目标调用接口的原有派发机制。
确定出目标调用接口之后,可以从源文件中获取目标调用接口的原有派发机制。例如,通过特定关键字筛选一个特定区域,从该特定区域中获取目标调用接口的原有派发机制。其中,特定关键字可以是inline或final等,当包括inline或final等关键字时,确定原有派发机制为直接派发。
另外,还可以在源文件中确定目标调用接口包括的对象的定义者,例如,定义者为struct和extionson时,目标调用接口的原有派发机制为直接派发。定义者为protocol和NSObject时,目标调用接口的原有派发机制为函数表派发。
S260、若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息。
S270、根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件;根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
其中,S260-S270的描述参照上文S120-S150的描述,此处不再赘述。
在本实施例中,电子设备可以直接从源文件中获取至少一个目标调用接口以及对应每个目标调用接口的原有派发机制,并不需要手动对源文件进行分析,来获得目标调用接口以及对应每个目标调用接口的原有派发机制,提高了目标调用接口以及对应每个目标调用接口的原有派发机制的获取效率,从而提高了目标应用程序的修改效率。
请参阅图5,图5示出了本申请再一个实施例提出的一种应用程序修改方法的流程图,该方法可以应用于电子设备,电子设备可以是图1中的终端101或服务端102,该方法包括:
S310、获取针对目标应用程序的待修改调用接口参数;从包括目标调用接口的源文件中获取令牌信息;获取与待修改调用接口参数相匹配的令牌信息,作为目标令牌信息。
其中,S310的描述参照上文S210-S230的描述,此处不再赘述。
S320、在源文件中确定每个目标令牌信息的作用区域,作为对应每个目标令牌信息的目标区域;获取每个目标区域中的调用接口,作为每个目标区域对应的目标调用接口。
在本申请中,一个目标令牌信息是指一个调用接口对应的全部令牌信息的集合,针对每个目标令牌信息,在源文件中,确定目标令牌信息的作用区域,作为目标区域,目标令牌信息的目标区域内的调用接口即为目标令牌信息对应的目标调用接口。
S330、从源文件中确定每个目标调用接口对应的目标区域;若目标调用接口对应的目标区域中的数据满足第一预设条件,确定目标调用接口的原有派发机制为直接派发;若目标调用接口对应的目标区域中的数据满足第二预设条件,确定目标调用接口的原有派发机制为函数表派发。
其中,目标区域的确定方式参照S320的描述。第一预设条件可以包目标区域内存在关键字inline和/或final。第一预设条件也可以包括:目标调用接口的目标区域内包括struct和/或extionson定义的对象;第二预设条件也可以包括:目标调用接口的目标区域内包括protocol和/或NSObject定义的对象。
也就是说,确定目标调用接口对应的目标区域之后,若目标调用接口的目标区域内包括关键字inline和/或final,确定目标调用接口为直接派发;若目标调用接口的目标区域内包括struct和/或extionson定义的对象,确定目标调用接口为直接派发;若目标调用接口的目标区域内包括protocol和/或NSObject定义的对象,确定目标调用接口为函数表派发。
S340、若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息。
S350、根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件;根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
其中,S340-S350的描述参照上文S120-S150的描述,此处不再赘述。
在本实施例中,直接通过目标区域、第一预设条件以及第二预设条件,获取目标调用接口以及目标调用接口的原有派发机制,并不需要手动分析源文件来确定目标调用接口以及目标调用接口的原有派发机制,目标调用接口以及目标调用接口的原有派发机制的确定效率较高,从而提高了目标应用程序的修改效率。
请参阅图6,图6示出了本申请再一个实施例提出的一种应用程序修改方法的流程图,该方法可以应用于电子设备,电子设备可以是图1中的终端101或服务端102,该方法包括:
S410、获取针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制。
S420、若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息。
S430、根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件;根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
其中,S410-S430的描述参照上文S110-S150的描述,此处不再赘述。
S440、若检测到修改后的应用程序启动,获取待调用接口;若修改插件包括对应待调用接口的程序计数器寄存器指针以及偏移地址,获取对应待调用接口的程序计数器寄存器指针以及偏移地址;根据待调用接口的偏移地址,通过待调用接口的程序计数器寄存器从堆栈寄存器中获取待调用接口的地址;通过待调用接口的地址,对待调用接口进行调用。
得到修改后的应用程序之后,修改的后应用程序加入了目标调用接口,从而使得修改后的目标应用程序可以实现目标调用接口对应的功能或操作。
修改后的应用程序启动之后,修改后的应用程序在运行、实现某个工功能或者操作时,所需要的调用接口,作为待调用接口。
若修改插件中包括待调用接口的程序计数器寄存器指针以及偏移地址,表明待调用接口是上述直接派发的目标调用接口的某一个,则获取待调用接口的程序计数器寄存器指针以及偏移地址,并过待调用接口的程序计数器寄存器从堆栈寄存器中获取待调用接口的地址;通过堆栈寄存器,根据待调用接口的地址,对待调用接口进行调用。
可以是通过汇编指令在当前调用的堆栈寄存器执行出栈(pop)操作,再通过call指令调用待调用接口的地址,实现待调用接口的调用。
S450、若修改插件包括的函数派发表发生改变,获取对应待调用接口的具有父子关系的函数派发表;通过对应待调用接口的具有父子关系的函数派发表,对待调用接口进行调用。
函数派发表发生改变包括isa指针和超级指针有修改;表明待调用接口是上述函数表派发的目标调用接口中的某一个,则对应待调用接口的具有父子关系的函数派发表,并在对应待调用接口的具有父子关系的函数派发表中确定待调用接口的地址,以通过待调用接口的地址实现待调用接口的调用。
其中,可以是通过子函数派发表中的超级指针以及超级指针指向的父函数派发表的isa指针,确定待调用接口的地址,从而实现对待调用接口的调用。
在本实施例中,在修改后的应用程序运行时,通过修改插件可以快速的确定待调用接口对应的地址,并对待调用接口进行调用,以使得修改后的应用程序可以实现新增功能或操作,并不需要对目标应用程序进行重新编译来实现修改目标应用程序,提高了修改效率。
为了更清楚的解释本申请的技术方案,结合一示例性场景对本申请的应用程序修改方法进行解释,在该场景中,目标应用程序为D应用程序,D应用程序安装于终端设备。
如图7所示,服务端可以从D应用程序的服务器获取配置表文件,然后对配置表文件进行预处理:对配置表文件中的调用接口进行标记,得到标记文件,通过预置文本对所述标记文件中的接口参数进行字符串替换,得到替换后的数据;将所述替换后的数据中的类文件的注释删除,得到针对所述目标应用程序的待修改调用接口参数。
之后,还可服务端可以从本地或者从第三方服务器获取源文件,对源文件进行预处理:以字符流的方式读取所述源文件,得到读取数据;从所述读取数据提取所述令牌信息;获取所述令牌信息中关键字的值;获取与所述待修改调用接口参数的名称相匹配的值所对应的令牌信息,作为所述目标令牌信息;在所述源文件中确定每个所述目标令牌信息的作用区域,作为对应每个所述目标令牌信息的目标区域;获取每个所述目标区域中的调用接口,作为每个所述目标区域对应的目标调用接口,在该场景中,确定目标调用接口为E1和E2;若所述目标调用接口对应的目标区域中的数据满足第一预设条件,确定所述目标调用接口的原有派发机制为直接派发;若所述目标调用接口对应的目标区域中的数据满足第二预设条件,确定所述目标调用接口的原有派发机制为函数表派发。
至此,实现对源文件的词法分析,得到目标调用接口E1和目标调用接口E2的派发机制,其中,目标调用接口E1满足第一预设条件,确定目标调用接口E1的原有派发机制为直接派发,目标调用接口E2满足第二预设条件,确定目标调用接口E2的派发方式为函数表派发。
针对目标调用接口E1,使用堆栈寄存器,修改PC寄存器,并获取偏移地址:获取所述目标调用接口E1的实际调用地址;将所述实际函数地址入栈到堆栈寄存器中,得到所述偏移地址,并将PC寄存器指针以及偏移地址作为目标调用接口E1的目标修改信息。
针对目标调用接口E2,根据isa指针和超级指针,得到第二修改信息:获取针对所述目标调用接口E2的具有父子关系的函数派发表,作为目标修改信息,其中,目标修改信息中包括目标函数派发表,目标函数派发表包括目标调用接口的地址,通过目标函数派发表的isa指针以及指向目标函数派发表的超级指针,对目标调用接口进行调用。
得到目标调用接口E1的目标修改信息以及目标调用接口E2的目标修改信息之后,根据目标调用接口E1的目标修改信息以及目标调用接口E2的目标修改信息生成抽象语法树,从而实现对源文件的语法分析。之后,再将抽象语法树以映射的方式存储在插件,得到修改插件,然后将修改插件发送至终端。
终端接收到修改插件,在终端的目标应用程序启动时,根据修改插件生成中间代码bitcode,并进一步得到汇编代码,通过汇编代码实现对目标应用程序的修改。
在该场景中,通过编译阶段生成抽象语法树插件(AST插件)的方式来修改调用接口的派发机制,能在不影响、不修改外部调用的前填下实现调用接口的动态派发,增加了业务功能实现的动态性,在不影响目标应用程序的发版的前提下增加新功能,有助于在线修复bug。
请参阅图8,图8示出了本申请一个实施例提出的一种应用程序修改装置的框图,装置1100包括:
第一获取模块1110,用于获取针对目标应用程序的至少一个目标调用接口以及对应每个目标调用接口的原有派发机制;
第二获取模块1120,用于若目标调用接口的原有派发机制为直接派发,获取针对目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;
第三获取模块1130,用于若目标调用接口的原有派发机制为函数表派发,获取针对目标调用接口的具有父子关系的函数派发表,作为第二修改信息,具有父子关系的函数派发表中的子函数派发表包括指向该子函数派发表的父函数派发表的指针,具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址;
生成模块1140,用于根据每个目标调用接口的目标修改信息,生成针对至少一个目标调用接口的修改插件,每个目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息;
修改模块1150,用于根据修改插件对目标应用程序进行修改,得到修改后的应用程序。
可选地,第一获取模块1110,还用于获取针对目标应用程序的待修改调用接口参数;从包括目标调用接口的源文件中获取令牌信息;获取与待修改调用接口参数相匹配的令牌信息,作为目标令牌信息;从源文件中获取每个目标令牌信息对应的调用接口,作为对应每个目标令牌信息的目标调用接口;获取针对每个目标调用接口的原有派发机制。
可选地,第一获取模块1110,还用于获取针对目标应用程序的配置表文件;对配置表文件中的调用接口进行标记,得到标记文件;根据标记文件,确定针对目标应用程序的待修改调用接口参数。
可选地,第一获取模块1110,还用于通过预置文本对标记文件中的接口参数进行字符串替换,得到替换后的数据;将替换后的数据中的类文件的注释删除,得到针对目标应用程序的待修改调用接口参数。
可选地,第一获取模块1110,还用于以字符流的方式读取源文件,得到读取数据;从读取数据提取令牌信息。
可选地,第一获取模块1110,还用于获取令牌信息中关键字的值;获取与待修改调用接口参数的名称相匹配的值所对应的令牌信息,作为目标令牌信息。
可选地,第一获取模块1110,还用于在源文件中确定每个目标令牌信息的作用区域,作为对应每个目标令牌信息的目标区域;获取每个目标区域中的调用接口,作为每个目标区域对应的目标调用接口。
可选地,第一获取模块1110,还用于从源文件中确定每个目标调用接口对应的目标区域;若目标调用接口对应的目标区域中的数据满足第一预设条件,确定目标调用接口的原有派发机制为直接派发;若目标调用接口对应的目标区域中的数据满足第二预设条件,确定目标调用接口的原有派发机制为函数表派发。
可选地,第二获取模块1120,还用于获取目标调用接口的实际调用地址;将实际函数地址入栈到堆栈寄存器中,得到偏移地址。
可选地,修改模块1150,还用于根据修改插件,生成中间代码;根据中间代码,得到汇编代码;将汇编代码注入目标应用程序,得到修改后的应用程序。
可选地,装置还包括调用模块,用于若检测到修改后的应用程序启动,获取待调用接口;若修改插件包括对应待调用接口的程序计数器寄存器指针以及偏移地址,获取对应待调用接口的程序计数器寄存器指针以及偏移地址;根据待调用接口的偏移地址,通过待调用接口的程序计数器寄存器从堆栈寄存器中获取待调用接口的地址;通过待调用接口的地址,对待调用接口进行调用。
可选地,调用模块,还用于若修改插件包括的函数派发表发生改变,获取对应待调用接口的具有父子关系的函数派发表;通过对应待调用接口的具有父子关系的函数派发表,对待调用接口进行调用。
需要说明的是,本申请中装置实施例与前述方法实施例是相互对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
图9示出了用于执行根据本申请实施例的应用程序修改方法的电子设备的结构框图。该电子设备可以是图1中的终端101或服务端102等,需要说明的是,图9示出的电子设备的计算机系统1200仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图9所示,计算机系统1200包括中央处理单元(Central Processing Unit,CPU)1201,其可以根据存储在只读存储器(Read-Only Memory,ROM)1202中的程序或者从存储部分1208加载到随机访问存储器(Random Access Memory,RAM)1203中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在RAM 1203中,还存储有系统操作所需的各种程序和数据。CPU1201、ROM1202以及RAM 1203通过总线1204彼此相连。输入/输出(Input/Output,I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以使于从其上读出的计算机程序根据需要被安装入存储部分1208。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质承载计算机可读指令,当该计算机可读存储指令被处理器执行时,实现上述任一实施例中的方法。
根据本申请实施例的一个方面,提供了计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述任一实施例中的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台电子设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (15)
1.一种应用程序修改方法,其特征在于,所述方法包括:
获取针对所述目标应用程序的至少一个目标调用接口以及对应每个所述目标调用接口的原有派发机制;
若所述目标调用接口的原有派发机制为直接派发,获取针对所述目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;
若所述目标调用接口的原有派发机制为函数表派发,获取针对所述目标调用接口的具有父子关系的函数派发表,作为第二修改信息,所述具有父子关系的函数派发表中的子函数派发表包括指向该子函数派发表的父函数派发表的指针,所述具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址;
根据每个所述目标调用接口的目标修改信息,生成针对所述至少一个目标调用接口的修改插件,每个所述目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息;
根据所述修改插件对所述目标应用程序进行修改,得到修改后的应用程序。
2.根据权利要求1所述的方法,其特征在于,所述获取针对所述目标应用程序的至少一个目标调用接口以及对应每个所述目标调用接口的原有派发机制,包括:
获取针对所述目标应用程序的待修改调用接口参数;
从包括所述目标调用接口的源文件中获取令牌信息;
获取与所述待修改调用接口参数相匹配的令牌信息,作为目标令牌信息;
从所述源文件中获取每个所述目标令牌信息对应的调用接口,作为对应每个所述目标令牌信息的目标调用接口;
获取针对每个所述目标调用接口的原有派发机制。
3.根据权利要求2所述的方法,其特征在于,所述获取针对所述目标应用程序的待修改调用接口参数,包括:
获取针对所述目标应用程序的配置表文件;
对所述配置表文件中的调用接口进行标记,得到标记文件;
根据所述标记文件,确定针对所述目标应用程序的待修改调用接口参数。
4.根据权利要求3所述的方法,其特征在于,所述根据所述标记文件,确定针对所述目标应用程序的待修改调用接口参数,包括:
通过预置文本对所述标记文件中的接口参数进行字符串替换,得到替换后的数据;
将所述替换后的数据中的类文件的注释删除,得到针对所述目标应用程序的待修改调用接口参数。
5.根据权利要求2所述的方法,其特征在于,所述从包括所述目标调用接口的源文件中获取令牌信息,包括:
以字符流的方式读取所述源文件,得到读取数据;
从所述读取数据提取所述令牌信息。
6.根据权利要求2所述的方法,其特征在于,所述获取与所述待修改调用接口参数相匹配的令牌信息,作为目标令牌信息,包括:
获取所述令牌信息中关键字的值;
获取与所述待修改调用接口参数的名称相匹配的值所对应的令牌信息,作为所述目标令牌信息。
7.根据权利要求2所述的方法,其特征在于,所述从所述源文件中获取每个所述目标令牌信息对应的调用接口,作为对应每个所述目标令牌信息的目标调用接口,包括:
在所述源文件中确定每个所述目标令牌信息的作用区域,作为对应每个所述目标令牌信息的目标区域;
获取每个所述目标区域中的调用接口,作为每个所述目标区域对应的目标调用接口。
8.根据权利要求2所述的方法,其特征在于,所述获取针对每个所述目标调用接口的原有派发机制,包括:
从所述源文件中确定每个所述目标调用接口对应的目标区域;
若所述目标调用接口对应的目标区域中的数据满足第一预设条件,确定所述目标调用接口的原有派发机制为直接派发;
若所述目标调用接口对应的目标区域中的数据满足第二预设条件,确定所述目标调用接口的原有派发机制为函数表派发。
9.根据权利要求1所述的方法,其特征在于,所述获取针对所述目标调用接口的偏移地址,包括:
获取所述目标调用接口的实际调用地址;
将所述实际函数地址入栈到堆栈寄存器中,得到所述偏移地址。
10.根据权利要求1所述的方法,其特征在于,所述根据所述修改插件对所述目标应用程序进行修改,得到修改后的应用程序,包括:
根据所述修改插件,生成中间代码;
根据所述中间代码,得到汇编代码;
将所述汇编代码注入所述目标应用程序,得到修改后的应用程序。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若检测到所述修改后的应用程序启动,获取待调用接口;
若所述修改插件包括对应所述待调用接口的程序计数器寄存器指针以及偏移地址,获取对应所述待调用接口的程序计数器寄存器指针以及偏移地址;
根据所述待调用接口的偏移地址,通过所述待调用接口的程序计数器寄存器从堆栈寄存器中获取所述待调用接口的地址;
通过所述待调用接口的地址,对所述待调用接口进行调用。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
若所述修改插件包括的函数派发表发生改变,获取对应所述待调用接口的具有父子关系的函数派发表;
通过对应所述待调用接口的具有父子关系的函数派发表,对所述待调用接口进行调用。
13.一种应用程序修改装置,其特征在于,所述装置包括:
第一获取模块,用于获取针对所述目标应用程序的至少一个目标调用接口以及对应每个所述目标调用接口的原有派发机制;
第二获取模块,用于若所述目标调用接口的原有派发机制为直接派发,获取针对所述目标调用接口的程序计数器寄存器指针以及偏移地址,作为第一修改信息;
第三获取模块,用于若所述目标调用接口的原有派发机制为函数表派发,获取针对所述目标调用接口的具有父子关系的函数派发表,作为第二修改信息,所述具有父子关系的函数派发表中的子函数派发表包括指向该子函数派发表的父函数派发表的指针,所述具有父子关系的函数派发表中每个函数派发表包括至少一个调用接口对应的地址;
生成模块,用于根据每个所述目标调用接口的目标修改信息,生成针对所述至少一个目标调用接口的修改插件,每个所述目标调用接口的目标修改信息为该目标调用接口对应的第一修改信息或第二修改信息;
修改模块,用于根据所述修改插件对所述目标应用程序进行修改,得到修改后的应用程序。
14.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如权利要求1-12中任一项所述的方法。
15.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211386360.0A CN117992101A (zh) | 2022-11-07 | 2022-11-07 | 应用程序修改方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211386360.0A CN117992101A (zh) | 2022-11-07 | 2022-11-07 | 应用程序修改方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117992101A true CN117992101A (zh) | 2024-05-07 |
Family
ID=90895143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211386360.0A Pending CN117992101A (zh) | 2022-11-07 | 2022-11-07 | 应用程序修改方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117992101A (zh) |
-
2022
- 2022-11-07 CN CN202211386360.0A patent/CN117992101A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111708539B (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
US9495186B1 (en) | Automatic discovery of a javascript API | |
US8997070B2 (en) | Extension mechanism for scripting language compiler | |
CN110244942B (zh) | 一种页面生成方法、装置及系统 | |
JP2017107555A (ja) | ソフトウェア・コンテナ中のソフトウェアの識別を決定するための方法、システム、およびプログラム | |
CN110688096B (zh) | 包含插件的应用程序的构建方法、装置、介质及电子设备 | |
CN111414350A (zh) | 一种服务生成方法及装置 | |
CN115982491A (zh) | 页面更新方法及装置、电子设备和计算机可读存储介质 | |
CN112817657A (zh) | 一种应用程序启动项加载方法、装置、系统及存储介质 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
US11604662B2 (en) | System and method for accelerating modernization of user interfaces in a computing environment | |
CN113419740A (zh) | 程序数据流的分析方法、装置、电子设备及可读存储介质 | |
US12001458B2 (en) | Multi-cloud object store access | |
CN113778564B (zh) | 一种高效执行evm智能合约的方法、设备及储存介质 | |
CN113138767B (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN115840775A (zh) | 数据的提取方法、装置、服务器及存储介质 | |
CN117992101A (zh) | 应用程序修改方法、装置、电子设备及存储介质 | |
CN114816361A (zh) | 拼搭工程生成方法、装置、设备、介质和程序产品 | |
CN115757287A (zh) | 目标文件的构建方法、装置及存储介质 | |
CN114625372A (zh) | 组件自动编译方法、装置、计算机设备及存储介质 | |
CN114253595A (zh) | 代码仓库管理方法、装置、计算机设备及存储介质 | |
CN111880775A (zh) | 多模块分层架构实现方法、装置、电子设备、存储介质 | |
CN115373656A (zh) | 页面生成方法、装置、计算机可读介质及电子设备 | |
CN117234899A (zh) | 回归测试方法、装置、设备及计算机介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |