CN107450960A - 一种对可执行elf文件重新链接和加载的方法 - Google Patents
一种对可执行elf文件重新链接和加载的方法 Download PDFInfo
- Publication number
- CN107450960A CN107450960A CN201710839986.5A CN201710839986A CN107450960A CN 107450960 A CN107450960 A CN 107450960A CN 201710839986 A CN201710839986 A CN 201710839986A CN 107450960 A CN107450960 A CN 107450960A
- Authority
- CN
- China
- Prior art keywords
- segment
- file
- elf
- data
- section
- 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
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/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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种对可执行ELF文件重新链接和加载的方法,应用在嵌入式芯片领域,特别涉及在嵌入式芯片测试中对可执行ELF文件的传输加载场景。通过提取ELF文件的必要信息,加以解析和封装,按照文件头、段信息表、段数据的存储分布进行重新链接,有效解决可执行ELF文件对内存的占用,减少文件传输的数据量,通过对文件数据校验保证文件的有效性和完整性;在加载重链接的目标文件时,采用文件头、段信息表的二级索引方式,快速找到对应的段数据,同时对ELF文件使用内存进行有效监控,防止非法使用,结构简单清晰,内存占用较少,索引简单,加载速度提升,对嵌入式芯片测试以及整个嵌入式系统加载可执行ELF的稳定性和性能都有比较大帮助。
Description
技术领域
本发明涉及嵌入式芯片领域,特别涉及在嵌入式芯片测试中对可执行ELF文件的传输加载场景。
背景技术
ELF (Executable and Linkable Format, 可执行和可链接格式)作为嵌入式系统中基本的文件格式,被广泛地使用着。按照ELF文件标准,使用ELF格式的文件分为可重定位文件,可执行文件、目标共享文件、核心转储文件。 ELF文件用于定义不同文件类型的对象文件内容和格式,可移植性很强。
随着IC(Integrated Circuit)制造技术的飞速发展,芯片设计规模日益增大,产品集成度也越来越高,需要通过对芯片功能和性能进行测试来验证设计的正确性。
在芯片流片(像流水线一样通过一系列工艺步骤制造芯片)回来之后,为便于功能和性能测试以及问题跟踪分析,一般不会运行太复杂的操作系统,有的甚至不使用操作系统,直接在裸板上运行测试用例,此时测试用例被编译、链接成可执行的ELF文件,通过JTAG、串口、USB等方式烧录到芯片的存储介质中,由系统中对ELF文件进行加载运行。但是这种直接烧录和加载的方式会将一些不必要段信息也传输到内存中,增加了数据传输量,特别通过JTAG方式传输时,对速度影响明显, 同时还需要申请大量内存,对低内存的嵌入式设备来说影响也比较大,由于加载器无法判断传输数据的正确性,会导致测试运行失败,系统出现异常。
发明内容
本发明提出了一种对可执行ELF文件的重新链接和加载方法,能有效解决可执行ELF程序的对内存的占用,保证传输过程中文件数据的有效性和完整性,对程序使用内存进行有效监控,提升系统的稳定性,测试效率明显提高。
本发明要求处理的目标系统满足以下条件:(1)提供ELF文件的测试用例需要可以正常运行。(2)ELF文件传输前需要进行重链接。(3)需要使用新的加载器运行。
本发明采用技术方案是:通过提取ELF文件的必要信息,加以解析和封装,按照文件头、段信息表、段数据的存储分布进行重新链接,减少传输带宽和内存占用,在加载重链接的目标文件时,采用文件头、段信息表的二级索引方式,快速找到对应的段数据,同时对ELF文件使用内存进行有效监控,防止非法使用,结构简单清晰,内存占用较少,索引简单,加载速度提升,并且提升系统的稳定性和安全性。
在对可执行ELF文件重链接时,遍历文件中所有段,判断当前段是否存在于提取列表中,对于符合提取条件的段执行提取操作,将段的内容复制到重新链接的目标文件中,同时生成段的标识信息并将此信息存放在目标文件的指定位置(段信息表),遍历结束后,需要生成一个目标文件的头信息,包括遍历过程中提取的段数量,可执行ELF文件的入口地址、魔数、校验码等,将此信息放在文件的指定位置,这样对可执行ELF文件的重新链接的目标文件就生成了。在对目标文件进行加载时,首先获取目标文件的头信息,对文件执行校验操作,获取有效段的数量,根据段信息表的内容,判断段的内存地址是否合法有效,如果有效,将目标文件中段的数据复制到内存中的指定位置。所有有效段数据复制完成后,跳转到目标文件的入口地址执行目标文件。
本发明的有益效果是:(1)只使用在提取列表中支持的段信息,减少代码传输的数据量,而且减少目标文件对内存的占用,节省了嵌入式系统中本来就稀缺的内存。(2)对重链接的目标文件进行校验,保证文件的完整性和正确性,避免使用错误和损坏的文件,提高嵌入式系统的稳定性。(3)加载时检查加载段在内存中的位置信息,确认ELF文件使用的内存是否合理,在程序加载之前对可能出现的加载地址错误进行处理,避免对正常测试系统产生影响。(4)可扩展提取列表,通过段的名称提取,生成参数传递段,便于嵌入式系统与ELF程序进行交互。(5)加载时不需要解析符合表等信息,提升加载速度。
附图说明
图1:可执行ELF文件重新链接的流程。
图2:重新链接的目标文件加载流程。
图3:提取列表,包含了所有支持提取的段类型。
图4:经过重新链接后的目标文件的结构布局图。包括文件头,段表,段数据。
段表固定为15个段信息,这15个段信息是否有效是有文件头中的section_cnt决定的。段数据按照段表的顺序依次存放在段表的后面,相对于重新链接的目标文件的偏移是固定为0x20+0x20*15 =0x200 Byte。
图5:文件头pef_head_t的成员结构,位于文件的开始位置,固定长度为32 Byte,包括魔数、校验码、entry文件的入口地址,段的个数等。
图6:段信息pef_sec_t的成员结构,长度为32 Byte,包括段名(最大长度为16Byte)、段类型(必须属于图3中类型的一种)、段内存地址,段在文件内的偏移地址、段的数据长度等。
具体实施方式
本发明通过对可执行的ELF文件进行重新链接,根据提取列表将ELF中的段数据复制到链接的目标文件中,同时更新段信息表中段信息,所有的段信息提取完成后,更新文件头信息,校验链接数据,将文件头信息保存至新链接的目标文件中。在加载新链接的目标文件时,首先解析文件头,对整个文件进行校验,获取有效地段的数量,根据段的信息,将段的数据从链接目标文件的位置复制到指定的内存位置,有效段加载完成后,跳转到目标文件的入口运行。
对可执行ELF文件的重新链接如图1所示,首先加载ELF文件(S101),读取ELF文件头的文件类型,如果不是可执行ELF文件类型,则进行出错处理(S103),重新链接失败;如果是可执行ELF文件则创建文件头(固定长度为32 Byte)和段信息表(固定长度为32 Byte)(S104),并将其内容初始化为0,对文件中的所有段进行遍历,获取ELF的一个有效段(S105),进而解析出段的名字和类型,判断当前段的类型是否在提取列表中(S106),提取列表中支持如图3所示,包含代码段、数据段、BSS段(Block Started by Symbol,存放未初始化的全局变量和静态变量),初始化为0的BSS段,可扩展的参数传递段(定义为段名为param的段),如果段不在提取列表中则继续寻找下一个段,否则的话,提取当前段的数据(S107),获取ELF文件中段数据的存储位置,将其依次复制到重链接目标文件的段数据区域,同时更新段信息表(S108),主要更新当前段信息项,包括将段的名称,段数据区域的位置(相对于目标文件起始地址的偏移)更新段信息的file_offset成员中,同时将从ELF文件中段的加载地址更新到段信息的v_addr成员中,段的长度更新到段信息的sec_len成员中,所有段遍历完成后,需要对提取成功段的数据进行判断,是否大于0且小于15(S109),如果符合条件的话就更新文件头信息(S110),同时将从ELF头文件中获取的入口地址也更新至目标文件的entry成员中,同时对更新magic信息,对整个文件进行校验,将校验码更新到check_code中,这样整个重链接的目标文件就生成(S111)成功。
对重新链接目标文件的加载流程的具体实施方式如图2所示,获取链接目标文件头信息(S201),对目标文件进行校验(S202),如果校验失败,则进行出错处理,加载失败(S203),校验通过后,获取文件头信息中段的数量(S204),根据段数量依次遍历段表中的段信息(S205),此时需要判断段内存地址是否合法(S206),如果地址非法,则加载失败(S208),防止可执行程序对系统中内存进行越界访问,引起系统异常。接着需要将目标文件的段数据复制到内存中(S207),此时需要对初始化为0的BSS段进行处理,将其对应的一段内存执行清0操作,遍历结束后,需要对文件头的入口地址进行判断(S209),如果地址不在代码段中则进行出错处理,否则跳转到入口地址,对重新链接目标文件的加载成功(S210),目标文件开始运行。
Claims (5)
1.一种对可执行ELF文件重新链接和加载的方法,其特征在于该方法的实现步骤如下:步骤1、提取ELF文件的必要信息,加以解析和封装,按照文件头、段信息表、段数据的存储分布进行重新链接;步骤2、在加载重链接的目标文件时,对目标文件进行校验,对段使用内存进行监控,采用文件头、段信息表的二级索引方式,快速找到对应的段数据进行加载;步骤3、段数据加载完成后,跳转到重链接文件的入口地址。
2.根据权利要求1所述的方法,其特征在于:所述步骤1提取ELF文件的必要信息,加以解析和封装,具体为遍历可执行ELF的所有段,根据提取列表将符合条件的段数据复制到链接的目标文件中,同时将段的名称,段数据在文件中的位置和长度分别更新到当前段信息项的对应成员中,提取列表除了包括ELF中的代码段和数据段外,还包括自己扩展的一些参数段等。
3.根据权利要求1所述的方法,其特征在于:所述步骤1按照文件头、段信息表、段数据的存储分布进行重新链接,结合利要求2,将提取的有效段的数量更新至文件头的section_cnt成员中,文件头的固定长度为32 Byte, 段信息表由15个段信息组成,每个段信息长度为32 Byte,段信息是否有效由文件头的section_cnt成员决定,它表示了段信息表按顺序依次有效地的段的数量,段数据起始位置固定为0x200开始。
4.根据权利要求1所述的方法,其特征在于:所述步骤2描述采用文件头、段信息表的二级索引方式,快速找到对应的段数据进行加载具体为,文件头中包含了有效段数量,然后依次遍历段信息表,根据段信息的文件偏移地址、长度、内存地址等成员,将段数据的内容复制到段信息指定内存地址的位置。
5.根据权利要求1所述的方法,其特征在于:所述步骤3描述具体解释为,从文件头中重新链接目标文件的入口地址,判断其是否在代码段中,如果在则跳转到入口地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710839986.5A CN107450960A (zh) | 2017-09-18 | 2017-09-18 | 一种对可执行elf文件重新链接和加载的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710839986.5A CN107450960A (zh) | 2017-09-18 | 2017-09-18 | 一种对可执行elf文件重新链接和加载的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107450960A true CN107450960A (zh) | 2017-12-08 |
Family
ID=60496718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710839986.5A Pending CN107450960A (zh) | 2017-09-18 | 2017-09-18 | 一种对可执行elf文件重新链接和加载的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107450960A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111274766A (zh) * | 2018-11-16 | 2020-06-12 | 福建天泉教育科技有限公司 | 一种文件转码结果的校验方法及终端 |
CN115408104A (zh) * | 2022-08-25 | 2022-11-29 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
CN1947094B (zh) * | 2004-04-26 | 2010-05-26 | 英特尔公司 | 用于有条件地缩小可执行模块的系统和方法 |
CN102136053A (zh) * | 2011-03-14 | 2011-07-27 | 中兴通讯股份有限公司 | 对可执行文件源代码保护的方法及装置 |
CN102662789A (zh) * | 2012-03-27 | 2012-09-12 | 株洲南车时代电气股份有限公司 | 一种elf文件添加crc校验的方法 |
CN104216890A (zh) * | 2013-05-30 | 2014-12-17 | 北京赛科世纪数码科技有限公司 | 一种elf文件的压缩方法及系统 |
US20150135313A1 (en) * | 2013-11-12 | 2015-05-14 | Kaprica Security, Inc. | Control Flow Integrity System and Method |
US20150161383A1 (en) * | 2008-05-08 | 2015-06-11 | Google Inc. | Method for Safely Executing an Untrusted Native Code Module on a Computing Device |
CN104751048A (zh) * | 2015-01-29 | 2015-07-01 | 中国科学院信息工程研究所 | 一种预链接机制下的动态链接库完整性度量方法 |
CN105224370A (zh) * | 2015-10-21 | 2016-01-06 | 安一恒通(北京)科技有限公司 | 一种加载elf文件的方法和装置 |
CN105426223A (zh) * | 2015-12-25 | 2016-03-23 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
CN105718287A (zh) * | 2016-01-20 | 2016-06-29 | 中南大学 | 一种智能终端的程序流式执行方法 |
-
2017
- 2017-09-18 CN CN201710839986.5A patent/CN107450960A/zh active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1947094B (zh) * | 2004-04-26 | 2010-05-26 | 英特尔公司 | 用于有条件地缩小可执行模块的系统和方法 |
US20150161383A1 (en) * | 2008-05-08 | 2015-06-11 | Google Inc. | Method for Safely Executing an Untrusted Native Code Module on a Computing Device |
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
CN102136053A (zh) * | 2011-03-14 | 2011-07-27 | 中兴通讯股份有限公司 | 对可执行文件源代码保护的方法及装置 |
CN102662789A (zh) * | 2012-03-27 | 2012-09-12 | 株洲南车时代电气股份有限公司 | 一种elf文件添加crc校验的方法 |
CN104216890A (zh) * | 2013-05-30 | 2014-12-17 | 北京赛科世纪数码科技有限公司 | 一种elf文件的压缩方法及系统 |
US20150135313A1 (en) * | 2013-11-12 | 2015-05-14 | Kaprica Security, Inc. | Control Flow Integrity System and Method |
CN104751048A (zh) * | 2015-01-29 | 2015-07-01 | 中国科学院信息工程研究所 | 一种预链接机制下的动态链接库完整性度量方法 |
CN105224370A (zh) * | 2015-10-21 | 2016-01-06 | 安一恒通(北京)科技有限公司 | 一种加载elf文件的方法和装置 |
CN105426223A (zh) * | 2015-12-25 | 2016-03-23 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
CN105718287A (zh) * | 2016-01-20 | 2016-06-29 | 中南大学 | 一种智能终端的程序流式执行方法 |
Non-Patent Citations (6)
Title |
---|
LYYYUNA: "ELF文件介绍", 《HTTPS://WWW.CNBLOGS.COM/LYYYUNA/ARCHIVE/2013/05/09/4123904.HTML》 * |
LYYYUNA: "ELF文件重定位", 《HTTPS://WWW.CNBLOGS.COM/LYYYUNA/ARCHIVE/2013/05/09/4123903.HTML》 * |
WUST.ZJF: "Linux中ELF格式文件介绍", 《HTTPS://WWW.CNBLOGS.COM/ZJFDBZ/ARCHIVE/2013/03/16/2963383.HTML》 * |
ZZFX: "Linux ELF格式分析", 《HTTPS://WWW.CNBLOGS.COM/FENG9EXE/P/6899351.HTML》 * |
深海的小鱼儿: "可执行文件(ELF)格式的理解", 《HTTPS://WWW.CNBLOGS.COM/XMPHOENIX/ARCHIVE/2011/10/23/2221879.HTML》 * |
陈赜 主编: "《ARM嵌入式技术原理与应用》", 31 January 2011 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111274766A (zh) * | 2018-11-16 | 2020-06-12 | 福建天泉教育科技有限公司 | 一种文件转码结果的校验方法及终端 |
CN111274766B (zh) * | 2018-11-16 | 2023-11-03 | 福建天泉教育科技有限公司 | 一种文件转码结果的校验方法及终端 |
CN115408104A (zh) * | 2022-08-25 | 2022-11-29 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
CN115408104B (zh) * | 2022-08-25 | 2023-08-11 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107885656A (zh) | 产品算法自动化测试方法及应用服务器 | |
CN107992356A (zh) | 区块链事务区块处理方法、电子装置及可读存储介质 | |
CN107797923B (zh) | 代码覆盖率分析方法及应用服务器 | |
CN109474578A (zh) | 报文消息校验方法、装置、计算机设备和存储介质 | |
CN104239616A (zh) | 集成电路的设计方法及硬件木马检测方法 | |
CN109409918A (zh) | 基于用户行为的羊毛党识别方法、装置、设备及存储介质 | |
CN110288406A (zh) | 营销活动管理平台、开发方法、执行方法、设备及介质 | |
CN107342952A (zh) | 业务链路选择控制方法以及设备 | |
CN113032792B (zh) | 系统业务漏洞检测方法、系统、设备及存储介质 | |
CN109688207A (zh) | 日志传输方法、装置及服务器 | |
CN107450960A (zh) | 一种对可执行elf文件重新链接和加载的方法 | |
CN107516547A (zh) | 内存硬错误的处理方法及装置 | |
CN102831021A (zh) | 插件拦截或清理的方法及装置 | |
CN111414374B (zh) | 一种区块链交易并发处理方法、装置及设备 | |
CN106709341A (zh) | 一种针对文件包的病毒处理方法及装置 | |
CN109582907A (zh) | 网页资源完整性的校验方法、装置、设备及可读存储介质 | |
CN106027379A (zh) | 一种推送消息接收处理方法 | |
CN103473085A (zh) | 一种用于在移动终端上加载目标应用的方法与设备 | |
US8661293B2 (en) | Test architecture based on intelligent test sequence | |
CN102789417B (zh) | 一种移动智能终端上的定向符号执行程序检测系统及方法 | |
CN109901850A (zh) | 软件安装方法、装置、终端及计算机可读存储介质 | |
CN105679690B (zh) | 提高测试晶圆使用寿命的方法 | |
CN111681005A (zh) | 数据交互方法、装置和电子设备 | |
CN116055350B (zh) | 一种基于Json的数据通信质量检测方法 | |
CN110287436A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20171208 |
|
WD01 | Invention patent application deemed withdrawn after publication |