CN112631684B - 可执行程序的运行方法、装置、电子设备及计算机存储介质 - Google Patents
可执行程序的运行方法、装置、电子设备及计算机存储介质 Download PDFInfo
- Publication number
- CN112631684B CN112631684B CN202011615386.9A CN202011615386A CN112631684B CN 112631684 B CN112631684 B CN 112631684B CN 202011615386 A CN202011615386 A CN 202011615386A CN 112631684 B CN112631684 B CN 112631684B
- Authority
- CN
- China
- Prior art keywords
- function
- target
- environment
- loading
- library
- 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.)
- Active
Links
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种可执行程序的运行方法、装置、电子设备及计算机存储介质,涉及移动互联网领域。该方法包括:获取基于第一环境下编译的待处理的可执行程序;若可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库;根据动态加载库,加载目标动态链接库,并确定目标函数的地址;根据目标函数的地址,调用目标函数,以使得可执行程序运行。本申请实施例通过预先构建好的动态加载库来加载可执行程序不能直接加载的动态链接库以及调用的函数,提高了移动操作系统的移植配效率,缩减了开发成本,加快了可执行程序的运行效率。
Description
技术领域
本申请涉及移动互联网技术领域,具体而言,本申请涉及一种可执行程序的运行方法、装置、电子设备及计算机存储介质。
背景技术
Glibc指GNU发布的C语言库,是Linux系统中最底层的API库。Bionic指Android系统中的C语言库,是Android系统中最底层的API库。
虽然两者都是C语言库,遵循同样的C语言库标准,但是由于是不同厂商的实现,针对不同的应用目的,基于不同的编译环境、运行环境,两者之间是无法通用的,所以基于glibc环境的程序或动态C语言库是无法在Android系统上直接运行的。
目前因为Android系统在移动操作系统中的广泛应用,大部分的硬件厂商只会提供基于Android的驱动程序,即基于bionic环境的驱动程序。如果需要在bionic环境下调用glibc中的函数,会存在兼容性问题。
发明内容
本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的可执行程序的运行方法、装置、电子设备及计算机存储介质。
第一方面,提供了一种可执行程序的运行方法,该方法包括:
获取基于第一环境下编译的待处理的可执行程序;
若可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库;
根据动态加载库,加载目标动态链接库,并确定目标函数的地址;
根据目标函数的地址,调用目标函数,以使得可执行程序运行。
在一个可能的实现方式中,根据动态加载库,加载目标动态链接库,并确定目标函数的地址,包括:
调用动态加载库中预设的加载函数,加载目标动态链接库,并获取可执行程序待调用的基于第一环境下的函数,作为第一目标函数;
根据第一目标函数,在动态加载库中预设的哈希表中查找记录第一目标函数的目标函数对应关系;
根据目标函数对应关系,确定可执行程序待调用的基于第二环境下的第二目标函数;
根据第二目标函数,确定第二目标函数的地址。
在另一个可能的实现方式中,调用动态加载库中预设的加载函数,加载目标动态链接库,之前还包括:
获取目标动态加载库的文件名以及加载方式;
根据文件名以及加载方式,构建动态加载库中的加载函数。
在又一个可能的实现方式中,根据第一目标函数,在动态加载库中预设的哈希表中查找记录第一目标函数的目标函数映射关系,之前还包括:
获取操作系统中的基于第一环境下的第一目标函数,以及目标动态链接库中基于第二环境下的第二目标函数;
根据第一目标函数以及第二目标函数,将功能相同的第一目标函数以及第二目标函数一一对应,得到函数对应关系;
根据函数对应关系,构建动态加载库中的哈希表;哈希表存放函数对应关系。
在又一个可能的实现方式中,第一环境以及第二环境,包括:
第一环境为bionic环境;第二环境为glibc环境。
第二方面,提供了一种可执行程序的运行的装置,该装置包括:
获取装置,用于获取基于第一环境下编译的待处理的可执行程序;
加载装置,用于若可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库;
确定装置,用于根据动态加载库,加载目标动态链接库,并确定目标函数的地址;
运行装置,用于根据目标函数的地址,调用目标函数,以使得可执行程序运行。
在一个可能的实现方式中,确定装置包括:
目标确定模块,用于调用动态加载库中预设的加载函数,加载目标动态链接库,并获取可执行程序待调用的基于第一环境下的函数,作为第一目标函数;
根据第一目标函数,在动态加载库中预设的哈希表中查找记录第一目标函数的目标函数对应关系;
根据目标函数对应关系,确定可执行程序待调用的基于第二环境下的第二目标函数;
根据第二目标函数,确定第二目标函数的地址。
在又一个可能的实现方式中,目标确定模块包括:
函数确定单元,用于获取目标动态加载库的文件名以及加载方式;
根据文件名以及加载方式,构建动态加载库中的加载函数。
在又一个可能的实现方式中,目标确定模块还包括:
哈希表确定单元,用于获取操作系统中的基于第一环境下的第一目标函数,以及目标动态链接库中基于第二环境下的第二目标函数;
根据第一目标函数以及第二目标函数,将功能相同的第一目标函数以及第二目标函数一一对应,得到函数对应关系;
根据函数对应关系,构建动态加载库中的哈希表;哈希表存放函数对应关系。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本申请实施例提供的可执行程序的运行方法、装置、电子设备及存储介质,通过预先构建好的动态加载库来加载可执行程序不能直接加载的动态链接库,实现了在基于bionic环境下加载基于glibc环境下的动态链接库,使得基于bionic环境下的可执行程序调用到了基于glibc环境下的函数,解决了在bionic环境下兼容基于glibc的动态链接库的问题,方便非android系统中开发的程序能更快速的移植到android系统中使用,提高了移动操作系统的移植配效率,缩减了开发成本,加快了可执行程序运行效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种可执行程序运行的系统机构示意图;
图2为本申请实施例中提供的一种可执行程序的运行的方法流程示意图;
图3为本申请实施例提供的一种确定目标函数的流程示意图;
图4为本申请实施例提供的动态加载库中函数的示意图
图5为本申请实施例提供的一种可执行程序的运行装置的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本申请提供的可执行程序的运行方法、装置、电子设备及计算机存储介质,旨在解决现有技术的如上技术问题。
在对本申请所示的各个实施例进行说明之前,首先对本申请涉及到的几个概念进行介绍:
动态链接库包含了程序运行时所必须的代码以及其他资源等,动态链接库是程序运行时需要加载的库,当动态链接库正确安装后,可以使用动态链接库来运行程序。
动态加载库是指在程序运行过程中可以加载的函数库,动态加载库与动态链接库所不同的是,在程序启动时就要寻找动态连接库,找到库函数,而动态加载库可以用程序的方法来控制什么时候加载。
链接器是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。
符号表是种数据结构,在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。符号表第一要存储那些符号,第二要能快速检索符号,为了快速检索,符号表一般是基于哈希表实现的。
哈希表是种数据结构,它可以提供快速的插入操作和查找操作,是一个专门针对存储的数据进行加索引的处理的表格,加索引等处理是为了方便检索,加快效率。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1为本申请实施例提供的一种可执行程序运行的系统机构示意图。该系统包括基于bionic环境下的可执行程序110,动态加载库120以及基于glibc环境下的动态链接库130。
基于bionic环境下的可执行程序110需要加载动态链接库130来支持运行,若动态链接库130是基于glibc环境下的,不能直接加载,本申请实施例采用加载动态加载库120来加载基于glibc环境下的动态链接库130的方法,是的可执行程序110可以加载到基于glibc环境下的动态链接库130。
Bionic以及glibc这两者虽然都是C语言库,遵循同样的C语言库标准,但是由于不同厂商的实现,针对不同的应用目的,基于不同的编译环境、运行环境,两者之间是无法通用的,所以基于glibc环境的程序或动态C语言库是无法在Android系统上直接运行起来的。而现有的大部分硬件厂商只提供基于Android的驱动程序,即基于bionic环境的驱动程序,存在bionic环境下调用glibc中函数的兼容性问题。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请实施例中提供的一种可执行程序的运行的方法流程示意图,如图2所示,该方法包括:
S101、获取基于第一环境下编译的待处理的可执行程序。
可执行程序是可在操作系统存储空间中浮动定位的二进制可执行程序,它可以加载到内存中,由操作系统加载并执行。
待处理的可执行程序可以是由用户的操作产生的,也可以是操作系统运行时自动生成的,基于第一环境下编译即是基于bionic环境下编译的,在Android操作系统中产生的可执行程序即是基于bionic环境编译而成的。
S102、若可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库。
在Android系统中,可执行程序在运行时,首先需要使用接口,然后使用Android链接器linker加载所需加载的动态链接库,然后在动态链接库中确定可执行程序运行所需的函数,执行函数完成可执行程序的运行。其中,可执行程序与动态链接库基于不同环境的情况下是无法直接加载的。
若基于bionic环境下编译的可执行程序在运行时需要调用基于glibc环境下的接口,并且需要加载的是基于glibc环境下的动态链接库以及调用其中的函数,则使用Android链接器linker调用android_dlopen()函数加载预先构建好的动态加载库,通过动态加载库执行后续的步骤。
S103、根据动态加载库,加载目标动态链接库,并确定目标函数的地址。
在Android链接器linker加载了预先构建的动态加载库后,可以利用动态加载库加载可执行程序需要加载的基于glibc环境下的目标动态链接库,并且在加载后的动态链接库中确定可执行程序执行时需调用的目标函数的地址。
S104、根据目标函数的地址,调用目标函数,以使得可执行程序运行。
在确定了可执行程序运行所需的基于glibc环境下的动态链接库中的目标函数的地址后,可以根据目标函数的地址在目标动态链接库中调用该目标函数,以使得可执行程序运行。
本申请实施例提供的可执行程序的运行方法、装置、电子设备及存储介质,通过预先构建好的动态加载库来加载可执行程序不能直接加载的动态链接库,实现了在基于bionic环境下加载基于glibc环境下的动态链接库,使得基于bionic环境下的可执行程序调用到了基于glibc环境下的函数,解决了在bionic环境下兼容基于glibc的动态链接库的问题,方便非android系统中开发的程序能更快速的移植到android系统中进行使用,提高了移动操作系统的移植配效率,缩减了开发成本,加快了可执行程序运行效率。
本申请实施例还提供了一种可能的实现方式,图3为本申请实施例提供的一种确定目标函数的流程示意图,如图3所示,根据动态加载库,加载目标动态链接库,并确定目标函数的地址,包括:
S201、调用动态加载库中预设的加载函数,加载目标动态链接库,并获取可执行程序待调用的基于第一环境下的函数,作为第一目标函数;
预先构建的动态加载库中包括预设的加载函数,该加载目标函数可以根据动态链接库文件名以及加载方式,加载目标动态链接库。
从Android操作系统中获取到基于bionic环境下的可执行程序可直接调用的基于bionic环境下的函数,作为第一目标函数。
S202、根据第一目标函数,在动态加载库中预设的哈希表中查找记录第一目标函数的目标函数对应关系。
预先构建的加载函数中还包括预设的哈希表,哈希表中可以存放基于bionic环境下的函数与基于glibc环境下的函数的对应关系。
在哈希表中查找记录了可执行程序可直接调用的基于bionic环境下的第一目标函数的函数对应关系,作为目标对应关系。
S203、根据目标函数对应关系,确定可执行程序待调用的基于第二环境下的第二目标函数。
根据目标对应关系中记录的与可执行程序需调用的基于bionic环境下的函数对应的基于glibc环境下的函数,作为第二目标函数。
S204、根据第二目标函数,确定第二目标函数的地址。
确定了函数之后,在内存中就可以确定函数的指针,指针对应的地址就是函数的地址。
本申请实施例通过预先构建的动态加载库中的预设的加载函数以及哈希表,加载目标动态链接库以及确定目标函数的地址,让可执行程序加载不同环境的动态链接库以及调用不同环境下的函数,加快了可执行程序的运行效率,也让非Android系统的动态链接库能够移植至Android系统中,加快了移植效率。
本申请实施例还提供了一种可能的实现方式,调用动态加载库中预设的加载函数,加载目标动态链接库,之前还包括:
获取目标动态加载库的文件名以及加载方式;
根据文件名以及加载方式,构建动态加载库中的加载函数。
动态链接库在构建时会有一个定义的文件名,而动态链接库的加载方式包括RTLD_LAZY、RTLD_NOW、RTLD_GLOBA等,一般使用的是RTLD_LAZY,具体含义为对于动态库中存在的未定义的变量(如外部变量extern,也可以是函数)不执行解析的方式进行打开加载。
可以根据固态链接库的文件名以及加载方式,构建加载函数,例如可能的函数原型为void*dlopen(const char*libname,int flag),其中filename为动态链接库的文件名,flag为打开方式。
本申请实施例通过根据动态加载库的文件名以及加载方式,构建出加载函数,用于加载不同环境下的动态链接库,使得基于glibc环境中的应用程序,软件等可在Android系统中的bionic环境下应用。
本申请实施例还提供了一种可能的实现方式,根据第一目标函数,在动态加载库中预设的哈希表中查找记录第一目标函数的目标函数映射关系,之前还包括:
获取操作系统中的基于第一环境下的第一目标函数,以及目标动态链接库中基于第二环境下的第二目标函数;
根据第一目标函数以及第二目标函数,将功能相同的第一目标函数以及第二目标函数一一对应,得到函数对应关系;
构建哈希表,哈希表存放函数对应关系。
从Android系统的本地的符号表中获取到基于bionic环境下的函数、变量或结构体等等,从目标动态链接库中获取到目标动态链接库中基于glibc环境下的函数、变量或结构体等等,本申请实施例以获取函数为例进行说明。
使用wrapper封装函数将获取到的基于bionic环境下的函数以及基于glibc环境下的函数定义为映射,将功能相同的不同环境的函数一一对应,以hooks数组或者其他方式实现它们的函数对应关系。
在动态加载库中构建哈希表,在哈希表中存放这些函数对应关系。
本申请实施例通过构建哈希表存放基于bionic环境下的函数与基于glibc环境下的函数间的函数对应关系,便于可执行程序调用不同环境的函数,加快了可执行程序的运行效率。
本申请实施例还提供了一种可能的实现方式,图4为本申请实施例提供的动态加载库中函数的示意图,如图所示,动态加载库中的函数包括但不限于dlopen()、dlerror()、dlsym()以及dlclose()。
dlopen()可能的函数原型为void*dlopen(const char*libname,int flag),功能为将动态链接库加载到内存中。
dlerror()可能的函数原型为char*dlerror(void),功能为检测并返回错误。
dlsym()可能的函数原型为void*dlsym(void*handle,const char*symbol),功能为获得指定函数在内存中的位置。
dlclose()可能的函数原型为int dlclose(void*handle),功能为将已经加载的动态链接库的句柄减一,如果句柄减至零,则该库会被卸载。
本申请实施例提供了一种可执行程序的运行装置,如图5所示,该装置可以包括:获取装置11、加载装置12、确定装置13以及运行装置14,具体地:
获取装置11,用于获取基于第一环境下编译的待处理的可执行程序;
加载装置12,用于若可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库;
确定装置13,用于根据动态加载库,加载目标动态链接库,并确定目标函数的地址;
运行装置14,用于根据目标函数的地址,调用目标函数,以使得可执行程序运行。
在一个可能的实现方式中,确定装置11包括:
目标确定模块,用于调用动态加载库中预设的加载函数,加载目标动态链接库,并获取可执行程序待调用的基于第一环境下的函数,作为第一目标函数;
根据第一目标函数,在动态加载库中预设的哈希表中查找记录第一目标函数的目标函数对应关系;
根据目标函数对应关系,确定可执行程序待调用的基于第二环境下的第二目标函数;
根据第二目标函数,确定第二目标函数的地址。
在又一个可能的实现方式中,目标确定模块包括:
函数确定单元,用于获取目标动态加载库的文件名以及加载方式;
根据文件名以及加载方式,构建动态加载库中的加载函数。
在又一个可能的实现方式中,目标确定模块还包括:
哈希表确定单元,用于获取操作系统中的基于第一环境下的第一目标函数,以及目标动态链接库中基于第二环境下的第二目标函数;
根据第一目标函数以及第二目标函数,将功能相同的第一目标函数以及第二目标函数一一对应,得到函数对应关系;
根据函数对应关系,构建动态加载库中的哈希表;哈希表存放函数对应关系。
本发明实施例提供的可执行程序的运行装置,具体执行上述方法实施例流程,具体请详见上述可执行程序的运行方法实施例的内容,在此不再赘述。本发明实施例提供的可执行程序的运行装置,通过预先构建好的动态加载库来加载可执行程序不能直接加载的动态链接库,实现了在基于bionic环境下加载基于glibc环境下的动态链接库,使得基于bionic环境下的可执行程序调用到了基于glibc环境下的函数,解决了在bionic环境下兼容基于glibc的动态链接库的问题,方便非android系统中开发的程序能更快速的移植到android系统中进行使用,提高了移动操作系统的移植配效率,缩减了开发成本,加快了可执行程序运行效率。
本申请实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:通过预先构建好的动态加载库来加载可执行程序不能直接加载的动态链接库,实现了在基于bionic环境下加载基于glibc环境下的动态链接库,使得基于bionic环境下的可执行程序调用到了基于glibc环境下的函数,解决了在bionic环境下兼容基于glibc的动态链接库的问题,方便非android系统中开发的程序能更快速的移植到android系统中进行使用,提高了移动操作系统的移植配效率,缩减了开发成本,加快了可执行程序运行效率。
在一个可选实施例中提供了一种电子设备,如图6所示,图6所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,通过预先构建好的动态加载库来加载可执行程序不能直接调用的动态链接库,实现了在就bionic环境下调用基于glibc环境下的动态链接库,使得可执行程序调用到了所需要调用的动态链接库中的函数,解决了在bionic环境下兼容基于glibc的动态链接库的问题,方便非android系统中开发的程序能更快速的移植到android系统中,并进行使用,提高了移动操作系统的移植配效率,缩减了开发成本,加快了可执行程序运行效率。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种可执行程序的运行方法,其特征在于,包括:
获取基于第一环境下编译的待处理的可执行程序;
若所述可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是所述目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库;
根据所述动态加载库,加载所述目标动态链接库,并确定所述目标函数的地址;
根据所述目标函数的地址,调用所述目标函数,以使得所述可执行程序运行;
所述根据所述动态加载库,加载所述目标动态链接库,并确定所述目标函数的地址,包括:
调用所述动态加载库中预设的加载函数,加载所述目标动态链接库,并获取所述可执行程序待调用的基于第一环境下的函数,作为第一目标函数;
根据所述第一目标函数,在所述动态加载库中预设的哈希表中查找记录所述第一目标函数的目标函数对应关系;
根据所述目标函数对应关系,确定所述可执行程序待调用的基于第二环境下的第二目标函数;
根据所述第二目标函数,确定所述第二目标函数的地址;
所述第一环境为bionic环境;所述第二环境为glibc环境。
2.根据权利要求1所述的可执行程序的运行方法,其特征在于,所述调用所述动态加载库中预设的加载函数,加载所述目标动态链接库,之前还包括:
获取目标动态加载库的文件名以及加载方式;
根据所述文件名以及加载方式,构建所述动态加载库中的加载函数。
3.根据权利要求1所述的可执行程序的运行方法,其特征在于,所述根据所述第一目标函数,在所述动态加载库中预设的哈希表中查找记录所述第一目标函数的目标函数映射关系,之前还包括:
获取操作系统中的基于第一环境下的第一目标函数,以及所述目标动态链接库中基于第二环境下的第二目标函数;
根据所述第一目标函数以及所述第二目标函数,将功能相同的所述第一目标函数以及第二目标函数一一对应,得到函数对应关系;
根据所述函数对应关系,构建所述动态加载库中的哈希表;所述哈希表存放所述函数对应关系。
4.一种可执行程序的运行装置,其特征在于,包括:
获取装置,用于获取基于第一环境下编译的待处理的可执行程序;
加载装置,用于若所述可执行程序待加载的是基于第二环境下的目标动态链接库,并且待调用的是所述目标动态链接库中基于第二环境下的目标函数,则使用链接器加载预先构建的动态加载库;
确定装置,用于根据所述动态加载库,加载所述目标动态链接库,并确定所述目标函数的地址;
运行装置,用于根据所述目标函数的地址,调用所述目标函数,以使得所述可执行程序运行;
目标确定模块,用于调用所述动态加载库中预设的加载函数,加载所述目标动态链接库,并获取所述可执行程序待调用的基于第一环境下的函数,作为第一目标函数;
根据所述第一目标函数,在所述动态加载库中预设的哈希表中查找记录所述第一目标函数的目标函数对应关系;
根据所述目标函数对应关系,确定所述可执行程序待调用的基于第二环境下的第二目标函数;
根据所述第二目标函数,确定所述第二目标函数的地址;
所述第一环境为bionic环境;所述第二环境为glibc环境。
5.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至3任一项所述的可执行程序的运行方法的步骤。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至3中任意一项所述的可执行程序的运行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011615386.9A CN112631684B (zh) | 2020-12-30 | 2020-12-30 | 可执行程序的运行方法、装置、电子设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011615386.9A CN112631684B (zh) | 2020-12-30 | 2020-12-30 | 可执行程序的运行方法、装置、电子设备及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112631684A CN112631684A (zh) | 2021-04-09 |
CN112631684B true CN112631684B (zh) | 2021-08-06 |
Family
ID=75287042
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011615386.9A Active CN112631684B (zh) | 2020-12-30 | 2020-12-30 | 可执行程序的运行方法、装置、电子设备及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112631684B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023208012A1 (zh) * | 2022-04-27 | 2023-11-02 | 恒宝股份有限公司 | 程序处理、运行方法、装置、终端、智能卡及存储介质 |
CN115827120B (zh) * | 2023-01-10 | 2023-05-23 | 苏州浪潮智能科技有限公司 | 用户态网络栈调用、用户态接口设置方法和装置 |
CN116228515B (zh) * | 2023-05-06 | 2023-08-18 | 苏州仰思坪半导体有限公司 | 硬件加速系统、方法及相关装置 |
CN117076010B (zh) * | 2023-09-15 | 2024-01-19 | 腾讯科技(深圳)有限公司 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1924805A (zh) * | 2005-09-02 | 2007-03-07 | 腾讯科技(深圳)有限公司 | 在无线二进制运行环境平台实现动态链接库方法 |
GB2503590A (en) * | 2013-08-14 | 2014-01-01 | Micro Focus Ip Dev Ltd | Interoperability bridge unit for dynamic linking of executable library functions to an application using platform invoke |
CN106339247A (zh) * | 2016-09-13 | 2017-01-18 | 武汉斗鱼网络科技有限公司 | 一种动态链接库文件的加载系统及加载方法 |
CN107544792A (zh) * | 2016-06-27 | 2018-01-05 | 黑龙江傲立辅龙科技开发有限公司 | 一种基于vb的动态链接库实现控制计算机外设的方法 |
CN108415739A (zh) * | 2018-02-28 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 一种动态链接库函数的钩挂方法、装置和存储介质 |
CN108845841A (zh) * | 2018-06-15 | 2018-11-20 | 广州多益网络股份有限公司 | 改变终端应用行为的方法、装置及终端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9098316B2 (en) * | 2008-09-22 | 2015-08-04 | International Business Machines Corporation | Routing function calls to specific-function dynamic link libraries in a general-function environment |
-
2020
- 2020-12-30 CN CN202011615386.9A patent/CN112631684B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1924805A (zh) * | 2005-09-02 | 2007-03-07 | 腾讯科技(深圳)有限公司 | 在无线二进制运行环境平台实现动态链接库方法 |
GB2503590A (en) * | 2013-08-14 | 2014-01-01 | Micro Focus Ip Dev Ltd | Interoperability bridge unit for dynamic linking of executable library functions to an application using platform invoke |
CN107544792A (zh) * | 2016-06-27 | 2018-01-05 | 黑龙江傲立辅龙科技开发有限公司 | 一种基于vb的动态链接库实现控制计算机外设的方法 |
CN106339247A (zh) * | 2016-09-13 | 2017-01-18 | 武汉斗鱼网络科技有限公司 | 一种动态链接库文件的加载系统及加载方法 |
CN108415739A (zh) * | 2018-02-28 | 2018-08-17 | 腾讯科技(深圳)有限公司 | 一种动态链接库函数的钩挂方法、装置和存储介质 |
CN108845841A (zh) * | 2018-06-15 | 2018-11-20 | 广州多益网络股份有限公司 | 改变终端应用行为的方法、装置及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN112631684A (zh) | 2021-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112631684B (zh) | 可执行程序的运行方法、装置、电子设备及计算机存储介质 | |
US10908925B2 (en) | Dynamic loading method, and target file creation method and apparatus | |
US20190324772A1 (en) | Method and device for processing smart contracts | |
JP6198939B2 (ja) | ドライバをロードする方法及び組み込みデバイス | |
CN109062617B (zh) | 一种支持多类型设备的平台的应用方法、移动终端 | |
US9563446B2 (en) | Binary file generation | |
CN106155749B (zh) | 一种监控插件扩展方法及装置 | |
KR101059633B1 (ko) | 멀티태스킹 가상 머신을 위한 힙 구성 | |
CN111767056A (zh) | 一种源码编译方法、可执行文件运行方法及终端设备 | |
CN104731622A (zh) | 一种应用程序的加载方法、装置和移动终端 | |
US20040123308A1 (en) | Hybird of implicit and explicit linkage of windows dynamic link labraries | |
CN106681782B (zh) | 一种编译安卓安装包的动态链接库so文件的方法和装置 | |
CN112698867A (zh) | 注解信息的动态修改方法、装置、电子设备及介质 | |
CN112148388A (zh) | 一种计算机程序的挂钩方法和系统 | |
KR101392046B1 (ko) | 동적 라이브러리를 갖는 인터페이스를 단순화하는 방법, 시스템 및 컴퓨터 판독가능한 저장 매체 | |
US9448782B1 (en) | Reducing a size of an application package | |
CN108460276B (zh) | 一种安卓安装包的动态链接库so文件的处理方法和装置 | |
US11340914B2 (en) | Run-time identification of dependencies during dynamic linking | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及系统、存储介质及终端 | |
CN111273940B (zh) | 将程序文件上传至代码仓库的方法及装置 | |
WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
CN113495727B (zh) | 业务组件开发方法、装置、电子设备及介质 | |
CN113031956A (zh) | 程序编译方法和装置以及程序运行方法和装置 | |
KR20050010640A (ko) | 응용 프로그램의 동적링크 방법 | |
CN117251234B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230428 Address after: Room 401, Floor 4, No. 2, Haidian East Third Street, Haidian District, Beijing 100080 Patentee after: Yuanxin Information Technology Group Co.,Ltd. Address before: 100080 401-06, 4th floor, 2 Haidian East 3rd Street, Haidian District, Beijing Patentee before: YUANXIN TECHNOLOGY |
|
TR01 | Transfer of patent right |