CN108196905A - 一种基于dsp的动态加载方法 - Google Patents
一种基于dsp的动态加载方法 Download PDFInfo
- Publication number
- CN108196905A CN108196905A CN201711458538.7A CN201711458538A CN108196905A CN 108196905 A CN108196905 A CN 108196905A CN 201711458538 A CN201711458538 A CN 201711458538A CN 108196905 A CN108196905 A CN 108196905A
- Authority
- CN
- China
- Prior art keywords
- elf
- address
- symbol
- file
- addr
- 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/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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于DSP的动态加载方法,包括ELF文件预处理、ELF文件读取与解析、符号导出、符号重定位和运行模块,其中,ELF文件预处理包括:ELF预处理、在汇编文件中查找符号地址和计算出某个地址对应指令在ELF文件中的位置三个流程。本发明基于CCS编译器实现DSP动态加载的方法解决了B14切换问题;提高可重定位代码执行效率,用于CCS编译器以及GCC编译器所编译的可重定位代码。
Description
技术领域
本发明涉及计算机技术,特别是涉及一种基于DSP的动态加载方法。
背景技术
动态加载(英语:Dynamic Loading)是一种实现应用程序与操作系统分离的方法,它能使操作系统可以在运行时加载应用程序或动态库(或者其他二进制对象)到内存中,检索库中函数和变量的地址,执行这些函数或访问这些变量,并能将库从内存中卸载。
CCS是TI公司提供的高效的C编译器和集成开发环境。针对DSP处理器,CCS编译的程序执行效率高。GCC也可以支持DSP处理器,但程序的执行效率很低。
瑞典Enea的OSEck操作系统是目前较为流行的DSP商业实时操作系统,提供较为丰富的操作系统管理组件,并且使用CCS编译器,效率高。该系统中应用程序与操作系统绑定在一起,每次升级都要升级整个操作系统和应用。随着程序规模的扩大,会不断增加升级的时间及耦合度,不利于程序的开发调试和维护。
ucLinux操作系统使用gcc编译器,它的应用程序和操作系统分离,并支持动态加载技术,有利于开发和维护。但针对DSP处理器,ucLinux使用的GCC编译器的效率无法与CCS编译器相比。
OSEck操作系统使用CCS编译器,与DSP处理器的契合度非常好,程序运行效率高,但不支持动态加载技术;ucLinux操作系统使用gcc编译器,应用程序和操作系统分离,并支持动态加载技术,有利于开发和维护,但程序的运行效率低下。这两个系统各有特点,但都无法兼顾动态加载技术和程序的运行效率。
发明内容
发明目的:为解决现有技术的不足,提供一种在CCS编译器基础上实现程序的动态加载,同时优化程序中的函数调用跳转流程,提高代码的运行效率的基于DSP的动态加载方法。
技术方案:本发明的一种基于DSP的动态加载方法,包括以下步骤:
(1)ELF文件预处理;
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构;
(3)符号导出
一个ELF模块需要导出一些符号,给其它模块使用,加载过程需为每个ELF模块建立一个符号表;
(4)符号重定位
一个ELF模块需要用到其它ELF模块的符号,加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所属方法查找到符号地址,并填写到本模块的导入符号表;
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
进一步的,所述步骤(1)包括以下步骤:
(11)反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头,;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
匹配正则表达式$(ADDR)CALL PLT_$(FUNC_NAME),如果匹配成功,则说明是跳转指令,执行步骤(15);否则返回到步骤(13);
(15)查找目标符号位置
在本汇编文件中查找步骤(14)所匹配到的FUNC_NAME字段对应的符号地址;
(16)判断目标符号是否在本模块内
如果目标符号在本模块内没有找到,则回到步骤(13);否则,执行步骤(17);
(17)判断目标地址是否超出相对跳转范围
将符号地址减去步骤(14)匹配到的$(ADDR),得到相对跳转偏移,如果偏移超过CALL指令相对跳转的最大值,则返回步骤(13);否则执行步骤(18);
(18)计算地址对应的ELF文件位置
计算出$(ADDR)地址对应指令在ELF文件中的位置,执行步骤(19);
(19)修改地址对应ELF指令
根据偏移生成新的“CALL+偏移”指令,修改步骤(18)计算得到的ELF文件位置,更新其内容为新生成的“CALL+偏移”指令。
更进一步的,所述步骤(15)中查找符号地址的方法包括以下步骤:
(21)定位到汇编文件头;
(22)从汇编文件读取一行;
(23)判断是否文件结束
如果文件结束,则返回0,表示未找到符号地址;否则执行步骤(24);
(24)匹配正则表达式“$(ADDR)$(NAME):”,匹配成功则执行步骤(25);否则回到步骤(22);
(25)如果$(NAME)与传入的$(FUNC_NAME)相等,则返回$(ADDR)所代表的地址;否则回到步骤(22)。
更进一步的,所述步骤(18)中计算$(ADDR)地址对应指令在ELF文件中的位置的方法,包括以下步骤:
(31)读取ELF头,分析ELF段表,每个段由“段起始地址”,“段长度”,“段在ELF文件中的偏移”组成;
(32)处理指针定位到段表头;
(33)针对处理指针指向的表项,执行以下操作:
比较$(ADDR)是否在该段内,即“段起始地址<=$(ADDR)且段起始地址+段长度>$(ADDR)”,如果表达式成立,则返回“段在ELF文件中的偏移+$(ADDR)-段起始地址”,否则执行步骤(34);
(34)段表指针移动到下一个段表项,回到步骤(33)。
进一步的,所述步骤(4)中的导入符号表为GOT表,在DSP中,寄存器B14总是指向GOT首地址。
有益效果:与现有技术相比,本发明的基于DSP的动态加载方法,在使用CCS编译器的前提下实现了模块动态加载,同时优化了程序中的函数调用跳转流程,既保证了程序的运行效率,又为程序的调试和维护提供了方便。该基于CCS编译器实现DSP动态加载的方法解决了B14切换问题;提高可重定位代码执行效率,用于CCS编译器以及GCC编译器所编译的可重定位代码。
附图说明
图1是现有技术的加载器执行完第一步后的模块结构示意图;
图2是现有技术的加载器执行完第二步后的模块结构示意图;
图3是现有技术的加载器执行完第三步后的模块结构示意图;
图4是本发明的DSP动态加载方法流程图;
图5是ELF文件预处理流程图;
图6是在汇编文件中查找符号地址的方法流程图;
图7是计算某个地址对应指令在ELF文件中的位置的方法流程图;
图8是本发明预处理后的模块结构示意图。
具体实施方式
下面结合附图对本发明的技术方案进行详细的说明。
DSP C6X系列处理器使用B14保存每个模块的数据段起始地址,程序中所有对全局数据的访问都使用“B14+偏移”的方式寻址。各个可加载模块有各自的数据,因此当程序指令流在模块间切换时(如:函数跨模块调用时),需保存和切换B14的值,否则会导致数据访问错误。
CCS编译器为能够被外部模块调用的大部分函数(没有使用static定义的函数)生成了保存和设置B14的指令。CCS编译器为提高代码执行效率,如果发现函数中没有使用全局变量或调用本原文件以外的函数,则不产生保存和设置B14的指令。CCS编译器认为调用本文件内部的函数不会使用B14,但是这里存在一个问题,当函数调用本文件内的其它非static函数时,并不是直接跳转到目标函数地址,而是使用了PLT跳转表,PLT跳转表(Procedure Linkage Table)是一段中间代码,其功能是跳转到目标函数,而这段中间代码使用了B14,因此,在编译器优化掉B14设置指令时,执行PLT中间代码会存在问题。
可见,出现问题的原因是中间代码使用了B14而编译器没有生产B14切换指令,如果不使用中间代码而直接跳转到目标函数则不会产生该问题。经研究分析,对于本模块内的目标函数,因为其与调用指令的相对偏移是固定的,所以完全可以使用相对跳转指令调用目标函数。而对于目标函数不在本模块内的情况,由于目标函数地址不确定,需要使用PLT配合GOT(Global Offset Table)实现函数的重定位,而此种条件下,编译器肯定不会优化掉B14的切换代码。
基于以上原理,本发明扫描目标文件中的跳转指令,如果发现跳转目标在本模块内,则使用相对跳转直接跳转到目标地址,否则不修改。不但解决了前面所述问题,而且减少了大量中间代码以及多余的跳转,提高了代码执行效率。这种提高代码执行效率的方法不但可用于CCS编译的DSP程序,也适用于GCC编译的ARM、X86、MIPS、PPC等其它体系结构的程序。
现有技术中加载器工作的通用方法为:
(1)ELF(Executable and Linking Format)文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构。
(2)符号导出
一个ELF模块可能需要导出一些符号(如,一个函数),给其它模块使用。加载过程需为每个ELF模块建立一个符号表,该符号表保存所有从符号名到符号地址的映射关系。当其它模块需要使用本模块导出符号时,首先查找符号表,获取符号地址。
(3)符号重定位
一个ELF模块可能需要用到其它ELF模块的符号(如:调用其它模块的函数)。加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过第2部所属方法查找到符号地址,并填写到本模块的导入符号表(这个导入符号表就是GOT表(Globaloffsettable),在DSP中,寄存器B14总是之上GOT首地址)。
(4)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
实施例:有modA和modB两个程序,分别编译出ELF文件。modA实现并导出了函数funA,并调用了modB的funB函数。modB实现并导出了funB和funC函数,funB调用了funC函数。
加载器执行完上述步骤(1)后,模块结构如图1所示。
由于编译器编译modA时并不知道funB的地址,所以funA中的CALL funB指令留空。
执行完步骤(2)后,模块结构如图2所示。
执行完步骤(3)后,模块结构如图3所示。
加载器将CALL funB修改为CALL GOTA+0,而在GOTA+0的数组位置填入jump funB,跳转到加载器查找到的funB地址。
编译器为了简化流程,针对所有的函数调用都通过GOT表进行,也就是说funB对funC的调用虽然是模块内部调用,但是也通过GOT表进行。
步骤(4)即为简单的查找地址和调用。
本发明的方法采用DSP进行加载,而DSP使用寄存器B14保存GOT首地址,当程序在不同模块间切换时需要切换B14的值,切换B14的代码由编译器自动添加到模块所有导出函数头和尾。同样以上面的例子说明:
funB在编译后的伪代码为:
加载后的伪代码为:
以上伪代码理论上没问题,但是TI cl6x编译器在实现时存在一个bug,当它检测到funC为本模块内部函数是,没有切换B14,实际的代码为:
此时B14没有被设置为GOTB,函数调用出现问题。
另外前面所述“编译器为了简化流程,针对所有的函数调用都通过GOT表进行,也就是说funB对funC的调用虽然是模块内部调用,但是也通过GOT表进行”会导致代码执行效率变低,因此每次内部函数的调用都经过了GOT表二次跳转。
本发明方法修正了这个问题,在编译完成后,ELF文件加载前,对ELF进行了处理,将所有目标符号为模块内部函数的CALL指令直接设置为跳转到目标地址,无须经过GOT表,也不再依赖B14。如图4所示,本发明的基于DSP的动态加载方法,包括以下步骤:
(1)ELF文件预处理,如图5所示,包括以下步骤:
(11)调用cl6x-dis-all命令反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
匹配正则表达式$(ADDR)CALL PLT_$(FUNC_NAME),如果匹配成功,则说明是跳转指令,执行步骤(15);否则返回到步骤(13);
(15)查找目标符号位置
在本汇编文件中查找步骤(14)所匹配到的FUNC_NAME字段对应的符号地址,查找符号地址的方法参考流程1;
(16)判断目标符号是否在本模块内
如果在本模块内没有找到目标符号,则回到步骤(13),否则,执行步骤(17);
(17)判断目标地址是否超出相对跳转范围
将符号地址减去步骤(14)匹配到的$(ADDR),得到相对跳转偏移,如果偏移超过CALL指令相对跳转的最大值(正负1MB),则返回第(13)步;否则执行步骤(18);
(18)计算地址对应的ELF文件位置
计算出$(ADDR)地址对应指令在ELF文件中的位置,具体计算方法参考流程2;然后执行步骤(19);
(19)修改地址对应ELF指令
根据偏移生成新的“CALL+偏移”指令,修改步骤(18)计算得到ELF文件位置,更新其内容为新生成的“CALL+偏移”指令。
流程1:在汇编文件中查找符号地址
输入为符号名$(FUNC_NAME),返回符号地址。如图6所示,包括以下步骤:
(21)定位到文件头;
(22)从汇编文件读取一行;
(23)判断是否文件结束
如果文件结束,则返回0,表示未找到符号地址;否则执行步骤(24);
(24)匹配正则表达式“$(ADDR)$(NAME):”,匹配成功则执行步骤(25);否则回到步骤(22);
(25)如果$(NAME)与传入的$(FUNC_NAME)相等,则返回$(ADDR)所代表的地址;否则回到步骤(22)。
流程2:计算出某个地址对应指令在ELF文件中的位置
输入为指令地址$(ADDR),返回ELF文件偏移。如图7所示,包括以下步骤:
(31)读取ELF头,分析ELF段表,每个段由“段起始地址”,“段长度”,“段在ELF文件中的偏移”组成;
(32)处理指针定位到段表头;
(33)针对处理指针指向的表项,执行以下操作:
比较$(ADDR)是否在该段内,即“段起始地址<=$(ADDR)且段起始地址+段长度>$(ADDR)”,如果表达式成立,则返回“段在ELF文件中的偏移+$(ADDR)-段起始地址”,否则执行步骤(34);
(34)段表指针移动到下一个段表项,回到步骤(33)。
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构。
(3)符号导出
一个ELF模块可能需要导出一些符号(如,一个函数),给其它模块使用。加载过程需为每个ELF模块建立一个符号表,该符号表保存所有从符号名到符号地址的映射关系。当其它模块需要使用本模块导出符号时,首先查找符号表,获取符号地址。
(4)符号重定位
一个ELF模块可能需要用到其它ELF模块的符号(如:调用其它模块的函数)。加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所述方法查找到符号地址,并填写到本模块的导入符号表(这个导入符号表就是GOT表(Globaloffsettable),在DSP中,寄存器B14总是指向GOT首地址)。
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
经过本发明预处理过的ELF文件funB的代码为:
经过本发明预处理后的模块结构如图8所示,由图8可知经过处理后的funB不再依赖GOT,不需要重定位,加载后的伪代码保持不变。如此既解决了B14切换的编译器bug,也提高了程序加载和执行的效率。
Claims (5)
1.一种基于DSP的动态加载方法,其特征在于,包括以下步骤:
(1)ELF文件预处理;
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构;
(3)符号导出
一个ELF模块需要导出一些符号,给其它模块使用,加载过程需为每个ELF模块建立一个符号表;
(4)符号重定位
一个ELF模块需要用到其它ELF模块的符号,加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所属方法查找到符号地址,并填写到本模块的导入符号表;
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
2.根据权利要求1所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(1)包括以下步骤:
(11)反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
匹配正则表达式$(ADDR)CALL PLT_$(FUNC_NAME),如果匹配成功,则说明是跳转指令,执行步骤(15);否则返回到步骤(13);
(15)查找目标符号位置
在本汇编文件中查找步骤(14)所匹配到的FUNC_NAME字段对应的符号地址;
(16)判断目标符号是否在本模块内
如果目标符号在本模块内没有找到,则回到步骤(13);否则,执行步骤(17);
(17)判断目标地址是否超出相对跳转范围
将符号地址减去步骤(14)匹配到的$(ADDR),得到相对跳转偏移,如果偏移超过CALL指令相对跳转的最大值,则返回步骤(13);否则执行步骤(18);
(18)计算地址对应的ELF文件位置
计算出$(ADDR)地址对应指令在ELF文件中的位置,执行步骤(19);
(19)修改地址对应ELF指令
根据偏移生成新的“CALL+偏移”指令,修改步骤(18)计算得到的ELF文件位置,更新其内容为新生成的“CALL+偏移”指令。
3.根据权利要求2所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(15)中查找符号地址的方法包括以下步骤:
(21)定位到汇编文件头;
(22)从汇编文件读取一行;
(23)判断是否文件结束
如果文件结束,则返回0,表示未找到符号地址;否则执行步骤(24);
(24)匹配正则表达式“$(ADDR)$(NAME):”,匹配成功则执行步骤(25);否则回到步骤(22);
(25)如果$(NAME)与传入的$(FUNC_NAME)相等,则返回$(ADDR)所代表的地址;否则回到步骤(22)。
4.根据权利要求2所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(18)中计算$(ADDR)地址对应指令在ELF文件中的位置的方法,包括以下步骤:
(31)读取ELF头,分析ELF段表,每个段由“段起始地址”,“段长度”,“段在ELF文件中的偏移”组成;
(32)处理指针定位到段表头;
(33)针对处理指针指向的表项,执行以下操作:
比较$(ADDR)是否在该段内,即“段起始地址<=$(ADDR)且段起始地址+段长度>$(ADDR)”,如果表达式成立,则返回“段在ELF文件中的偏移+$(ADDR)-段起始地址”,否则执行步骤(34);
(34)段表指针移动到下一个段表项,回到步骤(33)。
5.根据权利要求1所述的一种基于DSP的动态加载方法,其特征在于,所述步骤(4)中的导入符号表为GOT表,在DSP中,寄存器B14总是指向GOT首地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711458538.7A CN108196905B (zh) | 2017-12-28 | 2017-12-28 | 一种基于dsp的动态加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711458538.7A CN108196905B (zh) | 2017-12-28 | 2017-12-28 | 一种基于dsp的动态加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108196905A true CN108196905A (zh) | 2018-06-22 |
CN108196905B CN108196905B (zh) | 2019-03-22 |
Family
ID=62584923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711458538.7A Active CN108196905B (zh) | 2017-12-28 | 2017-12-28 | 一种基于dsp的动态加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108196905B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109683900A (zh) * | 2018-11-14 | 2019-04-26 | 浙江零跑科技有限公司 | 针对elf文件调试信息的通用上位机符号查找与解析方法 |
CN111913762A (zh) * | 2020-08-20 | 2020-11-10 | 北京机电工程研究所 | 一种预留运行内存空间的dsp动态加载方法 |
CN112463164A (zh) * | 2020-12-14 | 2021-03-09 | 记忆科技(深圳)有限公司 | SoC程序执行的显示定位方法、装置、计算机设备及存储介质 |
CN114546481A (zh) * | 2022-01-28 | 2022-05-27 | 龙芯中科(成都)技术有限公司 | 跳转表查找方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6338130B1 (en) * | 1999-03-11 | 2002-01-08 | International Business Machines Corporation | Adaptive method and apparatus for allocation of DSP resources in a communication system |
CN101378509A (zh) * | 2008-10-06 | 2009-03-04 | 合肥优视嵌入式技术有限责任公司 | Bf561的双核协调工作方法 |
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
US20110271148A1 (en) * | 2010-04-30 | 2011-11-03 | Eigler Frank Ch | Preloading unwind data for non-intrusive backtracing |
CN104239084A (zh) * | 2013-06-24 | 2014-12-24 | 南京南瑞继保电气有限公司 | 一种dsp程序自动加载的实现方法 |
CN104392181A (zh) * | 2014-11-18 | 2015-03-04 | 北京奇虎科技有限公司 | So文件的保护方法、装置及安卓安装包的加固方法和系统 |
CN106354536A (zh) * | 2016-08-31 | 2017-01-25 | 北京奇虎科技有限公司 | 在Windows系统中加载Linux系统ELF文件的方法及装置 |
CN106355049A (zh) * | 2016-08-19 | 2017-01-25 | 北京奇虎科技有限公司 | 一种加固安卓安装包的动态链接库so文件的方法和装置 |
-
2017
- 2017-12-28 CN CN201711458538.7A patent/CN108196905B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6338130B1 (en) * | 1999-03-11 | 2002-01-08 | International Business Machines Corporation | Adaptive method and apparatus for allocation of DSP resources in a communication system |
CN101378509A (zh) * | 2008-10-06 | 2009-03-04 | 合肥优视嵌入式技术有限责任公司 | Bf561的双核协调工作方法 |
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
US20110271148A1 (en) * | 2010-04-30 | 2011-11-03 | Eigler Frank Ch | Preloading unwind data for non-intrusive backtracing |
CN104239084A (zh) * | 2013-06-24 | 2014-12-24 | 南京南瑞继保电气有限公司 | 一种dsp程序自动加载的实现方法 |
CN104392181A (zh) * | 2014-11-18 | 2015-03-04 | 北京奇虎科技有限公司 | So文件的保护方法、装置及安卓安装包的加固方法和系统 |
CN106355049A (zh) * | 2016-08-19 | 2017-01-25 | 北京奇虎科技有限公司 | 一种加固安卓安装包的动态链接库so文件的方法和装置 |
CN106354536A (zh) * | 2016-08-31 | 2017-01-25 | 北京奇虎科技有限公司 | 在Windows系统中加载Linux系统ELF文件的方法及装置 |
Non-Patent Citations (5)
Title |
---|
CHEN JUTAO;ZHENG HUAYAO;HUANG XUEWU: "ARM+DSP Embedded System Applied in Marine Electric Propulsion Dynamic Load Simulation System", 《2007 8TH INTERNATIONAL CONFERENCE ON ELECTRONIC MEASUREMENT AND INSTRUMENTS IN IEEE》 * |
SWEETKING1987: "ELF文件的加载和动态链接过程", 《百度文库》 * |
季末一枫: "ARM-ELF文件格式与GNU ARM Linker机制", 《百度文库》 * |
江华: "基于TigerSHARC的可再配置DSP系统动态加载技术", 《中国优秀硕士论文全文数据库 信息科技辑》 * |
牛金海: "《TMS320C66x KeyStone架构多核DSP入门与实例精解》", 30 April 2014 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109683900A (zh) * | 2018-11-14 | 2019-04-26 | 浙江零跑科技有限公司 | 针对elf文件调试信息的通用上位机符号查找与解析方法 |
CN111913762A (zh) * | 2020-08-20 | 2020-11-10 | 北京机电工程研究所 | 一种预留运行内存空间的dsp动态加载方法 |
CN111913762B (zh) * | 2020-08-20 | 2024-04-19 | 北京机电工程研究所 | 一种预留运行内存空间的dsp动态加载方法 |
CN112463164A (zh) * | 2020-12-14 | 2021-03-09 | 记忆科技(深圳)有限公司 | SoC程序执行的显示定位方法、装置、计算机设备及存储介质 |
CN112463164B (zh) * | 2020-12-14 | 2024-02-13 | 记忆科技(深圳)有限公司 | SoC程序执行的显示定位方法、装置、计算机设备及存储介质 |
CN114546481A (zh) * | 2022-01-28 | 2022-05-27 | 龙芯中科(成都)技术有限公司 | 跳转表查找方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108196905B (zh) | 2019-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108196905B (zh) | 一种基于dsp的动态加载方法 | |
US11314490B2 (en) | Special calling sequence for caller-sensitive methods | |
Diaz et al. | Design and implementation of the gnu prolog system | |
US8099721B2 (en) | Parsing of declarations in all branches of preprocessor conditionals | |
US8079023B2 (en) | Typed intermediate language support for existing compilers | |
EP2487585B1 (en) | Method and device for dynamically loading relocatable file | |
US6434742B1 (en) | Symbol for automatically renaming symbols in files during the compiling of the files | |
US20200125366A1 (en) | Branch target buffer for emulation environments | |
CN101299192A (zh) | 一种非对齐访存的处理方法 | |
CN104134039A (zh) | 病毒查杀方法、客户端、服务器以及病毒查杀系统 | |
CN103412754A (zh) | 动态语言代码执行方法和装置 | |
CN102364433A (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
US20030009750A1 (en) | Optimizing an executable computer program having linkage functions | |
US20140196019A1 (en) | Method and Apparatus for Substituting Compiler Built-in Helper Functions with Machine Instructions | |
US7802080B2 (en) | Null exception handling | |
US20020010913A1 (en) | Program profiling | |
CN114546409A (zh) | 一种编译产物与源码隔离的方法、系统及存储介质 | |
Meurer | OCamlJIT 2.0-Faster Objective Caml | |
CN100476736C (zh) | 在虚拟机环境下调用方法的方法和包括虚拟机的系统 | |
Farvardin et al. | Compiling with Continuations and LLVM | |
Dot et al. | Erico: Effective removal of inline caching overhead in dynamic typed languages | |
Hanson | lcc. NET: targeting the. NET Common Intermediate Language from Standard C | |
D'monte et al. | A lightweight code storage container for the eclipse OMR ahead-of-time compiler | |
Marcelino | PyJL: A Source-to-Source Python Compiler to Julia | |
Negrini | A hybrid approach for automatic recognition of C++ objects in optimized binaries |
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 |