CN106354536A - 在Windows系统中加载Linux系统ELF文件的方法及装置 - Google Patents

在Windows系统中加载Linux系统ELF文件的方法及装置 Download PDF

Info

Publication number
CN106354536A
CN106354536A CN201610799064.1A CN201610799064A CN106354536A CN 106354536 A CN106354536 A CN 106354536A CN 201610799064 A CN201610799064 A CN 201610799064A CN 106354536 A CN106354536 A CN 106354536A
Authority
CN
China
Prior art keywords
file
elf
symbol
windows
content
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
Application number
CN201610799064.1A
Other languages
English (en)
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.)
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201610799064.1A priority Critical patent/CN106354536A/zh
Priority to US15/741,163 priority patent/US20190087208A1/en
Priority to PCT/CN2016/104061 priority patent/WO2018040270A1/zh
Publication of CN106354536A publication Critical patent/CN106354536A/zh
Pending legal-status Critical Current

Links

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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • 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/44505Configuring for program initiating, e.g. using registry, configuration files
    • G06F9/4451User profiles; Roaming
    • 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/44557Code layout in executable memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • 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

Abstract

本发明公开了一种在Windows系统中加载Linux系统ELF文件的方法及装置,方法包括:依据ELF文件的格式解析ELF文件;按照Windows系统内存存储规则,将整个ELF文件加载到Windows系统的内存中;依据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。本发明提供的技术方案实现了将ELF文件直接加载至Windows系统内存中,使得ELF文件中的符号,如函数等,可以直接在Windows系统上运行,而不需要在Windows系统安装Andriod虚拟机。同时也极大的提升了运行速度,减少了硬盘空间和内存的占用。

Description

在Windows系统中加载Linux系统ELF文件的方法及装置
技术领域
本发明涉及计算机软件技术领域,具体涉及一种在Windows系统中加载Linux系统ELF(Executable and Linking Format,可执行链接格式)文件的方法及装置。
背景技术
随着Andriod操作系统的移动终端的普及,应用市场随即出现越来越多应用于Andriod操作系统的移动终端的Andriod应用程序,这些Andriod应用程序极大的满足了用户生活、娱乐、购物等需求。但移动终端由于其本身方便携带等移动特性的限制,使得移动终端存在屏幕较小、处理器易发热、电池续航能力不足、网络信号不稳定等问题,造成用户的视觉体验不高,在使用时易产生用户在操作过程中被中断或停滞等状况。对此,用户可以通过使用Windows系统的PC机运行Andriod应用程序来解决。
在Windows系统的PC机侧安装Andriod虚拟机,在该Andriod虚拟机中虚拟运行Andriod操作系统,可以实现在Windows系统的PC机上运行Andriod应用程序,使用户能够在较大的显示屏中感受较好的视觉体验及运行速度的提升。但这种方式由于Andriod虚拟机中本身运行时需要耗费PC机侧大量的硬盘空间和内存,一定程度上也对PC机运行Andriod应用程序的速度造成影响。
在Andriod应用程序中包括了很多Linux系统的ELF文件,如果将这些文件直接加载至Windows系统运行,可以极大的提高PC机在运行Andriod应用程序时的速度,解决运行时速度慢、停滞等问题。但现有技术还没有一种在Windows系统中加载Linux系统ELF文件的方法及装置。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的在Windows系统中加载Linux系统ELF文件的方法及装置。
根据本发明的一个方面,提供了一种在Windows系统中加载Linux系统ELF文件的方法,其包括:依据ELF文件的格式解析ELF文件;按照Windows系统内存存储规则,将整个ELF文件加载到Windows系统的内存中;依据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。
根据本发明的另一方面,提供了一种在Windows系统中加载Linux系统ELF文件的装置,其包括:解析模块,适于依据ELF文件的格式解析ELF文件;加载模块,适于按照Windows系统内存存储规则,将整个ELF文件加载到Windows系统的内存中;获取模块,适于依据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;链接模块,适于将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。
根据本发明提供的在Windows系统中加载Linux系统ELF文件的方法及装置,解析ELF文件后,将整个ELF文件按照Windows系统内存存储规则加载到Windows系统的内存中。根据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。从而实现了将ELF文件直接加载至Windows系统内存中,使得ELF文件中的符号如函数,可以直接在Windows系统上运行,而不需要在Windows系统安装Andriod虚拟机。同时也极大的提升了运行速度,减少了硬盘空间和内存的占用。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的在Windows系统中加载Linux系统ELF文件的方法的流程图;
图2示出了根据本发明另一个实施例的在Windows系统中加载Linux系统ELF文件的方法的流程图;
图3示出了根据本发明一个实施例的在Windows系统中加载Linux系统ELF文件的装置的功能框图;
图4示出了根据本发明另一个实施例的在Windows系统中加载Linux系统ELF文件的装置的功能框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
ELF文件是Linux系统下的一种常用目标文件(object file)格式,分为可重定位的对象文件、可执行的对象文件、可被共享的对象文件(即动态链接库文件)三种文件类型。本申请实施例主要对可执行的对象文件和可被共享的对象文件的加载进行描述。ELF文件包括有头文件(ELF header)、程序头表(Program Header Table)、section头表(SectionHeader Table)、sections或者segments等多个部分。头文件中描述了整个ELF文件的组织结构,如program header的入口地址、偏移地址、大小、结构、节区等等。程序头表指出怎样创建进程映像,section头表包含每一个section的入口,给出名字、大小等信息。section中提供了目标文件的各项信息,如指令、数据、符号表、重定位信息等。符号表包含用来定位、重定位程序中符号定义和引用的信息,简单的理解就是符号表记录了该文件中的所有符号,所谓的符号就是经过修饰了的函数名或者变量名。以上涉及的这些内容都需要在Windows系统中进行加载。
图1示出了根据本发明一个实施例的在Windows系统中加载Linux系统ELF文件的方法的流程图。如图1所示,在Windows系统中加载Linux系统ELF文件的方法具体包括如下步骤:
步骤S101,依据ELF文件的格式解析ELF文件。
解析ELF文件时需要对ELF文件的头文件的内容进行解析。头文件的内容包括了如ELF文件类型、ELF文件运行需要的体系结构、ELF文件版本、ELF文件起始地址、程序头表在ELF文件中的偏移地址、section头表在ELF文件中的偏移地址、头文件的大小、程序头表中一个入口的大小(所有的入口都是同样的大小)、程序头表中入口的个数、section头的大小、section头的入口的个数等等。这些内容在后续的步骤中计算地址时需要使用。
步骤S102,按照Windows系统内存存储规则,将整个ELF文件加载到Windows系统的内存中。
Windows系统和Linux系统都有各自的存储规则,ELF文件为Linux系统格式的文件,将ELF文件加载到Windows系统的内存,需要按照Windows系统内存存储规则,进行对齐和/或跨页的处理。
按照Windows系统内存对齐规则,若Windows系统内存中当前字节的空间不足,不能继续存储ELF文件,执行对齐处理,执行时需按照Windows系统内存从高地址向低地址分配空闲空间的方式,存储剩余的ELF文件的字节。按照Windows系统内存存储规则进行加载时,由于ELF文件本身为Linux系统文件,其存储的方式与Windows系统存储方式有所不同,如Linux系统变量所占用的字节长度与Windows系统变量所占用的字节长度不同的问题,可能会导致在存储时,Windows系统的字节不能与ELF文件中的字节实现恰好的1对1或1对几的存储,出现Windows系统的字节中在存储1个或几个ELF文件中的字节后,留有一定的空间,而留下的空间不足以继续存储1个ELF文件中的字节的情况。如Windows系统的字节还有16k的存储空间,ELF文件中有3个6k的字节需要存储时,Windows系统的字节仅能存储2个ELF文件中的6k的字节,剩余的ELF文件中的6k的字节需要在另一个Windows系统的字节中进行存储。对齐时还需要记录后一Windows系统的字节的地址,方便在查找时,可以从迅速的找到Windows系统中不同字节存储的整个ELF文件。
Windows系统内存是以页为单位进行管理。每页中存储了相同字节长度的内容。由于ELF文件本身为Linux文件,其存储的方式与Windows系统存储方式有所不同,如Linux系统变量所占用的字节长度与Windows系统变量所占用的字节长度不同的问题,可能会导致在存储时,发生在Windows系统内存中当前页的空间不足,无法继续存储剩余的ELF文件的情况。这时需要执行跨页处理,在跨页后,新的页空间继续存储剩余的ELF文件。跨页时还需要记录跨页后的新页空间地址,方便查找时,可以从当前页找到跨页后的新页地址,从而找到存储的整个ELF文件。
步骤S103,依据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址。
符号表中记载的符号包括了ELF文件中所用到的函数名和/或全局变量名。这些函数名对应的文件内容为函数体,全局变量名对应的文件内容为全局变量。
在步骤S101中解析ELF文件的头文件的内容后,可以得到ELF文件起始地址、文件内容的多个偏移地址。根据文件起始地址和偏移地址可以到ELF文件中的函数体的地址信息。如ELF文件起始地址为10,某函数A的偏移地址为200,可以得到A的函数体的地址信息为210。该地址信息210为A的函数体在ELF文件中的地址。步骤S102将整个ELF文件都加载到Windows系统的内存中后,还需要获取对应的Windows系统中A的函数体对应的内存地址。
获取Windows系统中函数A的函数体对应的内存地址包括:在Windows系统中加载整个ELF文件时,还会记录ELF文件在Windows系统内存中的实际起始地址;根据该实际起始地址和函数A的偏移地址,根据Windows系统内存对齐规则和跨页规则,计算函数A的函数体实际对应的内存地址。
步骤S104,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。
执行步骤S103后,将获取的符号对应的文件内容在Windows系统中的内存地址与符号进行链接,使得当该符号被调用或使用时,可以根据链接执行符号对应的文件内容。
根据本发明提供的在Windows系统中加载Linux系统ELF文件的方法,解析ELF文件后,将整个ELF文件按照Windows系统内存存储规则加载到Windows系统的内存中。根据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。从而实现了将ELF文件直接加载至Windows系统内存中,使得ELF文件中的符号如函数,可以直接在Windows系统上运行,而不需要在Windows系统安装Andriod虚拟机。同时也极大的提升了运行速度,减少了硬盘空间和内存的占用。
图2示出了根据本发明另一个实施例的在Windows系统中加载Linux系统ELF文件的方法的流程图。如图2所示,在Windows系统中加载Linux系统ELF文件的方法具体包括如下步骤:
步骤S201,依据ELF文件的格式解析ELF文件。
步骤S202,按照Windows系统内存存储规则,将整个ELF文件加载到Windows系统的内存中。
以上步骤参照图1方法实施例中步骤S101-S102的描述,此处不再赘述。
步骤S203,获取符号表记载的符号的属性,依据符号的属性确定符号对应的文件内容为内部文件内容或外部文件内容。
符号表中记载的符号包括了ELF文件中所用到的函数名和/或全局变量名。其中,有些函数是ELF文件自己实现的函数,函数体在ELF文件中可以找到,即符号对应的文件内容为内部文件内容。有些函数是引用了其它ELF文件的函数,如函数B,通过#include调用函数B所在的ELF文件,进而实现对函数B的调用。函数B的函数体不在ELF文件中,即符号对应的文件内容为内部文件内容。还有些函数属于系统函数,这些函数即不在该ELF文件中,也不在其它ELF文件中,这些函数的函数体目前本申请将其设置在C运行时库中,这些函数对应的文件内容也是外部文件内容。
符号对应的文件内容为内部文件内容还是外部文件内容,可以从符号的属性中得知。符号的属性可以定义如函数为未定义引用,即符号对应的文件内容为外部文件内容。符号对应的文件内容为内部文件内容时,执行步骤S204。符号对应的文件内容为外部文件内容时,执行步骤S205。
步骤S204,若符号对应的文件内容为内部文件内容,则根据解析得到的ELF文件起始地址和文件内容的偏移地址进行计算,得到符号对应的文件内容在Windows系统中的内存地址。
符号对应的文件内容为内部文件内容时,解析ELF文件的头文件的内容获得ELF文件起始地址和文件内容的多个偏移地址,在Windows系统中加载整个ELF文件时记录ELF文件在Windows系统内存中的实际起始地址,根据Windows系统内存对齐规则和跨页规则,获取内部文件内容实际对应的内存地址。
步骤S205,若符号对应的文件内容为外部文件内容,则在ELF文件中查找该ELF文件所引用的其它ELF文件。
符号对应的文件内容为外部文件内容时,需要在该ELF文件中查找该ELF文件所引用的其它ELF文件。在该ELF文件中引用其它ELF文件可以有多种方式,如#include<其它ELF文件>,#include后的文件名,即引用的其它ELF文件。或者,在该ELF文件中调用dlopen()方法,dlopen的参数,即引用的其它ELF文件等等。通过这些引用方式,可以找到该ELF文件所引用的其它ELF文件。
步骤S206,判断符号对应的文件内容是否为其它ELF文件的文件内容。
符号对应的文件内容可以为其它ELF文件的文件内容,也可以为如系统函数。需要在其它ELF文件中查找是否存在符号对应的文件内容,进而判断符号对应的文件内容是否为其它ELF文件的文件内容。
若在其它ELF文件中查找到符号对应的文件内容,则执行步骤S207,否则,执行步骤S209。
步骤S207,判断出符号对应的文件内容为其它ELF文件的文件内容,但Windows系统的内存中没有加载该其它ELF文件,则将其它ELF文件进行加载。
步骤S202在Windows系统的内存中加载ELF文件时,会记录已经加载过的ELF文件的名称,将其存放在已加载ELF文件列表中。若判断出符号对应的文件内容为其它ELF文件的文件内容,在已加载ELF文件列表中查找该其它ELF文件,若没有找到该其它ELF文件,即Windows系统的内存中没有加载该其它ELF文件,先将其它ELF文件进行加载。在加载后,继续执行步骤S208。将其它ELF文件进行加载的步骤与将该ELF文件进行加载的步骤相同。
步骤S208,获取其它ELF文件的文件内容在Windows系统中的内存地址。
其它ELF文件在加载时,执行了和加载该ELF文件相同的步骤,解析其它ELF文件的头文件的内容获得其它ELF文件起始地址和文件内容的多个偏移地址,在Windows系统中加载整个其它ELF文件时记录其它ELF文件在Windows系统内存中的实际起始地址,根据Windows系统内存对齐规则和跨页规则,获取其它ELF文件的文件内容在Windows系统中的内存地址,并将符号和符号对应的文件内容在Windows系统中的内存地址进行链接。由于其它ELF文件已经加载了,可以直接获取其它ELF文件的文件内容在Windows系统中的内存地址。
此处需要注意,若其它ELF文件已经加载,可以不执行步骤S207中的将其它ELF文件进行加载的步骤,直接执行步骤S208。
步骤S209,从C运行时库中查询符号对应的文件内容,若查询到,则获取符号对应的文件内容在Windows系统中的内存地址。
若在其它ELF文件中都没有查找到符号对应的文件内容,则从C运行时库中查询符号对应的文件内容。C运行时库包括了Linux系统函数在Windows系统的重构函数、安卓系统函数在Windows系统的重构函数、二进制可执行文件转换为Windows系统可执行文件的转化函数、线程处理函数和/或信号处理函数等等。如libc.so,libandriod.so,libopengles.so,libegl.so,libopensl.so等等。
从C运行时库中查询到符号对应的文件内容后,获取符号对应的文件内容在Windows系统中的内存地址。获取的方式与获取其它ELF文件的文件内容在Windows系统中的内存地址一致。
步骤S210,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。
通过以上步骤获取到符号对应的文件内容在Windows系统中的内存地址后,将获取的符号对应的文件内容在Windows系统中的内存地址与符号进行链接,使得当该符号被调用或使用时,可以根据链接执行符号对应的文件内容。
步骤S211,依次执行ELF文件中初始化数组记载的函数,完成初始化。
对于ELF文件类型为可执行的对象文件的ELF文件,还需要对其进行初始化。初始化时,依次执行ELF文件中初始化数组(Init和/或PreInit)中记载的函数。其中Init为必须执行的初始化函数,PreInit为可选执行的初始化函数。
根据本发明提供的在Windows系统中加载Linux系统ELF文件的方法,解析ELF文件后,将整个ELF文件按照Windows系统内存存储规则加载到Windows系统的内存中。依据符号的属性确定符号对应的文件内容为内部文件内容或外部文件内容,对内部文件内容或外部文件内容分别进行处理,获取其对应的文件内容在Windows系统中的内存地址,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接,并依次执行ELF文件中初始化数组记载的函数,完成初始化。实现了ELF文件间引用时,符号对应的文件内容的加载、在Windows系统中的内存地址的获取及链接。同时,增加了C运行时库,对多个系统函数进行了重构,增加了线程处理、信号处理函数,保证了ELF文件在Windows系统上的正常运行,而不需要在Windows系统安装Andriod虚拟机。同时也极大的提升了运行速度,减少了硬盘空间和内存的占用。
图3示出了根据本发明一个实施例的在Windows系统中加载Linux系统ELF文件的装置的功能框图。如图3所示,在Windows系统中加载Linux系统ELF文件的装置具体包括如下模块:
解析模块310,适于依据ELF文件的格式解析ELF文件。
解析模块310解析ELF文件时需要对ELF文件的头文件的内容进行解析。头文件的内容包括了如ELF文件类型、ELF文件运行需要的体系结构、ELF文件版本、ELF文件起始地址、程序头表在ELF文件中的偏移地址、section头表在ELF文件中的偏移地址、头文件的大小、程序头表中一个入口的大小(所有的入口都是同样的大小)、程序头表中入口的个数、section头的大小、section头的入口的个数等等。这些内容在后续的步骤中计算地址时需要使用。
加载模块320,适于按照Windows系统内存存储规则,将整个ELF文件加载到Windows系统的内存中。
Windows系统和Linux系统都有各自的存储规则,ELF文件为Linux系统格式的文件,加载模块320将ELF文件加载到Windows系统的内存,需要按照Windows系统内存存储规则,进行对齐和/或跨页的处理。
加载模块320按照Windows系统内存对齐规则进行加载,若Windows系统内存中当前字节的空间不足,不能继续存储ELF文件,加载模块320执行对齐处理,执行时需按照Windows系统内存从高地址向低地址分配空闲空间的方式,存储剩余的ELF文件的字节。加载模块320按照Windows系统内存存储规则进行加载时,由于ELF文件本身为Linux系统文件,其存储的方式与Windows系统存储方式有所不同,如Linux系统变量所占用的字节长度与Windows系统变量所占用的字节长度不同的问题,可能会导致在存储时,Windows系统的字节不能与ELF文件中的字节实现恰好的1对1或1对几的存储,出现Windows系统的字节中在存储1个或几个ELF文件中的字节后,留有一定的空间,而留下的空间不足以继续存储1个ELF文件中的字节的情况。如Windows系统的字节还有16k的存储空间,ELF文件中有3个6k的字节需要存储时,加载模块320在加载时,Windows系统的字节仅能存储2个ELF文件中的6k的字节,剩余的ELF文件中的6k的字节需要在另一个Windows系统的字节中进行存储。加载模块320在对齐时还需要记录后一Windows系统的字节的地址,方便在查找时,可以从迅速的找到Windows系统中不同字节存储的整个ELF文件。
Windows系统内存是以页为单位进行管理。每页中存储了相同字节长度的内容。由于ELF文件本身为Linux文件,其存储的方式与Windows系统存储方式有所不同,如Linux系统变量所占用的字节长度与Windows系统变量所占用的字节长度不同的问题,可能会导致加载模块320在加载时,发生在Windows系统内存中当前页的空间不足,无法继续存储剩余的ELF文件的情况。加载模块320执行跨页处理,在跨页后,新的页空间继续存储剩余的ELF文件。加载模块320在跨页时还需要记录跨页后的新页空间地址,方便查找时,可以从当前页找到跨页后的新页地址,从而找到存储的整个ELF文件。
获取模块330,适于依据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址。
符号表中记载的符号包括了ELF文件中所用到的函数名和/或全局变量名。这些函数名对应的文件内容为函数体,全局变量名对应的文件内容为全局变量。
在解析模块310解析ELF文件的头文件的内容后,可以得到ELF文件起始地址、文件内容的多个偏移地址。获取模块330通过文件起始地址和偏移地址可以到ELF文件中的函数体的地址信息。如ELF文件起始地址为10,某函数A的偏移地址为200,可以得到A的函数体的地址信息为210。该地址信息210为A的函数体在ELF文件中的地址。加载模块320将整个ELF文件都加载到Windows系统的内存中后,获取模块330还需要获取对应的Windows系统中A的函数体对应的内存地址。
获取模块330获取Windows系统中A的函数体对应的内存地址包括:加载模块320在Windows系统中加载整个ELF文件时,记录ELF文件在Windows系统内存中的实际起始地址。获取模块330根据该实际起始地址和函数A的偏移地址,根据Windows系统内存对齐规则和跨页规则,获取A的函数体实际对应的内存地址。
进一步,获取模块330还包括了属性确定模块331。属性确定模块331适于获取符号表记载的符号的属性,依据符号的属性确定符号对应的文件内容为内部文件内容或外部文件内容。
符号表中记载的符号包括了ELF文件中所用到的函数名和/或全局变量名。其中,有些函数是ELF文件自己实现的函数,函数体在ELF文件中可以找到,即符号对应的文件内容为内部文件内容。有些函数是引用了其它ELF文件的函数,如函数B,通过#include调用函数B所在的ELF文件,进而实现对函数B的调用。函数B的函数体不在ELF文件中,即符号对应的文件内容为内部文件内容。还有些函数属于系统函数,这些函数即不在该ELF文件中,也不在其它ELF文件中,这些函数的函数体目前本申请将其设置在C运行时库中,这些函数对应的文件内容也是外部文件内容。
符号对应的文件内容为内部文件内容还是外部文件内容,属性确定模块331可以根据符号的属性确定。属性确定模块331获取符号的属性后,根据符号的属性可以确定如某函数为未定义引用,即符号对应的文件内容为外部文件内容。
根据符号对应的文件内容不同,分别执行不同的模块去获取符号对应的文件内容在Windows系统中的内存地址。符号对应的文件内容为内部文件内容时,执行内部文件地址获取模块332。符号对应的文件内容为外部文件内容时,执行外部文件查找模块333。
内部文件地址获取模块332,适于若符号对应的文件内容为内部文件内容时,通过解析模块310解析ELF文件的头文件的内容获得的ELF文件起始地址和文件内容的多个偏移地址,加载模块320在Windows系统中加载整个ELF文件时记录的ELF文件在Windows系统内存中的实际起始地址,根据Windows系统内存对齐规则和跨页规则,进而获取内部文件内容实际对应的内存地址。
外部文件查找模块333,适于若符号对应的文件内容为外部文件内容,则在ELF文件中查找该ELF文件所引用的其它ELF文件。
符号对应的文件内容为外部文件内容时,外部文件查找模块333在该ELF中查找该ELF文件所引用的其它ELF文件。在该ELF文件中引用其它ELF文件可以有多种方式,如#include<其它ELF文件>,#include后的文件名,即引用的其它ELF文件。或者,在该ELF文件中调用dlopen()方法,dlopen的参数,即引用的其它ELF文件等等。外部文件查找模块333通过查找这些引用方式,找到该ELF文件所引用的其它ELF文件。
在外部文件查找模块333找到该ELF文件所引用的其它ELF文件后,继续执行判断模块334。
判断模块334适于判断符号对应的文件内容是否为其它ELF文件的文件内容。符号对应的文件内容可以为其它ELF文件的文件内容,也可以为如系统函数。判断模块334在其它ELF文件中查找是否存在符号对应的文件内容,进而判断符号对应的文件内容是否为其它ELF文件的文件内容。若判断模块334在其它ELF文件中查找到符号对应的文件内容,即符号对应的文件内容为其它ELF文件的文件内容,则执行外部文件地址获取模块335,否则,执行C运行时库地址获取模块336。
外部文件地址获取模块335,适于获取其它ELF文件的文件内容在Windows系统中的内存地址。
在执行外部文件地址获取模块335获取其它ELF文件的文件内容在Windows系统中的内存地址之前,还需要执行外部文件加载判断模块350。外部文件加载判断模块350适于若判断出符号对应的文件内容为其它ELF文件的文件内容,进一步还判断在Windows系统的内存中是否已加载该其它ELF文件,若未加载,则将该其它ELF文件进行加载。
执行加载模块320在Windows系统的内存中加载ELF文件时,加载模块320还会记录已经加载过的ELF文件的名称,将其存放在已加载ELF文件列表中。若判断模块334判断出符号对应的文件内容为其它ELF文件的文件内容,外部文件加载判断模块350在已加载ELF文件列表中查找该其它ELF文件,若没有找到该其它ELF文件,即Windows系统的内存中没有加载该其它ELF文件,先将其它ELF文件进行加载。在加载后,继续执行外部文件地址获取模块335。
其它ELF文件在加载时,也是通过执行解析模块310、加载模块320、获取模块330和链接模块340完成加载。外部文件地址获取模块335可以从已加载完成的其它ELF文件中直接获取其它ELF文件的文件内容在Windows系统中的内存地址。
C运行时库地址获取模块336,适于若符号对应的文件内容为外部文件内容,则从C运行时库中查询符号对应的文件内容,若查询到,则获取符号对应的文件内容在Windows系统中的内存地址。
判断模块334在其它ELF文件中都没有查找到符号对应的文件内容,则执行C运行时库地址获取模块336从C运行时库中查询符号对应的文件内容。C运行时库包括了Linux系统函数在Windows系统的重构函数、安卓系统函数在Windows系统的重构函数、二进制可执行文件转换为Windows系统可执行文件的转化函数、线程处理函数和/或信号处理函数等等。如libc.so,libandriod.so,libopengles.so,libegl.so,libopensl.so等等。
C运行时库地址获取模块336从C运行时库中查询到符号对应的文件内容后,获取符号对应的文件内容在Windows系统中的内存地址。获取的方式与获取其它ELF文件的文件内容在Windows系统中的内存地址一致。
以上获取模块330所包括的各模块根据实际情况进行选择,本实施例不限定必须包括所有模块。
链接模块340,适于将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。
执行获取模块330后,链接模块340将获取的符号对应的文件内容在Windows系统中的内存地址与符号进行链接,使得当该符号被调用或使用时,可以根据链接执行符号对应的文件内容。
根据本发明提供的在Windows系统中加载Linux系统ELF文件的装置,解析ELF文件后,将整个ELF文件按照Windows系统内存存储规则加载到Windows系统的内存中。根据ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接。从而实现了将ELF文件直接加载至Windows系统内存中,使得ELF文件中的符号如函数,可以直接在Windows系统上运行,而不需要在Windows系统安装Andriod虚拟机。进一步还可实现ELF文件间引用时,符号对应的文件内容的加载、在Windows系统中的内存地址的获取及链接。同时,增加了C运行时库,对多个系统函数进行了重构,增加了线程处理、信号处理函数,保证了ELF文件在Windows系统上的正常运行同时也极大的提升了运行速度,减少了硬盘空间和内存的占用。
图4示出了根据本发明另一个实施例的在Windows系统中加载Linux系统ELF文件的装置的功能框图。与图3相比,在Windows系统中加载Linux系统ELF文件的装置还包括了执行模块360。
执行模块360,适于在链接模块340将符号与符号对应的文件内容在Windows系统中的内存地址进行链接之后,依次执行ELF文件中初始化数组记载的函数,完成初始化。
对于ELF文件类型为可执行的对象文件的ELF文件,执行模块360对其进行了初始化。执行模块360在初始化时,依次执行ELF文件中初始化数组(Init和/或PreInit)中记载的函数。其中Init为必须执行的初始化函数,PreInit为可选执行的初始化函数。
根据本发明提供的在Windows系统中加载Linux系统ELF文件的装置,解析ELF文件后,将整个ELF文件按照Windows系统内存存储规则加载到Windows系统的内存中。依据符号的属性确定符号对应的文件内容为内部文件内容或外部文件内容,对内部文件内容或外部文件内容分别进行处理,获取其对应的文件内容在Windows系统中的内存地址,将符号与符号对应的文件内容在Windows系统中的内存地址进行链接后,还依次执行ELF文件中初始化数组记载的函数,完成初始化。使得ELF文件的初始化工作也在Windows系统中完成,从而更好的使用ELF文件,实现在Windows系统的Linux文件的正常运行,避免了Windows系统安装Andriod虚拟机,极大的提升了运行速度,减少了硬盘空间和内存的占用。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的在Windows系统中加载Linux系统ELF文件的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1、一种在Windows系统中加载Linux系统ELF文件的方法,其包括:
依据ELF文件的格式解析所述ELF文件;
按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统的内存中;
依据所述ELF文件的解析结果,获取所述ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;
将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接。
A2、根据A1所述的方法,其中,所述符号包括函数名和/或全局变量名;所述函数名对应的文件内容为函数体,所述全局变量名对应的文件内容为全局变量。
A3、根据A1或A2所述的方法,其中,在所述将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接之后,所述方法还包括:依次执行所述ELF文件中初始化数组记载的函数,完成初始化。
A4、根据A1-A3任一项所述的方法,其中,所述依据ELF文件的格式解析所述ELF文件进一步包括:
解析所述ELF文件的头文件的内容;所述头文件的内容包括ELF文件类型、ELF文件起始地址和文件内容的偏移地址。
A5、根据A1-A4任一项所述的方法,其中,所述按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统的内存中进一步包括:
按照Windows系统内存页管理规则,若Windows系统内存中当前页空间不足,执行跨页处理,存储剩余ELF文件。
A6、根据A1所述的方法,其中,所述按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统内存中进一步包括:
按照Windows系统内存对齐规则,若Windows系统内存中当前字节空间不足,不能继续存储ELF文件,执行对齐处理,存储剩余ELF文件。
A7、根据A1-A6任一项所述的方法,其中,在所述获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址之前,所述方法还包括:
获取所述符号表记载的符号的属性;
依据所述符号的属性确定所述符号对应的文件内容为内部文件内容或外部文件内容。
A8、根据A7所述的方法,其中,所述依据所述ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址进一步包括:
若所述符号对应的文件内容为内部文件内容,则根据解析得到的ELF文件起始地址和文件内容的偏移地址进行计算,得到所述符号对应的文件内容在Windows系统中的内存地址。
A9、根据A7所述的方法,其中,所述依据所述ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址进一步包括:
若所述符号对应的文件内容为外部文件内容,则在所述ELF文件中查找该ELF文件所引用的其它ELF文件;
判断所述符号对应的文件内容是否为所述其它ELF文件的文件内容;
若是,则获取所述其它ELF文件的文件内容在Windows系统中的内存地址。
A10、根据A9所述的方法,其中,所述方法还包括:
若判断出所述符号对应的文件内容为其它ELF文件的文件内容,但Windows系统的内存中没有加载该其它ELF文件,则将所述其它ELF文件进行加载。
A11、根据A7所述的方法,其中,所述依据所述ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址进一步包括:
若所述符号对应的文件内容为外部文件内容,则从C运行时库中查询所述符号对应的文件内容,若查询到,则获取所述符号对应的文件内容在Windows系统中的内存地址。
A12、根据A11所述的方法,其中,所述C运行时库包括:
Linux系统函数在Windows系统的重构函数;
和/或,安卓系统函数在Windows系统的重构函数;
和/或,二进制可执行文件转换为Windows系统可执行文件的转化函数、线程处理函数和/或信号处理函数。
本发明还公开了:B13、一种在Windows系统中加载Linux系统ELF文件的装置,其包括:
解析模块,适于依据ELF文件的格式解析所述ELF文件;
加载模块,适于按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统的内存中;
获取模块,适于依据所述ELF文件的解析结果,获取所述ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;
链接模块,适于将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接。
B14、根据B13所述的装置,其中,所述符号包括函数名和/或全局变量名;所述函数名对应的文件内容为函数体,所述全局变量名对应的文件内容为全局变量。
B15、根据B13或B14所述的装置,其中,所述装置还包括:执行模块,适于在链接模块将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接之后,依次执行所述ELF文件中初始化数组记载的函数,完成初始化。
B16、根据B13-B15任一项所述的装置,其中,所述解析模块进一步适于:解析所述ELF文件的头文件的内容;所述头文件的内容包括ELF文件类型、ELF文件起始地址和文件内容的偏移地址。
B17、根据B13-B16任一项所述的装置,其中,所述加载模块进一步适于:
按照Windows系统内存页管理规则,若Windows系统内存中当前页空间不足,执行跨页处理,存储剩余ELF文件。
B18、根据B13-B16任一项所述的装置,其中,所述加载模块进一步适于:
按照Windows系统内存对齐规则,若Windows系统内存中当前字节空间不足,不能继续存储ELF文件,执行对齐处理,存储剩余ELF文件。
B19、根据B13-B18任一项所述的装置,其中,所述获取模块在获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址之前,所述装置还包括:
属性确定模块,适于获取所述符号表记载的符号的属性,依据所述符号的属性确定所述符号对应的文件内容为内部文件内容或外部文件内容。
B20、根据B19所述的装置,其中,所述获取模块进一步包括:
内部文件地址获取模块,适于若所述符号对应的文件内容为内部文件内容,则根据解析得到的ELF文件起始地址和文件内容的偏移地址进行计算,得到所述符号对应的文件内容在Windows系统中的内存地址。
B21、根据B19所述的装置,其中,所述获取模块进一步包括:
外部文件查找模块,适于若所述符号对应的文件内容为外部文件内容,则在所述ELF文件中查找该ELF文件所引用的其它ELF文件;
判断模块,适于判断所述符号对应的文件内容是否为所述其它ELF文件的文件内容;
外部文件地址获取模块,适于获取所述其它ELF文件的文件内容在Windows系统中的内存地址。
B22、根据B21所述的装置,其中,所述装置还包括:
外部文件加载判断模块,适于若判断出所述符号对应的文件内容为其它ELF文件的文件内容,判断在Windows系统的内存中是否已加载该其它ELF文件,若未加载,则将所述其它ELF文件进行加载。
B23、根据B19所述的装置,其中,所述获取模块进一步包括:
C运行时库地址获取模块,适于若所述符号对应的文件内容为外部文件内容,则从C运行时库中查询所述符号对应的文件内容,若查询到,则获取所述符号对应的文件内容在Windows系统中的内存地址。
B24、根据B23所述的装置,其中,所述C运行时库包括:
Linux系统函数在Windows系统的重构函数;
和/或,安卓系统函数在Windows系统的重构函数;
和/或,二进制可执行文件转换为Windows系统可执行文件的转化函数、线程处理函数和/或信号处理函数。

Claims (10)

1.一种在Windows系统中加载Linux系统ELF文件的方法,其包括:
依据ELF文件的格式解析所述ELF文件;
按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统的内存中;
依据所述ELF文件的解析结果,获取所述ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;
将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接。
2.根据权利要求1所述的方法,其中,所述符号包括函数名和/或全局变量名;所述函数名对应的文件内容为函数体,所述全局变量名对应的文件内容为全局变量。
3.根据权利要求1或2所述的方法,其中,在所述将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接之后,所述方法还包括:依次执行所述ELF文件中初始化数组记载的函数,完成初始化。
4.根据权利要求1-3任一项所述的方法,其中,所述依据ELF文件的格式解析所述ELF文件进一步包括:
解析所述ELF文件的头文件的内容;所述头文件的内容包括ELF文件类型、ELF文件起始地址和文件内容的偏移地址。
5.根据权利要求1-4任一项所述的方法,其中,所述按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统的内存中进一步包括:
按照Windows系统内存页管理规则,若Windows系统内存中当前页空间不足,执行跨页处理,存储剩余ELF文件。
6.根据权利要求1所述的方法,其中,所述按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统内存中进一步包括:
按照Windows系统内存对齐规则,若Windows系统内存中当前字节空间不足,不能继续存储ELF文件,执行对齐处理,存储剩余ELF文件。
7.根据权利要求1-6任一项所述的方法,其中,在所述获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址之前,所述方法还包括:
获取所述符号表记载的符号的属性;
依据所述符号的属性确定所述符号对应的文件内容为内部文件内容或外部文件内容。
8.根据权利要求7所述的方法,其中,所述依据所述ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址进一步包括:
若所述符号对应的文件内容为内部文件内容,则根据解析得到的ELF文件起始地址和文件内容的偏移地址进行计算,得到所述符号对应的文件内容在Windows系统中的内存地址。
9.根据权利要求7所述的方法,其中,所述依据所述ELF文件的解析结果,获取ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址进一步包括:
若所述符号对应的文件内容为外部文件内容,则在所述ELF文件中查找该ELF文件所引用的其它ELF文件;
判断所述符号对应的文件内容是否为所述其它ELF文件的文件内容;
若是,则获取所述其它ELF文件的文件内容在Windows系统中的内存地址。
10.一种在Windows系统中加载Linux系统ELF文件的装置,其包括:
解析模块,适于依据ELF文件的格式解析所述ELF文件;
加载模块,适于按照Windows系统内存存储规则,将整个所述ELF文件加载到Windows系统的内存中;
获取模块,适于依据所述ELF文件的解析结果,获取所述ELF文件的符号表记载的符号对应的文件内容在Windows系统中的内存地址;
链接模块,适于将所述符号与所述符号对应的文件内容在Windows系统中的内存地址进行链接。
CN201610799064.1A 2016-08-31 2016-08-31 在Windows系统中加载Linux系统ELF文件的方法及装置 Pending CN106354536A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201610799064.1A CN106354536A (zh) 2016-08-31 2016-08-31 在Windows系统中加载Linux系统ELF文件的方法及装置
US15/741,163 US20190087208A1 (en) 2016-08-31 2016-10-31 Method and apparatus for loading elf file of linux system in windows system
PCT/CN2016/104061 WO2018040270A1 (zh) 2016-08-31 2016-10-31 在Windows系统中加载Linux系统ELF文件的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610799064.1A CN106354536A (zh) 2016-08-31 2016-08-31 在Windows系统中加载Linux系统ELF文件的方法及装置

Publications (1)

Publication Number Publication Date
CN106354536A true CN106354536A (zh) 2017-01-25

Family

ID=57859308

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610799064.1A Pending CN106354536A (zh) 2016-08-31 2016-08-31 在Windows系统中加载Linux系统ELF文件的方法及装置

Country Status (3)

Country Link
US (1) US20190087208A1 (zh)
CN (1) CN106354536A (zh)
WO (1) WO2018040270A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107291513A (zh) * 2017-07-04 2017-10-24 武汉斗鱼网络科技有限公司 文件加载方法及装置、计算机可读存储介质
CN108196905A (zh) * 2017-12-28 2018-06-22 北京翼辉信息技术有限公司 一种基于dsp的动态加载方法
CN110162306A (zh) * 2018-02-14 2019-08-23 阿里巴巴集团控股有限公司 系统的提前编译方法和装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489164B (zh) * 2019-07-09 2022-12-27 北京字节跳动网络技术有限公司 一种隐藏断言信息的获取方法、装置、介质和设备
CN112559064A (zh) * 2019-09-24 2021-03-26 中兴通讯股份有限公司 一种启动动态链接程序的方法和装置
CN113672238B (zh) * 2021-09-07 2024-03-12 广东九联开鸿科技发展有限公司 基于实时操作系统模块化管理的运行方法、装置及设备
CN117149499B (zh) * 2023-10-30 2024-01-19 北京麟卓信息科技有限公司 一种基于动态符号表的内核模块内存占用优化方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6446254B1 (en) * 1999-03-30 2002-09-03 International Business Machines Corporation Packaging memory image files
US20060288019A1 (en) * 2005-05-27 2006-12-21 Niclas Bauer Flexible data file format
CN101470619A (zh) * 2007-12-29 2009-07-01 安凯(广州)软件技术有限公司 一种基于微核操作系统的应用程序动态加载方法
CN101944043A (zh) * 2010-09-27 2011-01-12 公安部第三研究所 Windows平台下Linux虚拟机磁盘文件访问方法
CN103218428A (zh) * 2013-04-09 2013-07-24 深圳市九洲电器有限公司 一种动态链接方法及系统
CN105224370A (zh) * 2015-10-21 2016-01-06 安一恒通(北京)科技有限公司 一种加载elf文件的方法和装置
CN105468661A (zh) * 2014-12-31 2016-04-06 武汉安天信息技术有限责任公司 一种查找elf文件中符号信息的方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103218498B (zh) * 2013-04-27 2016-02-10 清华大学 磁控溅射源移动磁体最优运动规律的计算方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6446254B1 (en) * 1999-03-30 2002-09-03 International Business Machines Corporation Packaging memory image files
US20060288019A1 (en) * 2005-05-27 2006-12-21 Niclas Bauer Flexible data file format
CN101470619A (zh) * 2007-12-29 2009-07-01 安凯(广州)软件技术有限公司 一种基于微核操作系统的应用程序动态加载方法
CN101944043A (zh) * 2010-09-27 2011-01-12 公安部第三研究所 Windows平台下Linux虚拟机磁盘文件访问方法
CN103218428A (zh) * 2013-04-09 2013-07-24 深圳市九洲电器有限公司 一种动态链接方法及系统
CN105468661A (zh) * 2014-12-31 2016-04-06 武汉安天信息技术有限责任公司 一种查找elf文件中符号信息的方法及系统
CN105224370A (zh) * 2015-10-21 2016-01-06 安一恒通(北京)科技有限公司 一种加载elf文件的方法和装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
YOSHIFUMI UEMURA等: "《Direct Execution of Linux Binary on Windows for Grid RPC Workers》", 《2007 IEEE INTERNATIONAL PARALLEL AND DISTRIBUTED PROCESSING SYMPOSIUM》 *
刘显: "《Linux ELF二进制文件在Windows环境下直接运行策略的研究与实现》", 《万方学位论文全文数据库》 *
曲波: "《Qutenix加载运行ELF文件研究与实现》", 《南京晓庄学院学报》 *
王婧怡: "《微内核系统直接加载ELF文件机制的设计与研究》", 《信息技术》 *
钟柏松: "《Wineserver机制在Linux内核中实现的研究》", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107291513A (zh) * 2017-07-04 2017-10-24 武汉斗鱼网络科技有限公司 文件加载方法及装置、计算机可读存储介质
CN107291513B (zh) * 2017-07-04 2020-07-31 武汉斗鱼网络科技有限公司 文件加载方法及装置、计算机可读存储介质
CN108196905A (zh) * 2017-12-28 2018-06-22 北京翼辉信息技术有限公司 一种基于dsp的动态加载方法
CN110162306A (zh) * 2018-02-14 2019-08-23 阿里巴巴集团控股有限公司 系统的提前编译方法和装置
CN110162306B (zh) * 2018-02-14 2023-06-23 斑马智行网络(香港)有限公司 系统的提前编译方法和装置

Also Published As

Publication number Publication date
US20190087208A1 (en) 2019-03-21
WO2018040270A1 (zh) 2018-03-08

Similar Documents

Publication Publication Date Title
CN106354536A (zh) 在Windows系统中加载Linux系统ELF文件的方法及装置
CN110990020A (zh) 一种软件编译方法、装置及电子设备和存储介质
CN109660366B (zh) 混合云计费方法及系统
CN106407207B (zh) 一种实时新增数据更新方法和装置
CN108052643B (zh) 基于LSM Tree结构的数据存储方法、装置及存储引擎
CN106648638B (zh) 一种基于python的R.java文件的优化方法及优化系统
CN106648755B (zh) 一种在安卓art环境中动态加载dex的方法及装置
CN108197306A (zh) Sql语句处理方法、装置、计算机设备和存储介质
CN106503008B (zh) 文件存储方法和装置及文件查询方法和装置
JP2022545422A (ja) スマートコントラクトの並行実行の方法、装置、機器、及び媒体
CN116680015B (zh) 函数调用方法、装置、电子设备及可读存储介质
CN106227769B (zh) 数据存储方法及装置
CN104899077A (zh) 基于容器技术的进程信息获取方法及装置
CN110990001A (zh) Ivr流程执行方法及装置
CN111984892A (zh) 页面访问方法、装置、设备及存储介质
CN113961919A (zh) 恶意软件检测方法和装置
CN103713945B (zh) 游戏的识别方法和装置
CN108733758B (zh) 酒店静态数据推送方法、装置、电子设备及可读存储介质
CN107977577A (zh) 访存指令访问检测方法及装置
CN103942131A (zh) 监控底层接口是否变化的方法及装置
CN104376126A (zh) 在Linux驱动中绑定内核符号的方法及装置
CN116700629A (zh) 数据处理方法和装置
CN106354624B (zh) 一种自动化测试方法和装置
CN107203387A (zh) 目标数据库访问方法与系统
CN104750743A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170125