CN105426223A - 应用加载方法和装置 - Google Patents
应用加载方法和装置 Download PDFInfo
- Publication number
- CN105426223A CN105426223A CN201510994261.4A CN201510994261A CN105426223A CN 105426223 A CN105426223 A CN 105426223A CN 201510994261 A CN201510994261 A CN 201510994261A CN 105426223 A CN105426223 A CN 105426223A
- Authority
- CN
- China
- Prior art keywords
- data
- data segment
- reorientation
- address
- global variable
- 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
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/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- 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/54—Link editing before load time
-
- 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
- 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/44557—Code layout in executable memory
-
- 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/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/17—Embedded application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
- G06F2212/2022—Flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7211—Wear leveling
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了应用加载方法和装置。该方法的一具体实施方式包括:在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间;将预设数据段拷贝至内存,以及基于存储空间的起始地址对预设数据段进行重定位;将经重定位的预设数据段拷贝至存储空间。实现了在内存中对可执行文件的代码部分进行重定位,然后将重定位后的代码部分写回到可编程只读存储器中,从而仅需一次针对存储块的擦除操作即可完成代码部分的重定位,减少了应用的加载过程中的系统开销以及降低对可编程只读存储器的损耗。
Description
技术领域
本申请涉及计算机领域,具体涉及应用领域,尤其涉及应用加载方法和装置。
背景技术
在嵌入式系统中,在对应用进行加载时,通常采用的方式为:在闪存中存储可执行文件的二进制代码,并在闪存上直接运行指令。在应用加载过程中,需要对应用的汇编代码中的符号进行重定位,使得符号具有绝对地址,以对应用进行加载。
然而,当采用上述方式对应用进行加载时,每一次针对符号的重定位均会对应一次对该符号所在内存的整个存储块的擦除操作,进而极大地增加系统开销以及对增加闪存的损耗。
发明内容
本申请提供了应用加载方法和装置,用于解决上述背景技术部分存在的技术问题。
第一方面,本申请提供了应用加载方法,该方法包括:在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间,其中,预设数据段为应用被加载时,被加载在可编程只读存储器中执行的数据段;将预设数据段拷贝至内存,以及基于存储空间的起始地址对预设数据段进行重定位;将经重定位的预设数据段拷贝至存储空间,以对应用进行加载。
第二方面,本申请提供了应用加载装置,该装置包括:选取单元,配置用于在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间,其中,预设数据段为应用被加载时,被加载在可编程只读存储器中执行的数据段;重定位单元,配置用于将预设数据段拷贝至内存,以及基于存储空间的起始地址对预设数据段进行重定位;加载单元,配置用于将经重定位的预设数据段拷贝至存储空间,以对应用进行加载。
本申请提供的应用加载方法和装置,通过在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间;将预设数据段拷贝至内存,以及基于存储空间的起始地址对预设数据段进行重定位;将经重定位的预设数据段拷贝至存储空间。实现了在内存中对可执行文件的代码部分进行重定位,然后将重定位后的代码部分写回到可编程只读存储器中,从而仅需一次针对存储块的擦除操作即可完成代码部分的重定位,减少了应用的加载过程中的系统开销以及降低对可编程只读存储器的损耗。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2示出了根据本申请的应用加载方法的一个实施例的流程图;
图3示出了本实施例中的对应用进行加载的一个示例性原理图;
图4示出了本申请中的应用加载方法的一个示例性流程图;
图5示出了根据本申请的应用加载装置的一个实施例的结构示意图;
图6是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的应用加载方法或应用加载装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供传输链路的介质。网络104可以包括各种连接类型,例如有线、无线传输链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯应用,例如网络安全类应用、即时通信工具等。
终端设备101、102、103可以是具有显示屏并且支持网络通信的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(MovingPictureExpertsGroupAudioLayerIII,动态影像专家压缩标准音频层面3)、MP4(MovingPictureExpertsGroupAudioLayerIV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上的应用提供数据支持的服务器。服务器105可以接收到终端设备101、102、103发送的查询请求,并对查询请求进行处理。并将处理结果(应用的可执行文件的重定位信息)反馈给终端设备。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
请参考图2,其示出了根据本申请的应用加载方法的一个实施例的流程200。本实施例所提供的应用加载方法可以由图1中的终端设备101、102、103执行。该方法包括以下步骤:
步骤201,在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间。
在本实施例中,应用的可执行文件可以存储在可编程只读存储器中。可执行文件包含多个数据段,当应用加载时,即应用的可执行文件加载时,预设数据段为被加载在可编程只读存储器中执行的数据段。在本实施例中,可以在可编程只读存储器中选取用于存储预设数据段的存储空间,该存储空间用于存储经重定位后的预设数据段。
在本实施例的一些可选的实现方式中,可编程只读存储器为闪存存储器。在本实施例中,应用的可执行文件可以存储在闪存存储器中,可以预先在闪存存储器中选取用于存储重定位后的预设数据段的存储空间。
步骤202,将预设数据段拷贝至内存,以及基于存储空间的起始地址对预设数据段进行重定位。
在本实施例中,在应用加载时,可以首先将预设数据段拷贝至内存,然后,可以基于在可编程只读存储器中预先选取的存储空间的起始地址对该预设数据段进行重定位,即确定预设数据段中的符号的加载地址。
下面首先以汇编指令jmpexp和exp:push为例,说明重定位的原理:汇编指令exp:push表示符号exp对应的地址上存储有入栈指令即push指令。汇编指令jmpexp的作用为跳转到符号exp对应的地址,执行该地址上的入栈指令。假设,符号exp在编译时的编译地址为1000h,在对汇编指令进行编译之后,则jmpexp被转换为jmp1000h。在应用加载时,由于汇编指令在编译时统一采用地址0作为起始地址进行编译,而在加载时则可能被加载在任意的位置运行,因此,需要对符号进行重定位即重新确定汇编指令中的符号对应的加载地址(也可称之为绝对地址),并且将汇编指令中的符号即exp符号对应的地址修改为确定出的加载地址,从而执行该指令。
在本实施例的一些可选的实现方式中,可执行文件为ELF文件,预设数据段包括:机器指令数据段、只读数据数据段;以及基于存储空间的起始地址对预设数据段进行重定位包括:在ELF文件的机器指令地址偏移数据段中查找机器指令数据段中的机器指令的操作数对应的地址偏移量;根据起始地址和地址偏移量,计算操作数对应的加载地址,以对机器指令数据段进行重定位;在ELF文件的只读数据地址偏移数据段中查找只读数据数据段中的只读数据对应的地址偏移量;根据起始地址和地址偏移量,计算只读数据对应的加载地址,以对只读数据数据段进行重定位。
在本实施例中,为支持应用在嵌入式设备(例如物联网设备)上的加载,可执行文件可以为可重定位的文件格式ELF格式的文件(可以简称为ELF文件)。首先说明ELF文件的组成:在ELF文件中,采用数据段(section)描述文件的内容。ELF文件中包含以下数据段:机器指令数据段(.text),机器指令数据段中的数据为已编译应用的机器代码。只读数据数据段(.rodata),只读数据数据段中的数据为只读数据。已初始化全局变量数据段(.data),已初始化全局变量数据段中的数据为已初始化的全局变量。未初始化全局变量数据段(.bss)。当应用的可执行文件为ELF文件时,在对应用进行加载时,即对应用的ELF文件进行加载时,ELF文件中的机器指令数据段(.text)和只读数据数据段(.rodata)可以加载到闪存中,ELF文件中的已初始化全局变量数据段(.data)和未初始化全局变量数据段(.bss)可以加载在内存中。
在本实施例中,可以将机器指令数据段(.text)和只读数据数据段(.rodata)统称为代码部分(code)。可以将已初始化全局变量数据段(.data)和未初始化全局变量数据段(.bss)统称为数据部分(data)。在对ELF文件进行加载时,需要对代码部分(code)和数据部分(data)进行重定位,即计算ELF文件中的代码部分(code)和数据部分(data)中的符号的加载地址。在对代码部分(code)和数据部分(data)的重定位过程中,可以利用ELF文件中的机器指令地址偏移数据段(.rel.text),只读数据地址偏移数据段(.rel.rodata),已初始化全局变量地址偏移数据段(.rel.data),对代码部分和数据部分进行重定位。
在本实施例的一些可选的实现方式中,还包括:将ELF文件中的未初始化全局变量数据段和已初始化全局变量数据段拷贝至内存;将未初始化全局变量数据段对应的存储空间中的存储值设置为0;从ELF文件的已初始化全局变量地址偏移数据段中查找出已初始化全局变量数据段中的已初始化全局变量对应的地址偏移量;根据已初始化全局变量在内存中的起始地址以及地址偏移量,计算已初始化全局变量的加载地址,以对已初始化全局变量数据段进行重定位。
下面以可编程只读存储器为闪存为例,分别说明对ELF文件中的代码部分(code)和数据部分(data)的重定位的过程。在本实施例中,可以采用以下方式对ELF文件中的代码部分(code)进行重定位:首先预先在闪存中为代码部分(code)即机器指令数据段(.text)和只读数据数据段(.rodata)分配代码部分(code)占用的存储空间的大小的存储空间,并记录该存储空间的起始地址。然后,在内存中分配与上述存储空间的大小相等的存储空间,将机器指令数据段(.text)和只读数据数据段(.rodata)拷贝到内存中。在内存中对机器指令数据段(.text)进行重定位时,可以从机器指令地址偏移数据段(.rel.text)中查找机器指令数据段中的机器指令的操作数即指令中引用的符号对应的地址偏移量,根据上述起始地址和地址偏移量,计算操作数对应的加载地址,从而计算出指令中的操作数的加载地址即指令中引用的符号对应的加载地址。在计算出机器指令中的所有符号对应的加载地址之后,完成对机器指令数据段进行重定位。在内存中对只读数据数据段(.rodata)进行重定位时,可以从只读数据地址偏移数据段(.rel.rodata)中查找只读数据数据段的只读数据对应的地址偏移量;根据起始地址和地址偏移量,计算只读数据对应的加载地址,从而对只读数据数据段进行重定位。
在本实施例中,可以采用以下方式对ELF文件中的数据部分(data)进行重定位:在内存中分配已初始化全局变量数据段(.data)和未初始化全局变量数据段(.bss)这两个数据段占据的存储空间的大小的存储空间,并将已初始化全局变量数据段(.data)和未初始化全局变量数据段(.bss)拷贝到分配的内存中。对未初始化全局变量数据段(.bss)占据的内存中的存储空间中的数值全部初始化为0。然后,可以从已初始化全局变量地址偏移数据段(.rel.data)中查找已初始化全局变量数据段中的已初始化全局变量对应的地址偏移量;根据已初始化全局变量数据段在内存中的起始地址以及地址偏移量,计算已初始化全局变量的加载地址,从而对已初始化全局变量数据段(.data)进行重定位。
步骤203,将经重定位的预设数据段拷贝至存储空间,以对应用进行加载。
在本实施例中,在内存中完成对预设数据段(例如机器指令数据段、只读数据数据段)的重定位之后,可以将重定位后的预设数据段拷贝回预先在可编程只读存储器(例如闪存)中选取出的用于存储重定位后的预设数据段的存储空间中,从而使得重定位后的预设数据段在可编程只读存储器上加载,同时,可以对内存中的已初始化全局变量数据段(.data)和未初始化全局变量数据段(.bss)进行重定位之后进行加载,从而完成对应用的加载。
在本实施例的一些可选的实现方式中,在将经重定位的预设数据段拷贝至存储空间之后,还包括:在可编程只读存储器中存储存储空间的起始地址,以使得再次对应用进行加载时,利用起始地址查找出已存储在可编程只读存储器中的经重定位的预设数据段并对预设数据段进行加载。
在本实例中,还可以同时记录重定位过程中ELF文件中的各个数据段在ELF文件中的偏移、大小,然后,可以将各个数据段在ELF文件中的偏移、大小与重定位后的ELF的代码部分(code)在闪存中的起始地址以及ELF文件的名称一起以文件形式存储在闪存中,可以将该文件称之为重定位信息文件。从而,当再次对应用进行加载时,通过应用的ELF文件的名称,查找出重定位信息文件。然后,可以基于重定位信息文件中记录的数据部分(data)即已初始化全局变量数据段(.data)和未初始化全局变量数据段(.bss)在ELF文件中的偏移和大小,直接读取ELF文件中数据部分(data)中的数据,对数据部分(data)进行重定位后加载。
请参考图3,其示出了本实施例中的对应用进行加载的一个示例性原理图。在图3中,示出了存储在闪存中的ELF文件中的机器指令数据段(.text)、机器指令地址偏移数据段(.rel.text)、只读数据数据段(.rodata)、已初始化全局变量数据段(.data)、已初始化全局变量地址偏移数据段(.rel.data)、未初始化全局变量数据段(.bss)。机器指令数据段(.text)、只读数据数据段(.rodata)、已初始化全局变量数据段(.data)、未初始化全局变量数据段(.bss)首先被拷贝至内存,同时,在闪存中选取用于存储重定位后的机器指令数据段(.text)、只读数据数据段(.rodata)的存储空间。该存储空间不同于当前存储预设数据段的闪存中的存储空间,该存储空间的作用为存储经重定位后的预设数据段。然后,在内存中,基于该存储空间的起始地址,结合机器指令地址偏移数据段(.rel.text)和只读数据地址偏移数据段(.rel.rodata)对机器指令数据段(.text)、只读数据数据段(.rodata)进行重定位,最后,经过一次拷贝写回到闪存中选取的用于存储重定位后的机器指令数据段(.text)、只读数据数据段(.rodata)的存储空间中。同时,对未初始化全局变量数据段.bss初始化为0,并且,结合已初始化全局变量地址偏移数据段(.rel.data)对已初始化全局变量数据段(.data)进行重定位。
请参考图4,其示出了本申请中的应用加载方法的一个示例性流程图。包含以下步骤:
步骤401:系统启动加载应用。
步骤402:在闪存上预分配代码部分占据的存储空间的大小的存储空间。
步骤403:在内存中为代码部分分配同样大小的内存。
步骤404:在内存中,利用重定位段和代码段在闪存中的预分配的存储空间的起始地址对代码部分进行重定位。重定位段包括:机器指令地址偏移数据段、只读数据地址偏移数据段。
步骤405:将重定位后的代码部分拷贝回闪存中的预分配的存储空间中。
步骤406:在内存中为数据部分分配所需大小的内存。
步骤407:将重定位信息、应用名称、重定位代码段在闪存上的地址,存储在闪存中,命名为重定位信息文件。重定位信息包括:在闪存中的预分配的存储空间的起始地址
下面以可编程只读存储器为闪存为例,说明本实施例中的应用的加载方式与现有技术的区别:在现有技术中,对应用的代码部分(code)重定位的过程中,因每一次对符号的重定位均需一次对符号所在的闪存中的存储块的擦除操作,从而造成系统开销增加以及flash损耗增加。而在本实例中,应用的代码部分(code)仅需在首次加载时加载一次。当再次对应用进行加载时,例如,系统重启时,由于在闪存中已经预先存储了首次加载时,存储在闪存中的经重定位后的ELF文件的代码部分(code)的起始地址,因此,根据该起始地址即可直接运行经重定位后的ELF文件的代码部分(code),完成ELF的代码部分(code)的加载,无需再次对ELF文件的代码部分(code)进行重定位。同时,仅需对ELF文件的数据部分(data)进行重定位后进行加载,即可完成对应用的加载,从而,减少了应用的加载过程中对闪存的损耗以及提升应用的加载速度。并且,由于可以根据重定位信息文件中记录的数据部分(data)在ELF文件中的偏移和大小直接读取ELF文件中数据部分(data)中的数据,而无需重新获取辅助重定位信息,进一步提升了应用的加载速度。
请参考图5,其示出了根据本申请的应用加载装置的一个实施例的结构示意图。装置500包括:选取单元501,重定位单元502,加载单元503。选取单元501配置用于在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间,其中,预设数据段为应用被加载时,被加载在可编程只读存储器中执行的数据段;重定位单元502配置用于将预设数据段拷贝至内存,以及基于存储空间的起始地址对预设数据段进行重定位;加载单元503配置用于将经重定位的预设数据段拷贝至存储空间,以对应用进行加载。
在本实施例中,选取单元501可以在可编程只读存储器中选取用于存储预设数据段的存储空间,该存储空间的地址不同于当前预设数据段所处的可编程只读存储器中的存储空间的地址,该存储空间的作用为存储经重定位后的预设数据段。
在本实施例中,重定位单元502可以将存储在可编程只读存储器中的预设数据段拷贝至内存,然后,可以基于在可编程只读存储器中预先选取的存储空间的起始地址对该预设数据段进行重定位,即确定预设数据段中的指令中的符号的加载地址以及预设数据段中的数据的加载地址。
在本实施例中,加载单元503可以将重定位后的预设数据段拷贝回预先在可编程只读存储器中选取出的用于存储重定位后的预设数据段的存储空间中,从而使得重定位后的预设数据段在可编程只读存储器上加载,同时,可以对内存中的已初始化全局变量数据段和未初始化全局变量数据段进行重定位之后进行加载,从而完成对应用的加载。
在本实施例的一些可选的实现方式中,可编程只读存储器为闪存存储器。
在本实施例的一些可选的实现方式中,重定位单元502包括:第一查找子单元(未示出),配置用于当可执行文件为ELF文件,预设数据段包括:机器指令数据段、只读数据数据段时,在ELF文件的机器指令地址偏移数据段中查找机器指令数据段中的机器指令的操作数对应的地址偏移量;第一计算子单元(未示出),配置用于根据起始地址和地址偏移量,计算操作数对应的加载地址,以对机器指令数据段进行重定位;第二查找子单元(未示出),配置用于在ELF文件的只读数据地址偏移数据段中查找只读数据数据段中的只读数据对应的地址偏移量;第二计算子单元(未示出),配置用于根据起始地址和地址偏移量,计算只读数据对应的加载地址,以对只读数据数据段进行重定位。
在本实施例的一些可选的实现方式中,装置500还包括:拷贝单元(未示出),配置用于将ELF文件中的未初始化全局变量数据段和已初始化全局变量数据段拷贝至内存;设置单元(未示出),配置用于将未初始化全局变量数据段对应的存储空间中的存储值设置为0;偏移量查找单元(未示出),配置用于从ELF文件的已初始化全局变量地址偏移数据段中查找出已初始化全局变量数据段中的已初始化全局变量对应的地址偏移量;加载地址计算单元(未示出),配置用于根据已初始化全局变量数据段在内存中的起始地址以及地址偏移量,计算已初始化全局变量的加载地址,以对已初始化全局变量数据段进行重定位。
在本实施例的一些可选的实现方式中,装置500还包括:存储单元(未示出),配置用于在将经重定位的预设数据段拷贝至存储空间之后,在可编程只读存储器中保存存储空间的起始地址,以使得再次对应用进行加载时,利用起始地址查找出已存储在可编程只读存储器中的经重定位的预设数据段并对预设数据段进行加载。
图6示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM603中,还存储有系统600操作所需的各种程序和数据。CPU601、ROM602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间,其中,预设数据段为应用被加载时,被加载在所述可编程只读存储器中执行的数据段;将所述预设数据段拷贝至内存,以及基于所述存储空间的起始地址对所述预设数据段进行重定位;将经重定位的所述预设数据段拷贝至所述存储空间,以对应用进行加载。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种应用加载方法,其特征在于,所述方法包括:
在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间,其中,预设数据段为应用被加载时,被加载在所述可编程只读存储器中执行的数据段;
将所述预设数据段拷贝至内存,以及基于所述存储空间的起始地址对所述预设数据段进行重定位;
将经重定位的所述预设数据段拷贝至所述存储空间,以对应用进行加载。
2.根据权利要求1所述的方法,其特征在于,所述可编程只读存储器为闪存存储器。
3.根据权利要求1-2之一所述的方法,其特征在于,所述可执行文件为ELF文件,所述预设数据段包括:机器指令数据段、只读数据数据段;以及
基于所述存储空间的起始地址对所述预设数据段进行重定位包括:
在所述ELF文件的机器指令地址偏移数据段中查找机器指令数据段中的机器指令的操作数对应的地址偏移量;
根据所述起始地址和所述地址偏移量,计算所述操作数对应的加载地址,以对机器指令数据段进行重定位;
在所述ELF文件的只读数据地址偏移数据段中查找只读数据数据段中的只读数据对应的地址偏移量;
根据所述起始地址和所述地址偏移量,计算所述只读数据对应的加载地址,以对只读数据数据段进行重定位。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
将所述ELF文件中的未初始化全局变量数据段和已初始化全局变量数据段拷贝至内存;
将未初始化全局变量数据段对应的存储空间中的存储值设置为0;
从所述ELF文件的已初始化全局变量地址偏移数据段中查找出已初始化全局变量数据段中的已初始化全局变量对应的地址偏移量;
根据已初始化全局变量数据段在内存中的起始地址以及所述地址偏移量,计算已初始化全局变量的加载地址,以对已初始化全局变量数据段进行重定位。
5.根据权利要求4所述的方法,其特征在于,在将经重定位的所述预设数据段拷贝至所述存储空间之后,所述方法还包括:
在可编程只读存储器中存储所述存储空间的起始地址,以使得再次对应用进行加载时,利用所述起始地址查找出已存储在可编程只读存储器中的经重定位的预设数据段并对预设数据段进行加载。
6.一种应用加载装置,其特征在于,所述装置包括:
选取单元,配置用于在可编程只读存储器中选取用于存储应用的可执行文件中的预设数据段的存储空间,其中,预设数据段为应用被加载时,被加载在所述可编程只读存储器中执行的数据段;
重定位单元,配置用于将所述预设数据段拷贝至内存,以及基于所述存储空间的起始地址对所述预设数据段进行重定位;
加载单元,配置用于将经重定位的所述预设数据段拷贝至所述存储空间,以对应用进行加载。
7.根据权利要求6所述的装置,其特征在于,所述可编程只读存储器为闪存存储器。
8.根据权利要求6-7之一所述的装置,其特征在于,所述重定位单元包括:
第一查找子单元,配置用于当所述可执行文件为ELF文件,所述预设数据段包括:机器指令数据段、只读数据数据段时,在所述ELF文件的机器指令地址偏移数据段中查找机器指令数据段中的机器指令的操作数对应的地址偏移量;
第一计算子单元,配置用于根据所述起始地址和所述地址偏移量,计算所述操作数对应的加载地址,以对机器指令数据段进行重定位;
第二查找子单元,配置用于在所述ELF文件的只读数据地址偏移数据段中查找只读数据数据段中的只读数据对应的地址偏移量;
第二计算子单元,配置用于根据所述起始地址和所述地址偏移量,计算所述只读数据对应的加载地址,以对只读数据数据段进行重定位。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
拷贝单元,配置用于将所述ELF文件中的未初始化全局变量数据段和已初始化全局变量数据段拷贝至内存;
设置单元,配置用于将未初始化全局变量数据段对应的存储空间中的存储值设置为0;
偏移量查找单元,配置用于从所述ELF文件的已初始化全局变量地址偏移数据段中查找出已初始化全局变量数据段中的已初始化全局变量对应的地址偏移量;
加载地址计算单元,配置用于根据已初始化全局变量数据段在内存中的起始地址以及所述地址偏移量,计算已初始化全局变量的加载地址,以对已初始化全局变量数据段进行重定位。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
存储单元,配置用于在将经重定位的所述预设数据段拷贝至所述存储空间之后,在可编程只读存储器中存储所述存储空间的起始地址,以使得再次对应用进行加载时,利用所述起始地址查找出已存储在可编程只读存储器中的经重定位的预设数据段并对预设数据段进行加载。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510994261.4A CN105426223B (zh) | 2015-12-25 | 2015-12-25 | 应用加载方法和装置 |
EP16877228.3A EP3267308B1 (en) | 2015-12-25 | 2016-06-17 | Application loading method and device |
US15/564,412 US11086638B2 (en) | 2015-12-25 | 2016-06-17 | Method and apparatus for loading application |
PCT/CN2016/086217 WO2017107415A1 (zh) | 2015-12-25 | 2016-06-17 | 应用加载方法和装置 |
KR1020177027992A KR101955145B1 (ko) | 2015-12-25 | 2016-06-17 | 애플리케이션 로딩 방법 및 장치 |
JP2017552148A JP6506412B2 (ja) | 2015-12-25 | 2016-06-17 | アプリケーションロード方法及び装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510994261.4A CN105426223B (zh) | 2015-12-25 | 2015-12-25 | 应用加载方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426223A true CN105426223A (zh) | 2016-03-23 |
CN105426223B CN105426223B (zh) | 2019-01-04 |
Family
ID=55504451
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510994261.4A Active CN105426223B (zh) | 2015-12-25 | 2015-12-25 | 应用加载方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11086638B2 (zh) |
EP (1) | EP3267308B1 (zh) |
JP (1) | JP6506412B2 (zh) |
KR (1) | KR101955145B1 (zh) |
CN (1) | CN105426223B (zh) |
WO (1) | WO2017107415A1 (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598674A (zh) * | 2016-12-16 | 2017-04-26 | 中南大学 | 一种基于可重定位elf文件的软件快速加载方法 |
WO2017107415A1 (zh) * | 2015-12-25 | 2017-06-29 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
CN107450960A (zh) * | 2017-09-18 | 2017-12-08 | 珠海亿智电子科技有限公司 | 一种对可执行elf文件重新链接和加载的方法 |
CN108241516A (zh) * | 2018-02-09 | 2018-07-03 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
CN108874468A (zh) * | 2018-06-20 | 2018-11-23 | 深圳市腾讯网络信息技术有限公司 | 应用程序的加载方法、装置、计算机设备及存储介质 |
CN109901891A (zh) * | 2019-03-19 | 2019-06-18 | 北京智游网安科技有限公司 | 一种elf程序里添加数据的方法、存储介质及智能终端 |
CN110765027A (zh) * | 2019-12-27 | 2020-02-07 | 中国人民解放军国防科技大学 | 一种pe文件地址定位系统 |
CN113032737A (zh) * | 2021-03-15 | 2021-06-25 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
CN113821458A (zh) * | 2021-09-18 | 2021-12-21 | 日立楼宇技术(广州)有限公司 | 一种数据操作方法、装置、计算机设备和存储介质 |
CN113849245A (zh) * | 2021-09-23 | 2021-12-28 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
CN117435257A (zh) * | 2023-12-18 | 2024-01-23 | 美智纵横科技有限责任公司 | 系统加载方法及装置、存储介质、计算机程序产品和芯片 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101277265A (zh) * | 2008-05-07 | 2008-10-01 | 浙江大学 | 一种无线传感网络中加速加载elf文件的方法 |
CN101470619A (zh) * | 2007-12-29 | 2009-07-01 | 安凯(广州)软件技术有限公司 | 一种基于微核操作系统的应用程序动态加载方法 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5379398A (en) * | 1992-04-20 | 1995-01-03 | International Business Machines Corporation | Method and system for concurrent access during backup copying of data |
US5581768A (en) * | 1995-02-27 | 1996-12-03 | Intel Corporation | Method and apparatus for executing applications in place from write once/seldom memories |
JPH103385A (ja) * | 1996-06-18 | 1998-01-06 | Dainippon Printing Co Ltd | Icカード及びアプリケーション・プログラム導入方法 |
US5923878A (en) * | 1996-11-13 | 1999-07-13 | Sun Microsystems, Inc. | System, method and apparatus of directly executing an architecture-independent binary program |
JP3976106B2 (ja) * | 1998-09-09 | 2007-09-12 | 株式会社日立製作所 | アプリケーション登録端末システムおよび登録方法 |
US6505297B1 (en) * | 1998-09-09 | 2003-01-07 | Hitachi, Ltd. | IC card terminal device and installation of application program into IC card terminal device |
TWI240864B (en) * | 2001-06-13 | 2005-10-01 | Hitachi Ltd | Memory device |
KR100518584B1 (ko) * | 2003-07-12 | 2005-10-04 | 삼성전자주식회사 | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 |
US7415703B2 (en) * | 2003-09-25 | 2008-08-19 | International Business Machines Corporation | Loading software on a plurality of processors |
JP2005284963A (ja) * | 2004-03-30 | 2005-10-13 | Toshiba Corp | プログラムローディング装置およびプログラムローディング方法 |
JP2006048431A (ja) * | 2004-08-05 | 2006-02-16 | Matsushita Electric Ind Co Ltd | 動的リンクライブラリ処理装置 |
US7987158B2 (en) * | 2005-02-09 | 2011-07-26 | International Business Machines Corporation | Method, system and article of manufacture for metadata replication and restoration |
US20060277541A1 (en) * | 2005-06-07 | 2006-12-07 | Sony Computer Entertainment America Inc. | Relocatable component file format |
CN101484878B (zh) * | 2006-07-18 | 2012-11-28 | 英特尔公司 | 为基于efi的固件中的预efi初始化模块使用全局变量的方法 |
CN100555222C (zh) | 2007-02-15 | 2009-10-28 | 凌阳科技股份有限公司 | 应用程序可重定位加载的方法及地址重定位装置 |
US8082385B2 (en) * | 2008-05-02 | 2011-12-20 | Sony Corporation | Systematic memory shift for pre-segmented memory |
CN101661397B (zh) * | 2008-08-29 | 2012-09-12 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
CN101697131B (zh) * | 2009-11-04 | 2013-07-03 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
CN101706725B (zh) * | 2009-11-20 | 2014-03-19 | 中兴通讯股份有限公司 | 一种可重定位程序的加载及调试方法及系统 |
CN103377131A (zh) * | 2012-04-13 | 2013-10-30 | 索尼公司 | 数据处理装置和方法 |
US20150332043A1 (en) * | 2014-05-15 | 2015-11-19 | Auckland Uniservices Limited | Application analysis system for electronic devices |
US9974492B1 (en) * | 2015-06-05 | 2018-05-22 | Life365, Inc. | Health monitoring and communications device |
TWI588742B (zh) * | 2015-07-27 | 2017-06-21 | 晨星半導體股份有限公司 | 應用程式的程式碼載入方法及應用其方法的電腦系統 |
CN105426223B (zh) | 2015-12-25 | 2019-01-04 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
-
2015
- 2015-12-25 CN CN201510994261.4A patent/CN105426223B/zh active Active
-
2016
- 2016-06-17 KR KR1020177027992A patent/KR101955145B1/ko active IP Right Grant
- 2016-06-17 WO PCT/CN2016/086217 patent/WO2017107415A1/zh active Application Filing
- 2016-06-17 US US15/564,412 patent/US11086638B2/en active Active
- 2016-06-17 EP EP16877228.3A patent/EP3267308B1/en active Active
- 2016-06-17 JP JP2017552148A patent/JP6506412B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101470619A (zh) * | 2007-12-29 | 2009-07-01 | 安凯(广州)软件技术有限公司 | 一种基于微核操作系统的应用程序动态加载方法 |
CN101277265A (zh) * | 2008-05-07 | 2008-10-01 | 浙江大学 | 一种无线传感网络中加速加载elf文件的方法 |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017107415A1 (zh) * | 2015-12-25 | 2017-06-29 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
US11086638B2 (en) | 2015-12-25 | 2021-08-10 | Baidu Online Network Technology (Beijing) Co., Ltd. | Method and apparatus for loading application |
CN106598674A (zh) * | 2016-12-16 | 2017-04-26 | 中南大学 | 一种基于可重定位elf文件的软件快速加载方法 |
CN107450960A (zh) * | 2017-09-18 | 2017-12-08 | 珠海亿智电子科技有限公司 | 一种对可执行elf文件重新链接和加载的方法 |
CN108241516B (zh) * | 2018-02-09 | 2021-06-18 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
CN108241516A (zh) * | 2018-02-09 | 2018-07-03 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
CN108874468A (zh) * | 2018-06-20 | 2018-11-23 | 深圳市腾讯网络信息技术有限公司 | 应用程序的加载方法、装置、计算机设备及存储介质 |
CN108874468B (zh) * | 2018-06-20 | 2021-03-26 | 深圳市腾讯网络信息技术有限公司 | 应用程序的加载方法、装置、计算机设备及存储介质 |
CN109901891A (zh) * | 2019-03-19 | 2019-06-18 | 北京智游网安科技有限公司 | 一种elf程序里添加数据的方法、存储介质及智能终端 |
CN109901891B (zh) * | 2019-03-19 | 2022-06-14 | 北京智游网安科技有限公司 | 一种elf程序里添加数据的方法、存储介质及智能终端 |
CN110765027A (zh) * | 2019-12-27 | 2020-02-07 | 中国人民解放军国防科技大学 | 一种pe文件地址定位系统 |
CN113032737A (zh) * | 2021-03-15 | 2021-06-25 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
CN113032737B (zh) * | 2021-03-15 | 2021-11-30 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
CN113821458A (zh) * | 2021-09-18 | 2021-12-21 | 日立楼宇技术(广州)有限公司 | 一种数据操作方法、装置、计算机设备和存储介质 |
CN113821458B (zh) * | 2021-09-18 | 2023-09-05 | 日立楼宇技术(广州)有限公司 | 一种数据操作方法、装置、计算机设备和存储介质 |
CN113849245A (zh) * | 2021-09-23 | 2021-12-28 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
CN113849245B (zh) * | 2021-09-23 | 2023-09-12 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
CN117435257A (zh) * | 2023-12-18 | 2024-01-23 | 美智纵横科技有限责任公司 | 系统加载方法及装置、存储介质、计算机程序产品和芯片 |
CN117435257B (zh) * | 2023-12-18 | 2024-02-27 | 美智纵横科技有限责任公司 | 系统加载方法及装置、存储介质、计算机程序产品和芯片 |
Also Published As
Publication number | Publication date |
---|---|
KR20170123337A (ko) | 2017-11-07 |
KR101955145B1 (ko) | 2019-03-06 |
US20180329725A1 (en) | 2018-11-15 |
US11086638B2 (en) | 2021-08-10 |
EP3267308A4 (en) | 2018-07-25 |
EP3267308A1 (en) | 2018-01-10 |
JP2018511132A (ja) | 2018-04-19 |
EP3267308B1 (en) | 2022-07-27 |
JP6506412B2 (ja) | 2019-04-24 |
WO2017107415A1 (zh) | 2017-06-29 |
CN105426223B (zh) | 2019-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426223A (zh) | 应用加载方法和装置 | |
CN105550345A (zh) | 文件操作方法和装置 | |
CN103473067B (zh) | 嵌入式Linux分区与数据还原方法、系统及系统开发方法 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN106796522A (zh) | 用于更新源代码文件的系统和方法 | |
CN102637184A (zh) | 用于定制网页的方法和系统 | |
US20070011674A1 (en) | Computer system and method for selectively installing one operating system among a plurality of operating systems | |
CN109739600B (zh) | 数据处理方法、介质、装置和计算设备 | |
CN105988875B (zh) | 一种运行进程的方法及装置 | |
CN105488125A (zh) | 页面访问方法和装置 | |
CN105279399A (zh) | 应用防破解方法和装置 | |
CN104636165A (zh) | 移动设备启动方法及装置 | |
CN106055375A (zh) | 应用程序安装方法及装置 | |
CN104205780A (zh) | 一种存储数据的方法和装置 | |
CN103218428A (zh) | 一种动态链接方法及系统 | |
CN113849124A (zh) | 一种磁盘阵列扩容方法及装置 | |
CN114942863A (zh) | 一种级联快照处理方法、装置、设备及存储介质 | |
CN105117274A (zh) | 虚拟机迁移方法和装置 | |
CN101464986A (zh) | 一种创建广告位的方法、系统及装置 | |
CN105159673A (zh) | 一种设置控件样式的方法和装置 | |
CN103379145A (zh) | 信息处理的方法、设备和系统 | |
CN104615941A (zh) | Android用户分区的快速加密方法、装置和终端设备 | |
CN104156209A (zh) | 跨平台应用界面建模方法及装置 | |
KR101556831B1 (ko) | 애플리케이션 개발을 위한 퍼미션 입력 방법 및 안드로이드 애플리케이션을 제작하는 방법을 실행시키기 위한 프로그램이 기록한 컴퓨터로 읽을 수 있는 기록 매체 | |
CN101770508A (zh) | 移动通信终端中的数据访问方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |