CN107291513B - 文件加载方法及装置、计算机可读存储介质 - Google Patents

文件加载方法及装置、计算机可读存储介质 Download PDF

Info

Publication number
CN107291513B
CN107291513B CN201710537320.4A CN201710537320A CN107291513B CN 107291513 B CN107291513 B CN 107291513B CN 201710537320 A CN201710537320 A CN 201710537320A CN 107291513 B CN107291513 B CN 107291513B
Authority
CN
China
Prior art keywords
dynamic link
link library
library file
file
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.)
Active
Application number
CN201710537320.4A
Other languages
English (en)
Other versions
CN107291513A (zh
Inventor
杨亮
张文明
陈少杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hainan Haizhihui Technology Co.,Ltd.
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201710537320.4A priority Critical patent/CN107291513B/zh
Publication of CN107291513A publication Critical patent/CN107291513A/zh
Application granted granted Critical
Publication of CN107291513B publication Critical patent/CN107291513B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种文件加载方法及装置、计算机可读存储介质,属于计算机系统技术领域。其中,方法包括:获取目标动态链接库文件中的第一地址数据;根据第一地址数据,获取与目标动态链接库文件匹配的第一动态链接库文件名称;根据第一动态链接库文件名称,判断第一动态链接库文件是否已加载,若未加载,将第一动态链接库文件作为目标动态链接库文件,执行获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载目标动态链接库文件。通过获取并判断第一动态链接库文件是否已加载,以加载每个目标动态链接库文件。可以在各目标动态链接库文件路径不同的情况下,成功的加载每个目标动态链接库文件,使得文件加载不再受限于文件路径。

Description

文件加载方法及装置、计算机可读存储介质
技术领域
本发明涉及计算机系统技术领域,具体而言,涉及一种文件加载方法及装置、计算机可读存储介质。
背景技术
随着软件技术和硬件技术的不断发展进步,各种动态链接库文件(Dynamic LinkLibrary、DLL)在Windows系统中得到了广泛的应用。
Windows系统加载指定路径下的动态链接库文件时,该动态链接库文件在系统中的路径必须是动态链接库文件所对应的应用程序当前路径,或者是系统路径,也就是通常所说的系统安装盘的System文件夹,以及在系统环境变量PATH所代表的所有路径中。当系统所加载的动态链接库文件依赖于另一个动态链接库文件,而各动态链接库文件路径又不同,便会导致系统找不到所依赖于另一个动态链接库文件,进而导致动态链接库文件加载失败。
因此,如何在各动态链接库文件路径不同的情况下,成功的加载动态链接库文件是目前业界一大难题。
发明内容
有鉴于此,本发明的目的在于提供一种文件加载方法及装置、计算机可读存储介质,以有效改善上述缺陷。
本发明的实施例通过如下方式实现:
第一方面,本发明实施例提供了一种文件加载方法,包括:获取目标动态链接库文件中的第一地址数据;根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称;根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,若未加载,将所述第一动态链接库文件作为所述目标动态链接库文件,执行所述获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载所述目标动态链接库文件。
第二方面,本发明实施例提供了一种文件加载装置,包括:第一获取模块、第二获取模块和判断加载模块。所述第一获取模块,用于获取目标动态链接库文件中的第一地址数据。所述第二获取模块,用于根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称。所述判断加载模块,用于根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,若未加载,将所述第一动态链接库文件作为所述目标动态链接库文件,执行所述获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载所述目标动态链接库文件。
第三方面,本发明实施例提供了一种具有处理器可执行的非易失的程序代码的计算机可读存储介质,其特征在于,所述程序代码使所述处理器执行所述方法。
本发明实施例的有益效果是:
本发明实施例与现有技术相比,通过目标动态链接库文件中的第一地址数据来获取该目标动态链接库文件所依赖的第一动态链接库文件名称。又通过第一动态链接库文件名称来判断第一动态链接库文件是否已加载,找到每个需要加载的目标动态链接库文件,并将每个目标动态链接库文件均加载。可以在各目标动态链接库文件路径不同的情况下,成功的加载每个目标动态链接库文件,使得文件加载不再受限于文件路径。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供中终端设备的结构框图;
图2示出了本发明第一实施例提供的一种文件加载方法的流程图;
图3示出了本发明第一实施例提供的一种文件加载方法中步骤S100的子流程图;
图4示出了本发明第一实施例提供的一种文件加载方法中步骤S200的子流程图;
图5示出了本发明第二实施例提供的一种文件加载装置的结构框图;
图6示出了本发明第二实施例提供的一种文件加载装置中第一获取模块的结构框图;
图7示出了本发明第二实施例提供的一种文件加载装置中第二获取单元的结构框图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。能够
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参阅图1,图1是终端设备10的方框示意图。所述终端设备10包括:文件加载装置、存储器101、存储控制器102、处理器103、外设接口104、输入输出单元105、显示单元106。
所述存储器101、存储控制器102、处理器103、外设接口104、输入输出单元105、显示单元106,各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述文件加载装置包括至少一个可以软件或固件(firmware)的形式存储于所述存储器中或固化在所述终端设备10的Windows操作系统中的软件功能模块。所述处理器103用于执行存储器101中存储的可执行模块,例如所述文件加载装置包括的软件功能模块或计算机程序。
其中,存储器101可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器101用于存储程序,所述处理器103在接收到执行指令后,执行所述程序,后续本发明实施例任一实施例揭示的过程定义的终端设备10所执行的方法可以应用于处理器103中,或者由处理器103实现。
处理器103可以是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(NetworkProcessor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器103可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述外设接口104将各种输入输出单元105耦合至处理器103以及存储器101。在一些实施例中,外设接口,处理器以及存储控制器可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
输入输出单元105用于提供给用户输入数据实现用户与数据采集终端的交互。所述输入输出单元可以是,但不限于,鼠标和键盘等。
显示单元106在所述移动终端与用户之间提供一个交互界面,例如用户操作界面,或用于显示图像数据给用户参考。在本实施例中,所述显示单元可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器进行计算和处理。
第一实施例
请参阅图2,图2示出了本发明第一实施例提供的一种文件加载方法的方法流程,该文件加载方法应用于终端设备。文件加载方法的方法流程包括:步骤S100、步骤S200和步骤S300。
步骤S100:获取目标动态链接库文件中的第一地址数据。
在Windows系统中,Windows系统下所有的可执行文件均为PE(PortableExecution)文件。动态链接库文件是PE文件的其中一种,根据系统的运行,系统可直接或间接的加载执行系统运行所需的各动态链接库文件。本实施例中,目标动态链接库文件即为系统所需加载运行的动态链接库文件。该目标动态链接库文件的加载运行依赖于与该目标动态链接库文件匹配的第一动态链接库文件的加载运行,进而系统需根据该目标动态链接库文件中的数据去获取第一动态链接库文件是否加载运行。具体的,在目标动态链接库文件的数据中,目标动态链接库文件的数据包含了第一地址数据,该第一地址数据即为第一动态链接库文件的地址。
作为一种方式,系统首先读取该目标动态链接库文件,并通过调用函数去依次查找目标动态链接库文件中各数据,以通过依次获取各数据中所包含的信息而查找并获取该第一地址数据。可以理解到,本实施例通过调用函数来实现获取第一地址数据,所调用的函数类型可根据实际操作情况进行设定,本实施例并不做具体限定。
步骤S200:根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称。
系统通过调用函数找到目标动态链接库文件中第一动态链接库的第一地址数据后。系统根据该第一地址数据,通过调用函数将在目标动态链接库文件查找的位置定位到第一地址数据所指向的位置处,以通过读取该位置处数据获取该位置处数据中的第一name字段,以根据该第一name字段来获取与该第一name字段匹配的第一动态链接库文件名称。本实施例中,目标动态链接库文件的加载所依赖的第一动态链接库文件可以为至少一个,获取到的第一动态链接库文件名称也可以为至少一个。例如,目标动态链接库文件A的加载依赖第一动态链接库文件B的加载和第一动态链接库文件C的加载,则根据第一name字获取到第一动态链接库文件名称B和第一动态链接库文件名称C。可以理解到,目标动态链接库文件加载所依赖的其他动态链接库文件均为第一动态链接库文件,每个第一动态链接库文件和其余第一动态链接库文件可相同,也可不相同。
此外,本实施例通过第一地址数据去获取第一动态链接库文件名称,该第一动态链接库文件名称在系统中的所在位置即为第一动态链接库文件的所在位置。获取第一动态链接库文件名称可认为是查找到了第一动态链接库文件。
另外,获取第一动态链接库文件名称为本实施例的一种实施方式,并不作为本实施例的限定,本实施例也可通过例如,根据第一地址数据直接去获取第一动态链接库文件,在此就不做详细说明。另外,在本实施例中,系统每次所调用的函数可以为相同的函数,也可以为不同的函数,其调用函数的类型应当以实施本实施例时的实际操作情况为准,本实施例并不做具体限定。
步骤S300:根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,若未加载,将所述第一动态链接库文件作为所述目标动态链接库文件,执行所述获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载所述目标动态链接库文件。
系统获取到第一动态链接库文件名称后,系统根据该第一动态链接库文件名称获取内存中关于该第一动态链接库文件的返回值,例如,系统可通过调用Windows API函数Get Module Handle去获取内存中关于该第一动态链接库文件的返回值。可以理解到,Windows API函数Get Module Handle是用于获取内存中该第一动态链接库文件的返回值。本实施例中,系统所获取的返回值的数值表示该第一动态链接库文件是否加载并运行在内存之中。系统通过判断器来判断返回值的数据是否为预设值,进而判断该第一动态链接库文件是否已加载并运行在内存之中。其中,预设值为与返回值匹配的任意自然数。例如,预设值为0,返回值为0表示该第一动态链接库文件已加载并运行在内存之中,返回值为1表示该第一动态链接库文件未加载并运行在内存之中。当系统获取到第一动态链接库文件的返回值为0时,系统判定该返回值为预设值,进而系统获知第一动态链接库文件加载并运行在内存之中。当系统获取到第一动态链接库文件的返回值为1时,系统判定该返回值不为预设值,进而系统获知第一动态链接库文件未加载并运行在内存之中。
当系统判定返回值不为预设值,第一动态链接库文件未加载时,则说明该第一动态链接库文件在系统中的加载和运行还依赖于与该第一动态链接库文件匹配的第二动态链接库文件在系统中的加载和运行。系统便将查找到的第一动态链接库文件作为目标动态链接库文件,并通过返回执行步骤S100去获取第一动态链接库文件中的第二地址数据。系统又通过第二地址数据再去查找到第二地址数据所对应的与第一动态链接库文件匹配的第二动态链接库文件名称,并再次判断第二动态链接库文件的返回值。可以理解到到,第一动态链接库文件作为目标动态链接库文件的加载所依赖的第二动态链接库文件也可以为至少一个,获取到的第二动态链接库文件名称也可以为至少一个。通过上述的循环,当根据获取到的第n动态链接库文件名称判断该第n动态链接库文件名称的返回值为预设值时,其中n为大于等于2的自然数。系统获知该第n动态链接库文件已加载并运行在内种,并判定第n动态链接库文件的加载不再依赖其它动态链接库文件,进而系统通过递归的加载方式,将作为的目标动态链接库文件和目标动态链接库文件依次加载运行到内存中。例如,系统判定第n动态链接库文件名称的返回值为预设值,其中,n=3。系统通过调用Windows API函数Load Library依次将作为目标动态链接库文件的第二动态链接库文件和作为目标动态链接库文件的第一动态链接库文件均加载到内存中,并也通过调用Windows API函数LoadLibrary实现最终将目标动态链接库文件加载运行到内存中。可以理解到,Windows API函数Load Library是用于加载目标动态链接库文件。
请参阅图3,图3示出了本发明第一实施例提供的一种文件加载方法中步骤S100的方法子流程。具体的,步骤S100的方法子流程包括:步骤S110和步骤S120。
步骤S110:在所述目标动态链接库文件中,获取包含有数据段信息和所述第一动态链接库文件名称的初始地址数据的目标数据。
该文件加载方法中,首先需要打开该目标动态链接库文件。例如,系统可通过调用fopen函数来打开该需要加载的目标动态链接库文件。可以理解到,fopen函数用于打开需要加载的目标动态链接库文件。如果打开该目标动态链接库文件失败,说明该目标动态链接库文件不存在,从而直接退出执行加载该目标动态链接库文件的操作。如果打开该目标动态链接库文件成功,系统则需要获取该目标动态链接库文件中的目标数据。
具体的,当打开该目标动态链接库文件成功时,系统获取该目标动态链接库文件中的IMAGE_DOS_HEADER数据头。例如,系统可通过调用fread函数来读取目标动态链接库文件,以获取到该目标动态链接库文件中的IMAGE_DOS_HEADER数据头,其中,fread函数用于读取到目标动态链接库文件中的IMAGE_DOS_HEADER数据头。IMAGE_DOS_HEADER数据头是目标动态链接库文件中从第一个字节开始的第一个数据结构。系统通过读取该IMAGE_DOS_HEADER数据头便可获取到目标动态链接库文件中的目标数据。例如,根据该IMAGE_DOS_HEADER数据头,系统获取到IMAGE_DOS_HEADER数据头中的字段e_lfanew,其中,字段e_lfanew包含有地址信息。根据该字段e_lfanew,系统通过调用fseek函数便可定位到目标动态链接库文件中IMAGE_NT_HEADERS数据在目标动态链接库文件中的地址偏移处,其中,IMAGE_NT_HEADERS数据即为获取的目标数据。作为一种方式,系统定位到该目标数据在目标动态链接库文件中的地址偏移处可认为是获取到了该目标数据。
需要说明的是,目标动态链接库文件中每个数据段在该目标动态链接库文件中是按照512个字节对齐的。当到目标动态链接库文件加载到内存后,是按照页面为基本单位进行对齐的,而页面的大小是4096个字节。进而目标动态链接库文件中每个数据段的地址偏移相对该目标动态链接库文件与相对内存是不同的。本实施例所获取到目标数据在目标动态链接库文件中的地址偏移处,是该目标数据相对于目标动态链接库文件的地址偏移,即该目标数据在目标动态链接库文件中的起始地址。
步骤S120:在所述目标数据中,获取所述第一动态链接库文件名称的第一地址数据。
系统通过读取在目标动态链接库文件中的地址偏移处的目标数据,获取到该目标数据中目标动态链接库文件中包含的数据段信息和第一动态链接库文件名称的初始地址数据,其中,该数据段信息包括:目标动态链接库文件中数据段的数量和每个数据段的信息。
具体的,系统通过读取目标数据,以获取该目标数据中的Number Of Sections字段。该Number Of Sections字段中包含了目标动态链接库文件中所有数据段的数量。此外,系统通过调用fread函数读取目标动态链接库文件中每个数据段的信息,其中,fread函数用于读取目标动态链接库文件中每个数据段的信息。系统也通过读取目标数据,以获取该目标数据中的IMAGE_OPTIONAL_HEADER可选数据头。IMAGE_OPTIONAL_HEADER可选数据头中包含了第一动态链接库文件名称的初始地址数据。系统通过读取该IMAGE_OPTIONAL_HEADER可选数据头,获取其中的数据目录,即DataDirectory字段。该数据目录记录了该IMAGE_OPTIONAL_HEADER可选数据头中的各数据信息。系统通过读取该数据目录,以获取到该数据目录中数值项为IMAGE_DIRECTORY_ENTRY_IMPORT的数据值。该数据值中包含了第一动态链接库文件名称的初始地址数据,进而系统读取该数据值,以获取到该数据值中VirtualAddress字段。VirtualAddress字段为初始地址数据所在数据段在内存中的初始地址偏移,并包含了初始地址数据。系统也通过读取该VirtualAddress字段,进而获取该VirtualAddress字段中的ImportRVA字段。该ImportRVA字段即为第一动态链接库文件名称的初始地址数据。
系统获取到第一动态链接库文件名称的初始地址数据,该初始地址数据也为相对内存的地址偏移。可以理解到,若直接定位该初始地址数据,则无法准确的定位到该初始地址数据在目标动态链接库文件中相对该目标动态链接库文件的地址偏移处。进而系统需要根据数据段信息中数据段的数量和每个数据段的信息,获取初始地址数据相对该目标动态链接库文件偏移后的第一地址数据,其中,该第一地址数据在目标动态链接库文件中相对该目标动态链接库文件的地址偏移处。
具体的,根据获取的目标动态链接库文件中所有数据段的数量,目标动态链接库文件中每个数据段的信息,以及初始地址数据在目标动态链接库文件中相对目标动态链接库文件的地址偏移处。其中,每个数据段的信息中包含了该数据段在内存中的数据大小Size Of Raw Data。当该初始地址数据大于等于VirtualAddress字段在内存中的初始地址偏移VirtualAddress,且该初始地址数据小于等于VirtualAddress字段所内存中的结束地址偏移VirtualAddress+SizeOfRawData时,则确定初始地址数据所在数据段的索引,即确定该初始地址数据位于目标动态链接库文件中的哪一个数据段。
系统通过确定初始地址数据所在数据段索引来获取到初始地址数据在目标动态链接库文件中相对该动态链接库文件的地址偏移。具体的,系统也通过读取Number OfSections字段,来获取该Number Of Sections字段中的PointerToRawData字段,其中,该PointerToRawData字段为初始地址数据所在的数据段在目标动态链接库文件中的起始地址。可以理解到,初始地址数据所在的数据段在目标动态链接库文件中的起始地址加上初始地址数据相对于初始地址数据所在的数据段的偏移地址便是初始地址数据在目标动态链接库文件中的偏移地址,即为Import RVA File Offset=Pointer ToRawData+ImportRVA–VirtualAddress。Import RVA File Offset即为初始地址数据在目标动态链接库文件中偏移地址的第一地址数据。
请参阅图4,图4示出了本发明第一实施例提供的一种文件加载方法中步骤S200的方法子流程。具体的,步骤S200的方法子流程包括:步骤S210和步骤S220。
步骤S210:根据所述第一地址数据,获取所述目标数据中所述第一动态链接库文件名称的第一name字段。
根据第一地址数据,系统获取第一地址数据在目标动态链接库文件中偏移地址。系统根据第一地址数据便可获取第一地址数据处第一动态链接库文件名称的第一name字段。
具体的,系统可通过调用fseek函数定位到目标动态链接库文件中的第一地址数据处,其中,fseek函数用于定位到目标动态链接库文件中的第一地址数据处。定位到第一地址数据处后,系统再通过调用fread函数读取第一地址数据处的IMAGE_IMPORT_DESCRIPTO数据,其中,该IMAGE_IMPORT_DESCRIPTO数据中包含了初始name字段。系统通过读取该IMAGE_IMPORT_DESCRIPTO数据,便获得了初始name字段。
此外,系统获取初始name字段后,还通过判断器判断初始name字段是否等于约定值,其中,该约定值为任意自然数,例如0。若根据判断器判定该初始name字段不等于约定值,则说明该目标动态链接库文件的加载运行还依赖于与该目标动态链接库文件匹配的第一动态链接库文件的加载和运行。若根据判断器判定该初始name字段等于约定值,则说明该目标动态链接库文件可直接加载运行。
当初始name字段不等于约定值时,由于该初始name字段为相对内存的地址偏移,若需准确的定位到第一动态链接库文件名称处,进而系统也需要根据数据段信息中数据段的数量和每个数据段的信息,获取初始name字段相对该目标动态链接库文件偏移后的第一name字段。
具体的,也根据获取的目标动态链接库文件中所有数据段的数量,目标动态链接库文件中每个数据段的信息,以及初始name字段在内存的地址偏移,其中,每个数据段的信息中包含了该数据段在内存中的数据大小Size Of Raw Data。当该初始name字段在内存的地址偏移大于等于初始name字段所在的数据段在内存中的初始地址偏移,且该初始name字段在内存的地址偏移小于等于该初始name字段的所在数据段在内存中的结束地址偏移时,其中,结束地址偏移为初始地址偏移加上该初始name字段的所在数据段的数据大小SizeOfRawData。则确定初始name字段所在数据段的索引,即确定该初始name字段位于目标动态链接库文件中的哪一个数据段。
系统通过确定初始name字段所在数据段索引来获取到初始name字段在目标动态链接库文件中相对该动态链接库文件的地址偏移。具体的,系统也获取该初始name字段所在数据段在目标动态链接库文件中的起始地址。可以理解到,初始name字段所在的数据段在目标动态链接库文件中的起始地址加上初始name字段相对于初始name字段所在的数据段的偏移地址便是初始name字段在目标动态链接库文件中的偏移地址,其中,初始name字段相对于初始name字段所在的数据段的偏移地址为初始name字段在内存的地址偏移减去初始name字段所在的数据段相对内存的偏移。所获取的初始name字段在目标动态链接库文件中的偏移地址即为NameOffset,该NameOffset即为第一name字段。
步骤S220:在所述第一name字段中,获取与所述目标动态链接库文件匹配的所述第一动态链接库文件名称。
系统获取到第一name字段后,第一name字段中所包含的信息为第一动态链接库文件的第一动态链接库文件名称。系统根据该第一name字段便可获取到与该第一name字段匹配的第一动态链接库文件名称。具体的,系统可通过读取该第一name字段中包含的数据,通过解析读取到的数据便可获取到该第一name字该中的第一动态链接库文件名称。
本发明第一实施例提供的一种文件加载方法的工作原理如下:
例如,目标动态链接库文件A需要加载运行,目标动态链接库文件A加载运行分别依赖于第一动态链接库文件B的加载运行和第一动态链接库文件C的加载运行,而第一动态链接库文件C的加载运行又依赖于第二动态链接库文件D的加载运行。系统首先获取到目标动态链接库文件A中的初始name字段A不等于约定值,根据初始name字段A获取相对目标动态链接库文件A的偏移地址的第一name字段A,并根据第一name字段A获取到目标动态链接库文件A加载运行所依赖的第一动态链接库文件B和第一动态链接库文件C。此时,系统根据第一动态链接库文件B已加载到内存中的判断,则判定第一动态链接库文件B的加载运行不依赖其他动态链接库文件。此外,系统还根据第一动态链接库文件C未加载到内存中的判断,则判定第一动态链接库文件C的加载运行还依赖其他动态链接库文件。系统将第一动态链接库文件C作为新的目标动态链接库文件,获取到第一动态链接库文件C中的初始name字段C不等于约定值。系统根据初始name字段C获取相对第一动态链接库文件C的偏移地址的第二name字段C,并根据第二name字段C获取到第一动态链接库文件C加载运行所依赖的第二动态链接库文件D。此时,系统根据第二动态链接库文件D已加载到内存中的判断,则判定第二动态链接库文件D的加载运行不依赖其他动态链接库文件。最终,系统将第一动态链接库文件C和目标动态链接库文件A依次加载到内存中,实现了目标动态链接库文件A的加载运行。
第二实施例
请参阅图5,图5为本发明第二实施例提供的一种文件加载装置100的功能模块图,该文件加载装置100包括:第一获取模块110、第二获取模块120和判断加载模块130。
所述第一获取模块110,用于获取目标动态链接库文件中的第一地址数据。
所述第二获取模块120,用于根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称。
所述判断加载模块130,用于根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,若未加载,将所述第一动态链接库文件作为所述目标动态链接库文件,执行所述获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载所述目标动态链接库文件。
请参阅图6,图6为本发明第二实施例提供的一种文件加载装置100中第一获取模块110的功能模块图,该第一获取模块110包括:第一获取单元111和第二获取单元112。
所述第一获取单元111,用于在所述目标动态链接库文件中,获取包含有数据段信息和所述第一动态链接库文件名称的初始地址数据的目标数据。
所述第二获取单元112,用于在所述目标数据中,获取所述第一动态链接库文件名称的第一地址数据
请参阅图7,图7为本发明第二实施例提供的一种文件加载装置100中第二获取单元112的功能模块图,该第二获取单元112包括:第一获取子单元1121、第二获取子单元1122和偏移量获取子单元1123。
所述第一获取子单元1121,用于获取所述目标数据中的数据段信息,其中,所述数据段信息包括:所述目标动态链接库文件中数据段的数量和每个数据段的信息;
所述第二获取子单元1122,用于在所述目标数据中,获取所述第一动态链接库文件名称的初始地址数据;
所述偏移量获取子单元1123,用于根据所述数据段信息中数据段的数量和每个数据段的信息,获取所述第一动态链接库文件名称的初始地址数据偏移后的所述第一动态链接库文件名称的第一地址数据。
需要说明的是,由于所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例所提供的进行处理器可执行的非易失的程序代码的计算机可读存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本发明实施例提供了一种文件加载方法及装置、计算机可读存储介质。其中,文件加载方法包括:获取目标动态链接库文件中的第一地址数据;根据第一地址数据,获取与目标动态链接库文件匹配的第一动态链接库文件名称;根据第一动态链接库文件名称,判断第一动态链接库文件是否已加载,若未加载,将第一动态链接库文件作为目标动态链接库文件,执行获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载目标动态链接库文件。
通过目标动态链接库文件中的第一地址数据来获取该目标动态链接库文件所依赖的第一动态链接库文件名称。又通过第一动态链接库文件名称来判断第一动态链接库文件是否已加载,找到每个需要加载的目标动态链接库文件,并将每个目标动态链接库文件均加载。可以在各目标动态链接库文件路径不同的情况下,成功的加载每个目标动态链接库文件,使得文件加载不再受限于文件路径。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种文件加载方法,其特征在于,包括:
获取目标动态链接库文件中的第一地址数据;
根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称;
根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,若未加载,将所述第一动态链接库文件作为所述目标动态链接库文件,执行所述获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载所述目标动态链接库文件。
2.根据权利要求1所述的文件加载方法,其特征在于,获取目标动态链接库文件中的第一地址数据,包括:
在所述目标动态链接库文件中,获取包含有数据段信息和所述第一动态链接库文件名称的初始地址数据的目标数据;
在所述目标数据中,获取所述第一动态链接库文件名称的第一地址数据。
3.根据权利要求2所述的文件加载方法,其特征在于,在所述目标数据中,获取所述第一动态链接库文件名称的第一地址数据,包括:
获取所述目标数据中的数据段信息,其中,所述数据段信息包括:所述目标动态链接库文件中数据段的数量和每个数据段的信息;
在所述目标数据中,获取所述第一动态链接库文件名称的初始地址数据;
根据所述数据段信息中数据段的数量和每个数据段的信息,获取所述第一动态链接库文件名称的初始地址数据偏移后的所述第一动态链接库文件名称的第一地址数据。
4.根据权利要求3所述的文件加载方法,其特征在于,根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称,包括:
根据所述第一地址数据,获取所述目标数据中所述第一动态链接库文件名称的第一name字段;
在所述第一name字段中,获取与所述目标动态链接库文件匹配的所述第一动态链接库文件名称。
5.根据权利要求4所述的文件加载方法,其特征在于,根据所述第一地址数据,获取所述目标数据中所述第一动态链接库文件名称的第一name字段,包括:
根据所述第一地址数据,获取所述目标数据中所述第一动态链接库文件名称的初始name字段;
根据所述数据段信息中数据段的数量和每个数据段的信息,获取所述初始name字段偏移后的所述第一name字段。
6.根据权利要求1-5任意一项所述的文件加载方法,其特征在于,根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,包括:
根据所述第一动态链接库文件名称,获取所述第一动态链接库文件的返回值;
根据所述返回值是否为预设值,判断所述第一动态链接库文件是否已加载,其中,所述预设值为自然数。
7.一种文件加载装置,其特征在于,包括:第一获取模块、第二获取模块和判断加载模块;
所述第一获取模块,用于获取目标动态链接库文件中的第一地址数据;
所述第二获取模块,用于根据所述第一地址数据,获取与所述目标动态链接库文件匹配的第一动态链接库文件名称;
所述判断加载模块,用于根据所述第一动态链接库文件名称,判断所述第一动态链接库文件是否已加载,若未加载,将所述第一动态链接库文件作为所述目标动态链接库文件,执行所述获取目标动态链接库文件中的第一地址数据的步骤,若已加载,加载所述目标动态链接库文件。
8.根据权利要求7所述的文件加载装置,其特征在于,所述第一获取模块包括:第一获取单元和第二获取单元;
所述第一获取单元,用于在所述目标动态链接库文件中,获取包含有数据段信息和所述第一动态链接库文件名称的初始地址数据的目标数据;
所述第二获取单元,用于在所述目标数据中,获取所述第一动态链接库文件名称的第一地址数据。
9.根据权利要求8所述的文件加载装置,其特征在于,所述第二获取单元包括:第一获取子单元、第二获取子单元和偏移量获取子单元;
所述第一获取子单元,用于获取所述目标数据中的数据段信息,其中,所述数据段信息包括:所述目标动态链接库文件中数据段的数量和每个数据段的信息;
所述第二获取子单元,用于在所述目标数据中,获取所述第一动态链接库文件名称的初始地址数据;
所述偏移量获取子单元,用于根据所述数据段信息中数据段的数量和每个数据段的信息,获取所述第一动态链接库文件名称的初始地址数据偏移后的所述第一动态链接库文件名称的第一地址数据。
10.一种具有处理器可执行的非易失的程序代码的计算机可读存储介质,其特征在于,所述程序代码使所述处理器执行所述权利要求1-6任一所述方法。
CN201710537320.4A 2017-07-04 2017-07-04 文件加载方法及装置、计算机可读存储介质 Active CN107291513B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710537320.4A CN107291513B (zh) 2017-07-04 2017-07-04 文件加载方法及装置、计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710537320.4A CN107291513B (zh) 2017-07-04 2017-07-04 文件加载方法及装置、计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN107291513A CN107291513A (zh) 2017-10-24
CN107291513B true CN107291513B (zh) 2020-07-31

Family

ID=60098718

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710537320.4A Active CN107291513B (zh) 2017-07-04 2017-07-04 文件加载方法及装置、计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN107291513B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113204377B (zh) 2020-01-31 2022-12-06 华为技术有限公司 一种动态链接库的加载方法及装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1834911A (zh) * 2005-03-14 2006-09-20 华为技术有限公司 实现程序加载运行的方法
CN101908119A (zh) * 2010-08-12 2010-12-08 浙江中控软件技术有限公司 一种动态链接库dll文件的处理方法和装置
CN101938469A (zh) * 2010-08-08 2011-01-05 北京大学 一种运行时Android库文件的透明加载方法及系统
CN102938036A (zh) * 2011-11-29 2013-02-20 Ut斯达康通讯有限公司 Windows动态链接库的分段双重加密及安全加载方法
CN102981869A (zh) * 2012-11-05 2013-03-20 北京奇虎科技有限公司 一种系统启动项程序的运行处理方法和装置
CN103034512A (zh) * 2012-11-28 2013-04-10 北京奇虎科技有限公司 更新程序的方法和装置
CN104899225A (zh) * 2014-03-07 2015-09-09 北京四达时代软件技术股份有限公司 对象关系映射方法、装置及处理器
CN106354536A (zh) * 2016-08-31 2017-01-25 北京奇虎科技有限公司 在Windows系统中加载Linux系统ELF文件的方法及装置
CN106406945A (zh) * 2016-09-09 2017-02-15 武汉斗鱼网络科技有限公司 一种安卓系统so文件的加载方法及电子设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100942795B1 (ko) * 2007-11-21 2010-02-18 한국전자통신연구원 악성프로그램 탐지장치 및 그 방법

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1834911A (zh) * 2005-03-14 2006-09-20 华为技术有限公司 实现程序加载运行的方法
CN101938469A (zh) * 2010-08-08 2011-01-05 北京大学 一种运行时Android库文件的透明加载方法及系统
CN101908119A (zh) * 2010-08-12 2010-12-08 浙江中控软件技术有限公司 一种动态链接库dll文件的处理方法和装置
CN102938036A (zh) * 2011-11-29 2013-02-20 Ut斯达康通讯有限公司 Windows动态链接库的分段双重加密及安全加载方法
CN102981869A (zh) * 2012-11-05 2013-03-20 北京奇虎科技有限公司 一种系统启动项程序的运行处理方法和装置
CN103034512A (zh) * 2012-11-28 2013-04-10 北京奇虎科技有限公司 更新程序的方法和装置
CN104899225A (zh) * 2014-03-07 2015-09-09 北京四达时代软件技术股份有限公司 对象关系映射方法、装置及处理器
CN106354536A (zh) * 2016-08-31 2017-01-25 北京奇虎科技有限公司 在Windows系统中加载Linux系统ELF文件的方法及装置
CN106406945A (zh) * 2016-09-09 2017-02-15 武汉斗鱼网络科技有限公司 一种安卓系统so文件的加载方法及电子设备

Also Published As

Publication number Publication date
CN107291513A (zh) 2017-10-24

Similar Documents

Publication Publication Date Title
CN107679081B (zh) 信息修改方法、装置、计算机设备及计算机可读存储介质
CN108388598B (zh) 电子装置、数据存储方法及存储介质
CN108388599B (zh) 电子装置、数据迁移及调用方法及存储介质
CN107133165B (zh) 浏览器兼容性检测方法及装置
US20190004829A1 (en) Method, device and user terminal for loading application
CN107729452B (zh) 网页加载方法、装置、电子设备及计算机可读存储介质
CN112765271A (zh) 区块链交易索引的存储方法、装置、计算机设备及介质
EP3007062A1 (en) Firmware upgrade method and apparatus, and communication device
CN107291759B (zh) 浏览器页面资源的处理方法和装置
CN111414374B (zh) 一种区块链交易并发处理方法、装置及设备
CN108776587B (zh) 数据获取方法、装置、计算机设备以及存储介质
CN111026774A (zh) 数据顺序同步方法、装置、计算机设备及存储介质
CN111400091B (zh) 恢复出厂设置方法、恢复出厂设置装置及移动终端
CN109656592B (zh) 卡片管理方法、装置、终端及计算机可读存储介质
CN110889116A (zh) 一种广告拦截方法、装置及电子设备
CN107291513B (zh) 文件加载方法及装置、计算机可读存储介质
CN105354490B (zh) 一种处理被劫持浏览器的方法及设备
US10503430B2 (en) Method and device for clearing data and electronic device
CN107480240B (zh) 一种数据库系统及其数据处理方法
CN111090623B (zh) 一种数据审计方法、装置、电子设备及存储介质
CN111198830B (zh) 移动存储设备的识别方法、装置、电子设备以及存储介质
CN112380094A (zh) 一种rpa业务流程处理方法及装置
CN111782474A (zh) 日志处理方法、装置、电子设备和介质
CN109271266B (zh) 文件传输方法、装置及终端设备
CN115004667B (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: 20231206

Address after: 572000, 7th Floor, Building A, China Merchants Yazhou Bay Free Trade Center, Yazhou District, Sanya City, Hainan Province, China, 707-18

Patentee after: Hainan Haizhihui Technology Co.,Ltd.

Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building

Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right