CN116643802A - 动态库访问方法、装置、设备及存储介质 - Google Patents
动态库访问方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116643802A CN116643802A CN202210137131.9A CN202210137131A CN116643802A CN 116643802 A CN116643802 A CN 116643802A CN 202210137131 A CN202210137131 A CN 202210137131A CN 116643802 A CN116643802 A CN 116643802A
- Authority
- CN
- China
- Prior art keywords
- dynamic library
- linker
- target
- function
- data
- 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
- 238000000034 method Methods 0.000 title claims abstract description 62
- 230000006870 function Effects 0.000 claims abstract description 237
- 230000000694 effects Effects 0.000 abstract description 20
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 244000035744 Hura crepitans Species 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种动态库访问方法、装置、设备及存储介质,属于计算机技术领域,所述方法包括:在访问目标动态库时,加载与所述目标动态库对应的链接器;通过所述链接器得到待选函数;从所述待选函数中选取空间函数;调用所述空间函数从所述目标动态库中获取数据,从而通过引入链接器的方式,选取空间函数来获取数据,能够达到更好的动态库访问效果,可以准确从动态库获取数据。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种动态库访问方法、装置、设备及存储介质。
背景技术
在加载动态库时,需要解决动态库之间依赖及符号重定位问题,但是,现有的动态库访问方法无法达到较好的访问效果,从动态库中获取数据时,可能出现获取异常或者数据不准等情况。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提出一种动态库访问方法、装置、设备及存储介质,旨在解决如何达到较好的动态库访问效果,以准确从动态库获取数据的技术问题。
为实现上述目的,本发明提供一种动态库访问方法,所述动态库访问方法包括:
在访问目标动态库时,加载与所述目标动态库对应的链接器;
通过所述链接器得到待选函数;
从所述待选函数中选取空间函数;
调用所述空间函数从所述目标动态库中获取数据。
可选地,所述通过所述链接器得到待选函数,包括:
通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
可选地,所述通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数,包括:
通过所述链接器对所述目标动态库中的数据进行函数式初始化,在所述目标动态库对应的空间内创建多个子空间;
根据多个子空间得到多个待选函数。
可选地,所述根据多个子空间得到多个待选函数,包括:
根据多个子空间设置白名单;
将记录在所述白名单中的子空间作为目标子空间;
根据所述目标子空间得到多个待选函数。
可选地,所述调用所述空间函数从所述目标动态库中获取数据,包括:
将所述空间函数导出至当前空间;
通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
可选地,所述通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取数据,包括:
获取目标数据的数据信息;
根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
可选地,所述根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据,包括:
根据所述空间函数和所述数据信息进行路径重定位,以确定所述目标数据对应的目标路径信息;
根据所述目标路径信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
可选地,所述在访问目标动态库时,加载与所述目标动态库对应的链接器之前,还包括:
为目标动态库设置对应的链接器;
将所述链接器的初始化入口配置为可重入函数类型的调用入口。
可选地,所述将所述链接器的初始化入口配置为可重入函数类型的调用入口,包括:
获取与可重入函数相关的配置信息;
根据所述配置信息对所述链接器的初始化入口进行配置,以将所述链接器的初始化入口配置为可重入函数类型的调用入口。
可选地,所述在访问目标动态库时,加载与所述目标动态库对应的链接器,包括:
在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器;
通过所述解释器加载所述目标动态库对应的链接器。
可选地,所述在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器,包括:
在通过解释器访问目标动态库时,获取所述目标动态库对应的动态库信息;
根据所述动态库信息确定链接器信息;
根据所述链接器信息确定所述目标动态库对应的链接器。
此外,为实现上述目的,本发明还提出一种动态库访问装置,所述动态库访问装置包括:
链接器加载模块,用于在访问目标动态库时,加载与所述目标动态库对应的链接器;
待选函数模块,用于通过所述链接器得到待选函数;
函数选取模块,用于从所述待选函数中选取空间函数;
数据获取模块,用于调用所述空间函数从所述目标动态库中获取数据。
可选地,所述待选函数模块,还用于通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
可选地,所述待选函数模块,还用于通过所述链接器对所述目标动态库中的数据进行函数式初始化,在所述目标动态库对应的空间内创建多个子空间;根据多个子空间得到多个待选函数。
可选地,所述待选函数模块,还用于根据多个子空间设置白名单;将记录在所述白名单中的子空间作为目标子空间;根据所述目标子空间得到多个待选函数。
可选地,所述数据获取模块,还用于将所述空间函数导出至当前空间;通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
可选地,所述数据获取模块,还用于获取目标数据的数据信息;根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
可选地,所述数据获取模块,还用于根据所述空间函数和所述数据信息进行路径重定位,以确定所述目标数据对应的目标路径信息;根据所述目标路径信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
此外,为实现上述目的,本发明还提出一种动态库访问设备,所述动态库访问设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的动态库访问程序,所述动态库访问程序被处理器执行时实现如上所述的动态库访问方法。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有动态库访问程序,所述动态库访问程序被处理器执行时实现如上所述的动态库访问方法。
本发明提出的动态库访问方法中,在访问目标动态库时,加载与所述目标动态库对应的链接器;通过所述链接器得到待选函数;从所述待选函数中选取空间函数;调用所述空间函数从所述目标动态库中获取数据,从而通过引入链接器的方式,选取空间函数来获取数据,能够达到更好的动态库访问效果,可以准确从动态库获取数据。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的动态库访问设备结构示意图;
图2为本发明动态库访问方法第一实施例的流程示意图;
图3为本发明动态库访问方法一实施例的空间交互示意图;
图4为本发明动态库访问方法第二实施例的流程示意图;
图5为本发明动态库访问方法第三实施例的流程示意图;
图6为本发明动态库访问装置第一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的动态库访问设备结构示意图。
如图1所示,该动态库访问设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如按键,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如Wi-Fi接口)。存储器1005可以是高速随机存取存储器(Random Access Memory,RAM),也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的设备结构并不构成对动态库访问设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及动态库访问程序。
在图1所示的动态库访问设备中,网络接口1004主要用于连接外网,与其他网络设备进行数据通信;用户接口1003主要用于连接用户设备,与所述用户设备进行数据通信;本发明设备通过处理器1001调用存储器1005中存储的动态库访问程序,并执行本发明实施例提供的动态库访问方法。
基于上述硬件结构,提出本发明动态库访问方法实施例。
参照图2,图2为本发明动态库访问方法第一实施例的流程示意图。
在第一实施例中,所述动态库访问方法包括:
步骤S10,在访问目标动态库时,加载与所述目标动态库对应的链接器。
需要说明的是,本实施例的执行主体可为动态库访问设备,该动态库访问设备可为具有数据处理功能的计算机设备,还可为虚拟机等其他可实现相同或相似功能的设备,本实施例对此不作限制,在本实施例中,以计算机设备为例进行说明。
需要说明的是,本实施例中的动态库可以包括但不限于动态链接库,也可包括其他类型的动态库,本实施例对此不作限制,在本实施例中,以动态链接库为例进行说明。其中,动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。
应当理解的是,可为目标动态库设置对应的链接器(linker),后续在解释器需要加载目标动态库时,可以通过该目标动态库对应的链接器来访问动态库,以从动态库中获取解释器所需的数据。
需要说明的是,解释器(Interpreter)是一种电脑程序,通过解释器能够把高级编程语言一行一行直接转译运行。链接器的作用主要有两个,分别为符号解析和重定位,其中,符号解析指的是将每个符号的定义和每个符号的引用关联起来;重定位指的是把每个符号定义与存储器中的一个具体位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器的位置,从而实现重定位的效果。
可以理解的是,为了解决链接器的重入问题,本方案可将链接器的初始化入口配置为可重入函数类型的调用入口,由于可重入函数主要用于多任务环境中,是可以被中断的函数,可以重复进入,在使用该函数的任何时刻中断它,转入执行另外一段代码,而返回控制时不会出现错误。因此,通过上述配置之后,可以使链接器的初始化入口也可以实现可重入的效果,从而可以反复进入链接器,达到更好的链接器使用效果。
在具体实现中,如果不对链接器进行上述配置,在使用链接器时,如果被中断的话,就可能会出现问题,导致无法将链接器运行在多任务环境下,而本方案的应用场景可能需要将链接器运行在多任务环境下,因此,为了使链接器的应用场景更加多元化,符合各应用场景的使用需求,可将链接器的初始化入口配置为可重入函数类型的调用入口,以将链接器的初始化入口实现为一个可以重入的函数似调用入口,实现可以反复进入链接器的效果。
进一步地,为了更加有效的对链接器进行配置,以更好的实现可重入效果,所述将所述链接器的初始化入口配置为可重入函数类型的调用入口,包括:
获取与可重入函数相关的配置信息;根据所述配置信息对所述链接器的初始化入口进行配置,以将所述链接器的初始化入口配置为可重入函数类型的调用入口。
应当理解的是,由于在对函数进行特殊配置之后,才能实现可重入的效果,因此,为了对链接器的初始化入口进行配置,可以获取与可重入函数相关的配置信息。其中,上述配置信息可以为与可重入函数相关的配置信息,可以包括但不限于函数配置、符号配置等多种类型的配置信息,还可包括其他更多类型的配置信息,本实施例对此不作限制。
可以理解的是,可以根据上述配置信息对链接器的初始化入口进行配置,从而将链接器的初始化入口配置为可重入函数类型的调用入口。由于在对链接器的初始化入口配置完成之后,可以保留该配置,在后续的使用过程中均通过该配置后的调用入口来加载链接器,因此,只需要对链接器的初始化入口进行一次配置即可,以达到节约计算机的运算资源,并提高链接器加载效率的效果。
在具体实现中,可以在为目标动态库设置对应的链接器的时候,就对链接器的初始化入口进行配置,后续在加载链接器时,都使用配置后的调用入口。也可以在为目标动态设置对应的链接器的时候,先不对链接器的初始化入口进行配置,而是在第一次加载链接器时,对链接器的初始化入口进行配置,后续再次加载链接器时,都使用配置后的调用入口。
应当理解的是,由于在本方案的应用场景中,是在解释器需要获取目标动态库中的数据时,加载目标动态库,因此,在通过解释器访问目标动态库时,可以先确定目标动态库对应的链接器,然后再通过解释器加载目标动态对应的链接器,以通过该链接器从目标动态库获取解释器所需的数据。
进一步地,由于在计算机设备中可能同时存在多个链接器,这些链接器的作用各不相同,因此,为了准确地加载与目标动态库对应的链接器,避免链接器加载错误,并且提高处理效率,所述在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器,包括:
在通过解释器访问目标动态库时,获取所述目标动态库对应的动态库信息;根据所述动态库信息确定链接器信息;根据所述链接器信息确定所述目标动态库对应的链接器。
需要说明的是,可以通过链接器信息来区分不同的链接器,其中,链接器信息可以包括但不限于链接器标识、链接器名称等信息,本实施例对此不作限制。
应当理解的是,在通过解释器访问目标动态库时,可以获取目标动态库对应的动态库信息,从中选取与链接器相关的链接器信息,然后根据链接器信息从现有的链接器中选取与目标动态库对应的链接器。
在具体实现中,假设链接器信息为链接器标识,可以在设置链接器时,为链接器分配对应的链接器标识。在获取动态库信息之后,可以根据动态库信息来确定与目标动态库关联的链接器的链接器标识,进而将链接器标识与现有链接器的链接器标识进行匹配,从而确定与目标动态库对应的链接器。
步骤S20,通过所述链接器得到待选函数。
应当理解的是,在加载目标动态库对应的链接器之后,可以通过链接器对目标动态库中的数据进行函数式初始化,从而在目标动态库对应的空间内创建多个子空间,进而根据多个子空间得到多个待选函数。其中,上述空间可为包括但不限于内存地址空间,上述函数可为各种类型的函数,本实施例对此不作限制。
需要说明的是,为了保障安全性,还可在上述过程中使用白名单,通过白名单来区分不同类型的数据。例如,在得到多个子空间后,可以根据多个子空间设置白名单,并将记录在白名单中的子空间作为目标子空间,进而根据目标子空间得到多个待选函数,进行后续的数据获取操作。
步骤S30,从所述待选函数中选取空间函数。
应当理解的是,在通过上述方式得到多个待选函数之后,可以进一步从待选函数中选取与linker空间有关的函数,将这些函数作为空间函数,其中,空间函数可以包括但不限于创建空缺省间、匿名空间等,本实施例对此不作限制,用于在解释器初始化时调用。
步骤S40,调用所述空间函数从所述目标动态库中获取数据。
应当理解的是,在确定空间函数后,还可将空间函数导出至当前空间,在解释器初始化时,通过解释器调用当前空间内的空间函数,以从目标动态库中获取数据。
可以理解的是,为了更加有针对性的获取数据,可以先获取目标数据的数据信息,根据数据信息通过解释器调用当前空间内的空间函数,以从目标动态库中获取目标数据。
可以理解的是,为了避免数据获取偏差,导致数据不准确的情况,还可以先根据空间函数和数据信息进行路径重定位,以确定目标数据对应的目标路径信息,根据目标路径信息通过解释器调用当前空间内的空间函数,以从目标动态库中获取目标数据。
在具体实现中,可参照图3,图3为空间交互示意图。在本实施例中,以图3示出的场景为例进行说明,当前空间为x86空间,目标动态库对应的空间为arm空间,在该场景中,当x86虚拟机需要使用目标动态库中的链接、符号等数据时,可以通过x86虚拟机对应的解释器加载与arm空间关联的linker,进行函数式初始化、导出空间函数调用以及位置重定位之后,再进行数据获取的操作,从而可以解决目标动态库依赖及符号重定位问题,实现函数及变量符号重定位逻辑,将linker空间有关的函数实现为导出,在解释器初始化时调用,并重定位目标库的搜寻路径。
可以理解的是,在本方案中,将arm空间linker的入口实现为函数似入口,x86虚拟机可以反复进入arm空间linker;将arm空间linker创建沙箱空间函数导出并在x86空间调用,解决安全及库符号重定位范畴问题;将arm空间linker库路径重定位,以方便寻找库来获取数据。
可以理解的是,在解释器加载自定义linker后,虚拟机加载的任意一arm空间动态库,都能自动解决依赖并重定位符号问题,避免了需要自己找未定位符号然后逐个解决符号依赖问题,并在arm空间创建Android系统native沙箱空间,安全性得到保障。
在本实施例中,在访问目标动态库时,加载与所述目标动态库对应的链接器;通过所述链接器得到待选函数;从所述待选函数中选取空间函数;调用所述空间函数从所述目标动态库中获取数据,从而通过引入链接器的方式,选取空间函数来获取数据,能够达到更好的动态库访问效果,可以准确从动态库获取数据。
在一实施例中,如图4所示,基于第一实施例提出本发明动态库访问方法第二实施例,所述步骤S20,包括:
步骤S201,通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
应当理解的是,在解释器初始化之前,可以先通过链接器对目标动态库中的数据进行函数式初始化,从而在初始化之后得到多个待选函数。
可以理解的是,可通过链接器对目标动态库中的数据进行函数式初始化的方式,在目标动态库对应的空间内创建多个子空间,然后根据多个子空间设置白名单,将记录在把名单中的子空间作为目标子空间,进而根据目标子空间得到多个待选函数。
在具体实现中,可为各子空间分配对应的空间标识,然后根据空间标识来设置白名单,在白名单设置完成之后,对白名单中记录的空间标识进行遍历,将遍历到的空间标识对应的子空间作为目标子空间。
在本实施例中,通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数,从而可以避免数据干扰,选取出相关联的待选函数。
在一实施例中,如图5所示,基于第一实施例或第二实施例提出本发明动态库访问方法第三实施例,在本实施例中,基于第一实施例进行说明,所述步骤S40,包括:
步骤S401,将所述空间函数导出至当前空间。
应当理解的是,在从待选函数中选取出与linker空间有关的空间函数之后,可以将这些空间函数导出至当前空间,便于后续的函数调取操作。
步骤S402,通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
应当理解的是,在解释器初始化时,可以通过解释器调用当前空间内的这些空间函数,从而通过调用空间函数的方式从目标动态库中获取链接、符号等类型的数据。
可以理解的是,由于数据分为很多类型,因此,为了准确地进行数据获取,可以先获取解释器需要的目标数据的数据信息,根据数据信息可以确定目标数据的数据类型等信息。然后根据数据信息通过解释器调用当前空间内的空间函数,以从目标动态库中获取目标数据。
可以理解的是,除了上述实施方式之外,还可根据空间函数和数据信息进行路径重定位,通过路径重定位的方式确定目标数据对应的目标路径信息,进而在确定目标路径信息之后,可以根据目标路径信息通过解释器调用当前空间内的空间函数,以从目标动态库中获取目标数据。
在本实施例中,将所述空间函数导出至当前空间,通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据,从而可以通过上述方式解决目标动态库依赖及符号重定位问题。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有动态库访问程序,所述动态库访问程序被处理器执行时实现如上文所述的动态库访问方法的步骤。
由于本存储介质采用了上述所有实施例的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果,在此不再一一赘述。
此外,参照图6,本发明实施例还提出一种动态库访问装置,所述动态库访问装置包括:
链接器加载模块10,用于在访问目标动态库时,加载与所述目标动态库对应的链接器。
需要说明的是,本实施例中的动态库可以包括但不限于动态链接库,也可包括其他类型的动态库,本实施例对此不作限制,在本实施例中,以动态链接库为例进行说明。其中,动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。
应当理解的是,可为目标动态库设置对应的链接器(linker),后续在解释器需要加载目标动态库时,可以通过该目标动态库对应的链接器来访问动态库,以从动态库中获取解释器所需的数据。
需要说明的是,解释器(Interpreter)是一种电脑程序,通过解释器能够把高级编程语言一行一行直接转译运行。链接器的作用主要有两个,分别为符号解析和重定位,其中,符号解析指的是将每个符号的定义和每个符号的引用关联起来;重定位指的是把每个符号定义与存储器中的一个具体位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器的位置,从而实现重定位的效果。
可以理解的是,为了解决链接器的重入问题,本方案可将链接器的初始化入口配置为可重入函数类型的调用入口,由于可重入函数主要用于多任务环境中,是可以被中断的函数,可以重复进入,在使用该函数的任何时刻中断它,转入执行另外一段代码,而返回控制时不会出现错误。因此,通过上述配置之后,可以使链接器的初始化入口也可以实现可重入的效果,从而可以反复进入链接器,达到更好的链接器使用效果。
在具体实现中,如果不对链接器进行上述配置,在使用链接器时,如果被中断的话,就可能会出现问题,导致无法将链接器运行在多任务环境下,而本方案的应用场景可能需要将链接器运行在多任务环境下,因此,为了使链接器的应用场景更加多元化,符合各应用场景的使用需求,可将链接器的初始化入口配置为可重入函数类型的调用入口,以将链接器的初始化入口实现为一个可以重入的函数似调用入口,实现可以反复进入链接器的效果。
进一步地,为了更加有效的对链接器进行配置,以更好的实现可重入效果,所述将所述链接器的初始化入口配置为可重入函数类型的调用入口,包括:
获取与可重入函数相关的配置信息;根据所述配置信息对所述链接器的初始化入口进行配置,以将所述链接器的初始化入口配置为可重入函数类型的调用入口。
应当理解的是,由于在对函数进行特殊配置之后,才能实现可重入的效果,因此,为了对链接器的初始化入口进行配置,可以获取与可重入函数相关的配置信息。其中,上述配置信息可以为与可重入函数相关的配置信息,可以包括但不限于函数配置、符号配置等多种类型的配置信息,还可包括其他更多类型的配置信息,本实施例对此不作限制。
可以理解的是,可以根据上述配置信息对链接器的初始化入口进行配置,从而将链接器的初始化入口配置为可重入函数类型的调用入口。由于在对链接器的初始化入口配置完成之后,可以保留该配置,在后续的使用过程中均通过该配置后的调用入口来加载链接器,因此,只需要对链接器的初始化入口进行一次配置即可,以达到节约计算机的运算资源,并提高链接器加载效率的效果。
在具体实现中,可以在为目标动态库设置对应的链接器的时候,就对链接器的初始化入口进行配置,后续在加载链接器时,都使用配置后的调用入口。也可以在为目标动态设置对应的链接器的时候,先不对链接器的初始化入口进行配置,而是在第一次加载链接器时,对链接器的初始化入口进行配置,后续再次加载链接器时,都使用配置后的调用入口。
应当理解的是,由于在本方案的应用场景中,是在解释器需要获取目标动态库中的数据时,加载目标动态库,因此,在通过解释器访问目标动态库时,可以先确定目标动态库对应的链接器,然后再通过解释器加载目标动态对应的链接器,以通过该链接器从目标动态库获取解释器所需的数据。
进一步地,由于在计算机设备中可能同时存在多个链接器,这些链接器的作用各不相同,因此,为了准确地加载与目标动态库对应的链接器,避免链接器加载错误,并且提高处理效率,所述在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器,包括:
在通过解释器访问目标动态库时,获取所述目标动态库对应的动态库信息;根据所述动态库信息确定链接器信息;根据所述链接器信息确定所述目标动态库对应的链接器。
需要说明的是,可以通过链接器信息来区分不同的链接器,其中,链接器信息可以包括但不限于链接器标识、链接器名称等信息,本实施例对此不作限制。
应当理解的是,在通过解释器访问目标动态库时,可以获取目标动态库对应的动态库信息,从中选取与链接器相关的链接器信息,然后根据链接器信息从现有的链接器中选取与目标动态库对应的链接器。
在具体实现中,假设链接器信息为链接器标识,可以在设置链接器时,为链接器分配对应的链接器标识。在获取动态库信息之后,可以根据动态库信息来确定与目标动态库关联的链接器的链接器标识,进而将链接器标识与现有链接器的链接器标识进行匹配,从而确定与目标动态库对应的链接器。
待选函数模块20,用于通过所述链接器得到待选函数。
应当理解的是,在加载目标动态库对应的链接器之后,可以通过链接器对目标动态库中的数据进行函数式初始化,从而在目标动态库对应的空间内创建多个子空间,进而根据多个子空间得到多个待选函数。其中,上述空间可为包括但不限于内存地址空间,上述函数可为各种类型的函数,本实施例对此不作限制。
需要说明的是,为了保障安全性,还可在上述过程中使用白名单,通过白名单来区分不同类型的数据。例如,在得到多个子空间后,可以根据多个子空间设置白名单,并将记录在白名单中的子空间作为目标子空间,进而根据目标子空间得到多个待选函数,进行后续的数据获取操作。
函数选取模块30,用于从所述待选函数中选取空间函数。
应当理解的是,在通过上述方式得到多个待选函数之后,可以进一步从待选函数中选取与linker空间有关的函数,将这些函数作为空间函数,其中,空间函数可以包括但不限于创建空缺省间、匿名空间等,本实施例对此不作限制,用于在解释器初始化时调用。
数据获取模块40,用于调用所述空间函数从所述目标动态库中获取数据。
应当理解的是,在确定空间函数后,还可将空间函数导出至当前空间,在解释器初始化时,通过解释器调用当前空间内的空间函数,以从目标动态库中获取数据。
可以理解的是,为了更加有针对性的获取数据,可以先获取目标数据的数据信息,根据数据信息通过解释器调用当前空间内的空间函数,以从目标动态库中获取目标数据。
可以理解的是,为了避免数据获取偏差,导致数据不准确的情况,还可以先根据空间函数和数据信息进行路径重定位,以确定目标数据对应的目标路径信息,根据目标路径信息通过解释器调用当前空间内的空间函数,以从目标动态库中获取目标数据。
在具体实现中,可参照图3,图3为空间交互示意图。在本实施例中,以图3示出的场景为例进行说明,当前空间为x86空间,目标动态库对应的空间为arm空间,在该场景中,当x86虚拟机需要使用目标动态库中的链接、符号等数据时,可以通过x86虚拟机对应的解释器加载与arm空间关联的linker,进行函数式初始化、导出空间函数调用以及位置重定位之后,再进行数据获取的操作,从而可以解决目标动态库依赖及符号重定位问题,实现函数及变量符号重定位逻辑,将linker空间有关的函数实现为导出,在解释器初始化时调用,并重定位目标库的搜寻路径。
可以理解的是,在本方案中,将arm空间linker的入口实现为函数似入口,x86虚拟机可以反复进入arm空间linker;将arm空间linker创建沙箱空间函数导出并在x86空间调用,解决安全及库符号重定位范畴问题;将arm空间linker库路径重定位,以方便寻找库来获取数据。
可以理解的是,在解释器加载自定义linker后,虚拟机加载的任意一arm空间动态库,都能自动解决依赖并重定位符号问题,避免了需要自己找未定位符号然后逐个解决符号依赖问题,并在arm空间创建Android系统native沙箱空间,安全性得到保障。
在本实施例中,在访问目标动态库时,加载与所述目标动态库对应的链接器;通过所述链接器得到待选函数;从所述待选函数中选取空间函数;调用所述空间函数从所述目标动态库中获取数据,从而通过引入链接器的方式,选取空间函数来获取数据,能够达到更好的动态库访问效果,可以准确从动态库获取数据。
在一实施例中,所述待选函数模块20,还用于通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
在一实施例中,所述待选函数模块20,还用于通过所述链接器对所述目标动态库中的数据进行函数式初始化,在所述目标动态库对应的空间内创建多个子空间;根据多个子空间得到多个待选函数。
在一实施例中,所述待选函数模块20,还用于根据多个子空间设置白名单;将记录在所述白名单中的子空间作为目标子空间;根据所述目标子空间得到多个待选函数。
在一实施例中,所述数据获取模块40,还用于将所述空间函数导出至当前空间;通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
在一实施例中,所述数据获取模块40,还用于获取目标数据的数据信息;根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
在一实施例中,所述数据获取模块40,还用于根据所述空间函数和所述数据信息进行路径重定位,以确定所述目标数据对应的目标路径信息;根据所述目标路径信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
在一实施例中,所述动态库访问装置,还包括链接器配置模块,用于为目标动态库设置对应的链接器;将所述链接器的初始化入口配置为可重入函数类型的调用入口。
在一实施例中,所述链接器配置模块,还用于获取与可重入函数相关的配置信息;根据所述配置信息对所述链接器的初始化入口进行配置,以将所述链接器的初始化入口配置为可重入函数类型的调用入口。
在一实施例中,所述链接器加载模块10,还用于在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器;通过所述解释器加载所述目标动态库对应的链接器。
在一实施例中,所述链接器加载模块10,还用于在通过解释器访问目标动态库时,获取所述目标动态库对应的动态库信息;根据所述动态库信息确定链接器信息;根据所述链接器信息确定所述目标动态库对应的链接器。
在本发明所述动态库访问装置的其他实施例或具体实现方法可参照上述各方法实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该估算机软件产品存储在如上所述的一个估算机可读存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台智能设备(可以是手机,估算机,动态库访问设备,或者网络动态库访问设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
本发明提供了A1、一种动态库访问方法,所述动态库访问方法包括:
在访问目标动态库时,加载与所述目标动态库对应的链接器;
通过所述链接器得到待选函数;
从所述待选函数中选取空间函数;
调用所述空间函数从所述目标动态库中获取数据。
A2、如A1所述的动态库访问方法,所述通过所述链接器得到待选函数,包括:
通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
A3、如A2所述的动态库访问方法,所述通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数,包括:
通过所述链接器对所述目标动态库中的数据进行函数式初始化,在所述目标动态库对应的空间内创建多个子空间;
根据多个子空间得到多个待选函数。
A4、如A3所述的动态库访问方法,所述根据多个子空间得到多个待选函数,包括:
根据多个子空间设置白名单;
将记录在所述白名单中的子空间作为目标子空间;
根据所述目标子空间得到多个待选函数。
A5、如A1所述的动态库访问方法,所述调用所述空间函数从所述目标动态库中获取数据,包括:
将所述空间函数导出至当前空间;
通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
A6、如A5所述的动态库访问方法,所述通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取数据,包括:
获取目标数据的数据信息;
根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
A7、如A6所述的动态库访问方法,所述根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据,包括:
根据所述空间函数和所述数据信息进行路径重定位,以确定所述目标数据对应的目标路径信息;
根据所述目标路径信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
A8、如A1至A7中任一项所述的动态库访问方法,所述在访问目标动态库时,加载与所述目标动态库对应的链接器之前,还包括:
为目标动态库设置对应的链接器;
将所述链接器的初始化入口配置为可重入函数类型的调用入口。
A9、如A8所述的动态库访问方法,所述将所述链接器的初始化入口配置为可重入函数类型的调用入口,包括:
获取与可重入函数相关的配置信息;
根据所述配置信息对所述链接器的初始化入口进行配置,以将所述链接器的初始化入口配置为可重入函数类型的调用入口。
A10、如A1至A7中任一项所述的动态库访问方法,所述在访问目标动态库时,加载与所述目标动态库对应的链接器,包括:
在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器;
通过所述解释器加载所述目标动态库对应的链接器。
A11、如A10所述的动态库访问方法,所述在通过解释器访问目标动态库时,确定所述目标动态库对应的链接器,包括:
在通过解释器访问目标动态库时,获取所述目标动态库对应的动态库信息;
根据所述动态库信息确定链接器信息;
根据所述链接器信息确定所述目标动态库对应的链接器。
本发明还提供了B12、一种动态库访问装置,所述动态库访问装置包括:
链接器加载模块,用于在访问目标动态库时,加载与所述目标动态库对应的链接器;
待选函数模块,用于通过所述链接器得到待选函数;
函数选取模块,用于从所述待选函数中选取空间函数;
数据获取模块,用于调用所述空间函数从所述目标动态库中获取数据。
B13、如B12所述的动态库访问装置,所述待选函数模块,还用于通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
B14、如B13所述的动态库访问装置,所述待选函数模块,还用于通过所述链接器对所述目标动态库中的数据进行函数式初始化,在所述目标动态库对应的空间内创建多个子空间;根据多个子空间得到多个待选函数。
B15、如B14所述的动态库访问装置,所述待选函数模块,还用于根据多个子空间设置白名单;将记录在所述白名单中的子空间作为目标子空间;根据所述目标子空间得到多个待选函数。
B16、如B12所述的动态库访问装置,所述数据获取模块,还用于将所述空间函数导出至当前空间;通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
B17、如B16所述的动态库访问装置,所述数据获取模块,还用于获取目标数据的数据信息;根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
B18、如B17所述的动态库访问装置,所述数据获取模块,还用于根据所述空间函数和所述数据信息进行路径重定位,以确定所述目标数据对应的目标路径信息;根据所述目标路径信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
本发明还提供了C19、一种动态库访问设备,所述动态库访问设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的动态库访问程序,所述动态库访问程序被处理器执行时实现如上所述的动态库访问方法。
本发明还提供了D20、一种存储介质,所述存储介质上存储有动态库访问程序,所述动态库访问程序被处理器执行时实现如上所述的动态库访问方法。
Claims (10)
1.一种动态库访问方法,其特征在于,所述动态库访问方法包括:
在访问目标动态库时,加载与所述目标动态库对应的链接器;
通过所述链接器得到待选函数;
从所述待选函数中选取空间函数;
调用所述空间函数从所述目标动态库中获取数据。
2.如权利要求1所述的动态库访问方法,其特征在于,所述通过所述链接器得到待选函数,包括:
通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数。
3.如权利要求2所述的动态库访问方法,其特征在于,所述通过所述链接器对所述目标动态库中的数据进行函数式初始化,得到多个待选函数,包括:
通过所述链接器对所述目标动态库中的数据进行函数式初始化,在所述目标动态库对应的空间内创建多个子空间;
根据多个子空间得到多个待选函数。
4.如权利要求3所述的动态库访问方法,其特征在于,所述根据多个子空间得到多个待选函数,包括:
根据多个子空间设置白名单;
将记录在所述白名单中的子空间作为目标子空间;
根据所述目标子空间得到多个待选函数。
5.如权利要求1所述的动态库访问方法,其特征在于,所述调用所述空间函数从所述目标动态库中获取数据,包括:
将所述空间函数导出至当前空间;
通过解释器调用所述当前空间内的所述空间函数,以从所述目标动态库中获取数据。
6.如权利要求5所述的动态库访问方法,其特征在于,所述通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取数据,包括:
获取目标数据的数据信息;
根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
7.如权利要求6所述的动态库访问方法,其特征在于,所述根据所述数据信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据,包括:
根据所述空间函数和所述数据信息进行路径重定位,以确定所述目标数据对应的目标路径信息;
根据所述目标路径信息通过解释器调用所述当前空间内的空间函数,以从所述目标动态库中获取所述目标数据。
8.一种动态库访问装置,其特征在于,所述动态库访问装置包括:
链接器加载模块,用于在访问目标动态库时,加载与所述目标动态库对应的链接器;
待选函数模块,用于通过所述链接器得到待选函数;
函数选取模块,用于从所述待选函数中选取空间函数;
数据获取模块,用于调用所述空间函数从所述目标动态库中获取数据。
9.一种动态库访问设备,其特征在于,所述动态库访问设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的动态库访问程序,所述动态库访问程序被处理器执行时实现如权利要求1至7中任一项所述的动态库访问方法。
10.一种存储介质,其特征在于,所述存储介质上存储有动态库访问程序,所述动态库访问程序被处理器执行时实现如权利要求1至7中任一项所述的动态库访问方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210137131.9A CN116643802A (zh) | 2022-02-15 | 2022-02-15 | 动态库访问方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210137131.9A CN116643802A (zh) | 2022-02-15 | 2022-02-15 | 动态库访问方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116643802A true CN116643802A (zh) | 2023-08-25 |
Family
ID=87642243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210137131.9A Pending CN116643802A (zh) | 2022-02-15 | 2022-02-15 | 动态库访问方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116643802A (zh) |
-
2022
- 2022-02-15 CN CN202210137131.9A patent/CN116643802A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102332209B1 (ko) | 2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법 | |
CN108121594B (zh) | 一种进程管理方法及装置 | |
US8464230B2 (en) | Methods and systems to implement non-ABI conforming features across unseen interfaces | |
US9632804B2 (en) | Method, apparatus, and communication system for implementing internet application | |
EP3207453B1 (en) | Api versioning independent of product releases | |
CN114327405A (zh) | 数据处理方法、装置、设备及存储介质 | |
US8806460B2 (en) | Method and apparatus for avoiding register interference | |
CN107589940B (zh) | 一种基于Lua脚本语言的软件开发辅助系统 | |
CN111176628B (zh) | 组件化架构下的前端接入方法、存储介质 | |
CN116643802A (zh) | 动态库访问方法、装置、设备及存储介质 | |
CN112527416A (zh) | 任务处理方法、装置、计算机设备和存储介质 | |
CN112148826A (zh) | 在业务中集成地图服务的方法、装置、设备和存储介质 | |
CN112069052B (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN111966704A (zh) | Orm框架实现方法、系统、计算机设备和存储介质 | |
CN113094664B (zh) | 一种防止安卓应用程序被反编译的系统 | |
US11340914B2 (en) | Run-time identification of dependencies during dynamic linking | |
KR20100110710A (ko) | 동적 라이브러리를 갖는 인터페이스를 간단히 하는 방법, 시스템 및 컴퓨터 프로그램 제품 | |
CN114020278A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN111400281B (zh) | 一种面向oss对象存储的gis数据质检与入库方法 | |
US20110321009A1 (en) | Implementing encryption via aspect oriented programming | |
CN112148388A (zh) | 一种计算机程序的挂钩方法和系统 | |
US11907223B2 (en) | System and method for executing compiled user defined functions in vectorized databases | |
US11327774B2 (en) | Personalization of resource strings in a computing device | |
CN116820593A (zh) | 程序运行方法、装置、设备及存储介质 | |
CN113918235A (zh) | 应用加载的方法及装置、计算机程序产品和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |