CN105528220A - 加载动态共享对象的方法和装置 - Google Patents
加载动态共享对象的方法和装置 Download PDFInfo
- Publication number
- CN105528220A CN105528220A CN201410506142.5A CN201410506142A CN105528220A CN 105528220 A CN105528220 A CN 105528220A CN 201410506142 A CN201410506142 A CN 201410506142A CN 105528220 A CN105528220 A CN 105528220A
- Authority
- CN
- China
- Prior art keywords
- load instructions
- executable file
- shared object
- dynamic shared
- list
- 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.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种加载动态共享对象的方法和装置,属于通信领域。所述方法包括:获取待加载的动态共享对象的信息;根据所述动态共享对象的信息生成加载指令;在可执行文件中查找加载指令列表;在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。所述装置包括:获取模块、生成模块、查找模块和修改模块。本发明实施例实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
Description
技术领域
本发明涉及通信领域,特别涉及一种加载动态共享对象的方法和装置。
背景技术
Mach-O为MachObject文件格式的缩写,它是一种用于可执行文件、目标代码、动态共享对象和内核转储的文件格式。NeXTSTEP、OPENSTEP和MacOSX等操作***都使用这种格式作为其原生可执行文件、目标代码和动态共享对象的格式。
动态共享对象(DynamicSharedObject,简称DSO)是一个包含可由多个程序同时使用的代码和数据的库,不是可执行文件。多个应用程序可同时访问内存中单个DSO副本的内容。
一个Mach-O格式的可执行文件可以加载Mach-O格式的动态共享对象。当需要加载一个新的动态共享对象时,通常是先修改该可执行文件的程序源代码,然后再使用编译器重新进行编译,生成新的可执行文件,使用新的可执行文件来替代原有的可执行文件,从而实现加载新的动态共享对象。
但是,上述过程必须依赖于原有可执行文件的源代码,当原有可执行文件的源代码不可知时,则无法实现加载新的动态共享对象。
发明内容
有鉴于此,本发明实施例提供了一种加载动态共享对象的方法和装置,以解决在可执行文件的源代码不可知的情况下无法加载新的动态共享对象的技术问题。所述技术方案如下:
一方面,提供了一种加载动态共享对象的方法,包括:
获取待加载的动态共享对象的信息;
根据所述动态共享对象的信息生成加载指令;
在可执行文件中查找加载指令列表;
在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
另一方面,提供了一种加载动态共享对象的装置,包括:
获取模块,用于获取待加载的动态共享对象的信息;
生成模块,用于根据所述动态共享对象的信息生成加载指令;
查找模块,用于在可执行文件中查找加载指令列表;
修改模块,用于在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
本发明实施例提供的技术方案带来的有益效果是:通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的加载动态共享对象的方法流程图;
图2是本发明另一实施例提供的加载动态共享对象的方法流程图;
图3是本发明另一实施例提供的加载动态共享对象的方法流程图;
图4是本发明另一实施例提供的加载动态共享对象的装置结构图;
图5是本发明另一实施例提供的加载动态共享对象的装置结构图;
图6是本发明另一实施例提供的终端结构图;
图7是本发明另一实施例提供的服务器结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例涉及加载动态共享对象的方法和装置,可以应用于NeXTSTEP、OPENSTEP或MacOSX等操作***中,中央处理器可以为32位或者64位等等,涉及的可执行文件和动态共享对象为Mach-O格式。
参见图1,本发明一实施例提供了一种加载动态共享对象的方法,包括:
101:获取待加载的动态共享对象的信息。
其中,待加载的动态共享对象可以为一个,或者为多个,本实施例对此不做具体限定。动态共享对象的信息至少包括:动态共享对象的路径和名称,进一步地,还可以包括大小等其它信息,此处不限定。
102:根据该动态共享对象的信息生成加载指令。
其中,加载指令用于写入可执行文件中,通过该加载指令该可执行文件可以加载相应的动态共享对象。不同格式的可执行文件对应的加载指令格式也不同,具体地,可以根据可执行文件的格式来确定加载指令的格式,从而生成符合格式要求的加载指令,以保证该加载指令能够正确执行,完成加载动态共享对象的功能。
103:在可执行文件中查找加载指令列表。
其中,加载指令列表中包含可执行文件要加载的所有动态共享对象的信息,在加载动态共享对象时,按照该加载指令列表中各项的顺序逐一加载相应的动态共享对象。此处,对加载指令列表中加载项的个数不做限定。
104:在该加载指令列表的指定位置处添加该加载指令,得到新的可执行文件。
优选地,所述可执行文件和动态共享对象均为Mach-O格式。
其中,所述指定位置可以根据需要预先设定,优选地,设置为加载指令列表的末尾处,可以保证加载指令列表中原有的加载各项能够正常执行,不受影响。
可选的,所述在该加载指令列表的指定位置处添加该加载指令,得到新的可执行文件,可以包括:
在该加载指令列表的末尾处添加该加载指令,得到新的可执行文件。
可选的,所述在该加载指令列表的指定位置处添加该加载指令,得到新的可执行文件,可以包括:
将该加载指令列表中的第一加载指令替换为该加载指令,得到新的可执行文件;其中,该第一加载指令对应第一动态共享对象,该加载指令对应第二动态共享对象,且该第二动态共享对象包含该第一动态共享对象的功能。
可选的,所述根据该动态共享对象的信息生成加载指令,可以包括:
确定该可执行文件中加载指令的格式;
根据该动态共享对象的信息,按照该格式生成加载指令。
可选的,所述在可执行文件中查找加载指令列表,可以包括:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
相应的,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,可以包括:
在查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
本实施例提供的上述方法,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
参见图2,本发明另一实施例提供了一种加载动态共享对象的方法,包括:
201:获取待加载的动态共享对象的信息。
202:根据该动态共享对象的信息生成加载指令。
具体地,本步骤可以包括:
确定该可执行文件中加载指令的格式;根据该动态共享对象的信息,按照该格式生成加载指令。
其中,生成的加载指令中包含有动态共享对象的路径和名称等信息,且该加载指令的格式符合该可执行文件中加载指令的格式,从而保证该可执行文件在运行时能够正确解析该加载指令,进而保证动态共享对象的正确加载。
203:在可执行文件中查找加载指令列表。
其中,加载指令列表为一系列加载指令的集合,根据加载指令的格式可以在可执行文件中定位到加载指令列表。例如,可执行文件中的第一条加载指令为加载指令列表的开始位置,最后一条加载指令为加载指令列表的末尾位置。
在可执行文件中,加载指令列表可以为一个或者多个,当为多个时,其中每一个加载指令列表对应一个运行环境,且该多个加载指令列表在可执行文件中位于不同的位置。根据不同运行环境对应可执行文件中的偏移值可以得到与该环境对应的加载指令列表,从而可以对该加载指令列表进行修改。
例如,在可执行文件a.exe中有加载指令列表A和B,其中加载指令列表A对应32位的中央处理器,加载指令列表B对应64位的中央处理器,且加载指令列表A与B在可执行文件中的偏移值不同。
204:在该加载指令列表的末尾处添加该加载指令,得到新的可执行文件。
具体地,当查找得到多个加载指令列表时,可以在查找得到的每一个加载指令列表的末尾处添加所述加载指令,得到新的可执行文件。
或者,也可以根据运行该可执行文件的设备中的环境,来确定相应的加载指令列表,并对该确定的加载指令列表进行上述修改。
例如,运行可执行文件的设备为32位的中央处理器,则可以只修改该可执行文件中与32位运行环境对应的加载指令列表。
本实施例中,待加载的动态共享对象为一个新的动态共享对象,因此,采取添加新的加载指令的方式来修改可执行文件。具体地,在加载指令列表的末尾处添加该新生成的加载指令,可以保证加载指令列表中原有的各项加载指令不受影响,且能够实现新动态共享对象的加载。
本实施例提供的上述方法,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在该加载指令列表的末尾处添加该加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
参见图3,本发明另一实施例提供了一种加载动态共享对象的方法,包括:
301:获取待加载的动态共享对象的信息。
302:根据该动态共享对象的信息生成加载指令。
具体地,本步骤可以包括:
确定该可执行文件中加载指令的格式;根据该动态共享对象的信息,按照该格式生成加载指令。
303:在可执行文件中查找加载指令列表。
其中,加载指令列表位于可执行文件的文件头中,分析可执行文件的文件头可以得到加载指令列表,此处不做过多说明。
304:将该加载指令列表中的第一加载指令替换为该加载指令,得到新的可执行文件。
其中,该第一加载指令对应第一动态共享对象,该加载指令对应第二动态共享对象,且该第二动态共享对象包含该第一动态共享对象的功能。
本实施例中,该第一加载指令为加载指令列表中原有的加载指令,用于加载第一动态共享对象,新生成的加载指令用于加载第二动态共享对象,由于该第二动态共享对象包含第一动态共享对象的功能,可以替代该第一动态共享对象,在加载第二动态共享对象的情况下,无需再加载第一动态共享对象,因此,可以用新生成的加载指令替换原有的第一加载指令。修改后的可执行文件在加载该加载指令后,既可以实现第一动态共享对象的功能,也可以实现第二动态共享对象的功能。
本实施例中,具体地,当查找得到多个加载指令列表时,可以在查找得到的每一个加载指令列表中将第一加载指令替换为所述加载指令,得到新的可执行文件。
或者,也可以根据运行该可执行文件的设备中的环境,来确定相应的加载指令列表,并对该确定的加载指令列表进行上述修改。
本实施例提供的上述方法,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,将该加载指令列表中的第一加载指令替换为该加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
参见图4,本发明另一实施例提供了一种加载动态共享对象的装置,包括:
获取模块401,用于获取待加载的动态共享对象的信息;
生成模块402,用于根据该动态共享对象的信息生成加载指令;
查找模块403,用于在可执行文件中查找加载指令列表;
修改模块404,用于在该加载指令列表的指定位置处添加该加载指令,得到新的可执行文件。
参见图5,本实施例中,可选的,修改模块404可以包括:
添加单元404a,用于在该加载指令列表的末尾处添加该加载指令,得到新的可执行文件。
本实施例中,可选的,修改模块404可以包括:
修改单元404b,用于将该加载指令列表中的第一加载指令替换为该加载指令,得到新的可执行文件;其中,该第一加载指令对应第一动态共享对象,该加载指令对应第二动态共享对象,且该第二动态共享对象包含该第一动态共享对象的功能。
本实施例中,可选的,生成模块402可以包括:
生成单元,用于确定该可执行文件中加载指令的格式,根据该动态共享对象的信息,按照该格式生成加载指令。
本实施例中,可选的,查找模块403可以用于:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
相应的,修改模块404可以用于:
在所述查找模块查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
本实施例提供的上述装置,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
参见图6,本发明另一实施例提供了一种终端600,可以包括通信单元610、包括有一个或一个以上非易失性可读存储介质的存储器620、输入单元630、显示单元640、传感器650、音频电路660、WiFi(wirelessfidelity,无线保真)模块670、包括有一个或者一个以上处理核心的处理器680、以及电源690等部件。
本领域技术人员可以理解,图6中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
通信单元610可用于收发信息或通话过程中,信号的接收和发送,该通信单元610可以为RF(RadioFrequency,射频)电路、路由器、调制解调器、等网络通信设备。特别地,当通信单元610为RF电路时,将基站的下行信息接收后,交由一个或者一个以上处理器680处理;另外,将涉及上行的数据发送给基站。通常,作为通信单元的RF电路包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(LowNoiseAmplifier,低噪声放大器)、双工器等。此外,通信单元610还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(GlobalSystemofMobilecommunication,全球移动通讯***)、GPRS(GeneralPacketRadioService,通用分组无线服务)、CDMA(CodeDivisionMultipleAccess,码分多址)、WCDMA(WidebandCodeDivisionMultipleAccess,宽带码分多址)、LTE(LongTermEvolution,长期演进)、电子邮件、SMS(ShortMessagingService,短消息服务)等。存储器620可用于存储软件程序以及模块,处理器680通过运行存储在存储器620的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端600的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器620还可以包括存储器控制器,以提供处理器680和输入单元630对存储器620的访问。
输入单元630可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。可选地,输入单元630可包括触敏表面630a以及其他输入设备630b。触敏表面630a,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面630a上或在触敏表面630a附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面630a可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器680,并能接收处理器680发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面630a。除了触敏表面630a,输入单元630还可以包括其他输入设备630b。可选地,其他输入设备630b可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元640可用于显示由用户输入的信息或提供给用户的信息以及终端600的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元640可包括显示面板640a,可选的,可以采用LCD(LiquidCrystalDisplay,液晶显示器)、OLED(OrganicLight-EmittingDiode,有机发光二极管)等形式来配置显示面板640a。进一步的,触敏表面630a可覆盖显示面板640a,当触敏表面630a检测到在其上或附近的触摸操作后,传送给处理器680以确定触摸事件的类型,随后处理器680根据触摸事件的类型在显示面板640a上提供相应的视觉输出。虽然在图6中,触敏表面630a与显示面板640a是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面630a与显示面板640a集成而实现输入和输出功能。
终端600还可包括至少一种传感器650,比如光传感器、运动传感器以及其他传感器。可选地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板640a的亮度,接近传感器可在终端600移动到耳边时,关闭显示面板640a和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端600还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路660、扬声器660a,传声器660b可提供用户与终端600之间的音频接口。音频电路660可将接收到的音频数据转换后的电信号,传输到扬声器660a,由扬声器660a转换为声音信号输出;另一方面,传声器660b将收集的声音信号转换为电信号,由音频电路660接收后转换为音频数据,再将音频数据输出处理器680处理后,经RF电路610以发送给比如另一终端,或者将音频数据输出至存储器620以便进一步处理。音频电路660还可能包括耳塞插孔,以提供外设耳机与终端600的通信。
为了实现无线通信,该终端上可以配置有无线通信单元670,该无线通信单元670可以为WiFi模块。WiFi属于短距离无线传输技术,终端600通过无线通信单元670可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图6示出了无线通信单元670,但是可以理解的是,其并不属于终端600的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器680是终端600的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器620内的软件程序和/或模块,以及调用存储在存储器620内的数据,执行终端600的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器680可包括一个或多个处理核心;优选的,处理器680可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器680中。
终端600还包括给各个部件供电的电源690(比如电池),优选的,电源可以通过电源管理***与处理器680逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源690还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端600还可以包括摄像头、蓝牙模块等,在此不再赘述。
以上结合图6给出了终端600的可选结构,其中一个或多个模块存储于所述存储器中并被配置成由所述一个或多个处理器执行,所述一个或多个模块具有如下功能:
获取待加载的动态共享对象的信息;
根据所述动态共享对象的信息生成加载指令;
在可执行文件中查找加载指令列表;
在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
其中,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在所述加载指令列表的末尾处添加所述加载指令,得到新的可执行文件。
其中,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
将所述加载指令列表中的第一加载指令替换为所述加载指令,得到新的可执行文件;
其中,所述第一加载指令对应第一动态共享对象,所述加载指令对应第二动态共享对象,且所述第二动态共享对象包含所述第一动态共享对象的功能。
其中,所述根据所述动态共享对象的信息生成加载指令,包括:
确定所述可执行文件中加载指令的格式;
根据所述动态共享对象的信息,按照所述格式生成加载指令。
其中,所述在可执行文件中查找加载指令列表,包括:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
相应的,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
本实施例提供的上述终端,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
本发明另一实施例提供了一种服务器,该服务器可以用于执行上述实施例中提供的加载动态共享对象的方法。参见图7,该服务器1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以***处理器(centralprocessingunits,CPU)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1922可以设置为与存储介质1930通信,在服务器1900上执行存储介质1930中的一系列指令操作。
服务器1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,和/或,一个或一个以上操作***1941,例如WindowsServerTM,MacOSXTM,UnixTM,LinuxTM,FreeBSDTM等等。
具体在本实施例中,经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
获取待加载的动态共享对象的信息;
根据所述动态共享对象的信息生成加载指令;
在可执行文件中查找加载指令列表;
在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
其中,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在所述加载指令列表的末尾处添加所述加载指令,得到新的可执行文件。
其中,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
将所述加载指令列表中的第一加载指令替换为所述加载指令,得到新的可执行文件;
其中,所述第一加载指令对应第一动态共享对象,所述加载指令对应第二动态共享对象,且所述第二动态共享对象包含所述第一动态共享对象的功能。
其中,所述根据所述动态共享对象的信息生成加载指令,包括:
确定所述可执行文件中加载指令的格式;
根据所述动态共享对象的信息,按照所述格式生成加载指令。
其中,所述在可执行文件中查找加载指令列表,包括:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
相应的,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
本实施例提供的上述服务器,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
本发明另一实施例提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备中时,可以使得该设备执行如下步骤的指令(instructions):
获取待加载的动态共享对象的信息;
根据所述动态共享对象的信息生成加载指令;
在可执行文件中查找加载指令列表;
在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
其中,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在所述加载指令列表的末尾处添加所述加载指令,得到新的可执行文件。
其中,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
将所述加载指令列表中的第一加载指令替换为所述加载指令,得到新的可执行文件;
其中,所述第一加载指令对应第一动态共享对象,所述加载指令对应第二动态共享对象,且所述第二动态共享对象包含所述第一动态共享对象的功能。
其中,所述根据所述动态共享对象的信息生成加载指令,包括:
确定所述可执行文件中加载指令的格式;
根据所述动态共享对象的信息,按照所述格式生成加载指令。
其中,所述在可执行文件中查找加载指令列表,包括:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
相应的,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
本实施例提供的上述非易失性可读存储介质,通过获取待加载的动态共享对象的信息,根据所述动态共享对象的信息生成加载指令,在可执行文件中查找加载指令列表,在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,实现了在可执行文件的源代码不可知的情况下,能够加载新的动态共享对象,无需知道可执行文件的源代码,而且也不用使用编译器重新编译,摆脱了对可执行文件源代码的依赖,实用性强,应用更广泛。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种非易失性可读存储介质中,所述非易失性可读存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种加载动态共享对象的方法,其特征在于,所述方法包括:
获取待加载的动态共享对象的信息;
根据所述动态共享对象的信息生成加载指令;
在可执行文件中查找加载指令列表;
在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
2.根据权利要求1所述的方法,其特征在于,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在所述加载指令列表的末尾处添加所述加载指令,得到新的可执行文件。
3.根据权利要求1所述的方法,其特征在于,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
将所述加载指令列表中的第一加载指令替换为所述加载指令,得到新的可执行文件;
其中,所述第一加载指令对应第一动态共享对象,所述加载指令对应第二动态共享对象,且所述第二动态共享对象包含所述第一动态共享对象的功能。
4.根据权利要求1所述的方法,其特征在于,所述根据所述动态共享对象的信息生成加载指令,包括:
确定所述可执行文件中加载指令的格式;
根据所述动态共享对象的信息,按照所述格式生成加载指令。
5.根据权利要求1所述的方法,其特征在于,所述在可执行文件中查找加载指令列表,包括:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
相应的,所述在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件,包括:
在查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
6.一种加载动态共享对象的装置,其特征在于,所述装置包括:
获取模块,用于获取待加载的动态共享对象的信息;
生成模块,用于根据所述动态共享对象的信息生成加载指令;
查找模块,用于在可执行文件中查找加载指令列表;
修改模块,用于在所述加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
7.根据权利要求6所述的装置,其特征在于,所述修改模块包括:
添加单元,用于在所述加载指令列表的末尾处添加所述加载指令,得到新的可执行文件。
8.根据权利要求6所述的装置,其特征在于,所述修改模块包括:
修改单元,用于将所述加载指令列表中的第一加载指令替换为所述加载指令,得到新的可执行文件;
其中,所述第一加载指令对应第一动态共享对象,所述加载指令对应第二动态共享对象,且所述第二动态共享对象包含所述第一动态共享对象的功能。
9.根据权利要求6所述的装置,其特征在于,所述生成模块包括:
生成单元,用于确定所述可执行文件中加载指令的格式,根据所述动态共享对象的信息,按照所述格式生成加载指令。
10.根据权利要求6所述的装置,其特征在于,所述查找模块用于:
在所述可执行文件中查找得到多个加载指令列表,其中,每个加载指令列表分别对应一个运行环境;
所述修改模块用于:
在所述查找模块查找得到的每一个加载指令列表的指定位置处添加所述加载指令,得到新的可执行文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410506142.5A CN105528220B (zh) | 2014-09-28 | 2014-09-28 | 加载动态共享对象的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410506142.5A CN105528220B (zh) | 2014-09-28 | 2014-09-28 | 加载动态共享对象的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105528220A true CN105528220A (zh) | 2016-04-27 |
CN105528220B CN105528220B (zh) | 2020-12-01 |
Family
ID=55770469
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410506142.5A Active CN105528220B (zh) | 2014-09-28 | 2014-09-28 | 加载动态共享对象的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105528220B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105974231A (zh) * | 2016-05-10 | 2016-09-28 | 电子科技大学 | 一种用于航电***l波段设备测试的中频信号产生装置 |
CN109525584A (zh) * | 2018-11-26 | 2019-03-26 | 竞技世界(北京)网络技术有限公司 | 一种构建移动端跨平台多类型应用容器的方法 |
CN111399927A (zh) * | 2018-12-14 | 2020-07-10 | 北京奇虎科技有限公司 | 应用共享Class文件的方法及装置、计算设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998033106A1 (en) * | 1997-01-29 | 1998-07-30 | Shopnow.Com, Inc. | Method and system for injecting new code into existing application code |
CN1656732A (zh) * | 2002-05-23 | 2005-08-17 | 赛门铁克公司 | 变形计算机病毒检测 |
CN101719077A (zh) * | 2009-12-24 | 2010-06-02 | 北京飞天诚信科技有限公司 | 在.Net程序中注入代码的方法和装置 |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN102929716A (zh) * | 2012-11-07 | 2013-02-13 | 北京亿赛通科技发展有限责任公司 | 一种启动多进程的方法 |
-
2014
- 2014-09-28 CN CN201410506142.5A patent/CN105528220B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998033106A1 (en) * | 1997-01-29 | 1998-07-30 | Shopnow.Com, Inc. | Method and system for injecting new code into existing application code |
CN1656732A (zh) * | 2002-05-23 | 2005-08-17 | 赛门铁克公司 | 变形计算机病毒检测 |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN101719077A (zh) * | 2009-12-24 | 2010-06-02 | 北京飞天诚信科技有限公司 | 在.Net程序中注入代码的方法和装置 |
CN102929716A (zh) * | 2012-11-07 | 2013-02-13 | 北京亿赛通科技发展有限责任公司 | 一种启动多进程的方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105974231A (zh) * | 2016-05-10 | 2016-09-28 | 电子科技大学 | 一种用于航电***l波段设备测试的中频信号产生装置 |
CN105974231B (zh) * | 2016-05-10 | 2018-09-07 | 电子科技大学 | 一种用于航电***l波段设备测试的中频信号产生装置 |
CN109525584A (zh) * | 2018-11-26 | 2019-03-26 | 竞技世界(北京)网络技术有限公司 | 一种构建移动端跨平台多类型应用容器的方法 |
CN111399927A (zh) * | 2018-12-14 | 2020-07-10 | 北京奇虎科技有限公司 | 应用共享Class文件的方法及装置、计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105528220B (zh) | 2020-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104915241B (zh) | 一种虚拟机迁移控制方法及装置 | |
CN105404585A (zh) | 获取代码覆盖率的方法及装置 | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN104123218B (zh) | 一种代码覆盖测试方法、装置和*** | |
CN104572430A (zh) | 一种终端应用界面的测试方法、装置和*** | |
CN105278937A (zh) | 一种显示弹出框消息的方法及装置 | |
CN104636047A (zh) | 对列表中的对象进行操作的方法、装置及触屏终端 | |
CN104965722A (zh) | 一种显示信息的方法及装置 | |
CN103177217B (zh) | 一种文件扫描方法、***及客户端和服务器 | |
CN103945241A (zh) | 一种流媒体数据的统计方法、***及相关装置 | |
CN105530239A (zh) | 多媒体数据获取方法及装置 | |
CN104699501A (zh) | 一种运行应用程序的方法及装置 | |
CN105512150A (zh) | 一种信息搜索方法及装置 | |
CN104253870A (zh) | 控制数据访问周期的方法和装置 | |
CN104133693B (zh) | 安装状态检测方法、装置及终端 | |
CN104391629A (zh) | 定向发送消息的方法、显示消息的方法、服务器及终端 | |
CN105278925A (zh) | 对卸载的软件进行垃圾清除的方法及装置 | |
CN104901992A (zh) | 一种资源转移的方法和装置 | |
CN103631592A (zh) | 一种显示资源的配置、调用方法、装置及设备 | |
CN105528220A (zh) | 加载动态共享对象的方法和装置 | |
CN104978237A (zh) | 修复动态链接库文件的方法和装置 | |
CN104951324A (zh) | 一种获取应用调用关系表的方法及装置 | |
CN105278942A (zh) | 组件管理方法及装置 | |
CN105302589A (zh) | 一种获取卸载信息的方法及装置 | |
CN105022621A (zh) | 收藏会话消息的方法、装置及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |