CN101706735A - 一种嵌入式系统及其获取符号表的方法 - Google Patents
一种嵌入式系统及其获取符号表的方法 Download PDFInfo
- Publication number
- CN101706735A CN101706735A CN200910246729A CN200910246729A CN101706735A CN 101706735 A CN101706735 A CN 101706735A CN 200910246729 A CN200910246729 A CN 200910246729A CN 200910246729 A CN200910246729 A CN 200910246729A CN 101706735 A CN101706735 A CN 101706735A
- Authority
- CN
- China
- Prior art keywords
- file
- embedded system
- array
- bin
- analysis
- 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
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种嵌入式系统及其获取符号表的方法,包括:嵌入式系统进行编译时在存储器中预留空间,生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述预留空间中生成包含长度为m的空的数组的c文件;嵌入式系统编译所述c文件,并和所述obj文件链接生成bin文件;嵌入式系统分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件。应用本发明,解决了当前需要得到所有bin文件内的符号的地址的需求的问题,可以最大程度得到所有的符号,其中包括static的变量和函数。
Description
技术领域
本发明涉及嵌入式系统的技术领域,尤其涉及一种嵌入式系统及其获取符号表的方法。
背景技术
在通信领域中,大多数的产品是基于实时操作系统如VxWorks开发的,Vxworks系统提供了一种基于符号表查找函数等符号地址的debug的功能。在debug的过程中,Vxworks往往使用shell里运行调试函数、查看关键全局变量等方法,所以找到目标函数或变量在内存中的地址是debug的关键。为了实现这功能,Vxworks使用2步链接的方法,即第一步将程序需要的目标代码形成obj,接下来通过binutils的工具和tcl脚本提取obj里面的信息形成一个c文件,这个c文件包含一个结构体的数组D,表示了所有函数和全局变量的一个对应关系,然后把这个c文件编译,将这个结构体数组D和obj最终第二次链接形成最终bin文件,这样在bin里面的其他函数就可以通过查找D来得到需要的函数或全局变量的地址。这种方法存在局限性,它无法查询那种只能为当前文件中的函数使用static的变量和函数,因为D所在的c文件,无法包含具体实际的地址信息。因为obj链接时,只有全局变量或函数的地址信息才可以得以确定。对该c文件来说,只有全局函数和变量的符号可以进行extern操作来实现引用。所以默认Vxworks的shell在使用直接输入符号名查找符号的时候,是无法查到得到一个static变量或函数。
发明内容
本发明提供了一种嵌入式系统及其获取符号表的方法,解决了当前需要得到所有bin文件内的符号的地址的需求的问题。
为了解决上述问题,本发明提供了一种嵌入式系统获取符号表的方法,包括:
所述嵌入式系统进行编译时在存储器中预留空间,生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述预留空间中生成包含长度为m的空的数组的c文件;其中,m为大于0的整数;
所述嵌入式系统编译所述c文件,并和所述obj文件链接生成bin文件;
所述嵌入式系统分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件。
进一步地,上述方法还可包括,所述嵌入式系统进行编译时在存储器中预留空间,生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述预留空间中生成包含长度为m的空的数组的c文件,是指:
所述嵌入式系统进行编译时在存储器中预留长度为N的空间,根据目标代码生成obj文件;其中,N为大于0的整数;
所述嵌入式系统根据所述obj文件获得所有符号的数量m;判断若所述数量m大于N,则将预留空间的长度N的数值调整为m,根据所述数量m,生成包含长度为m的空的数组的c文件.
进一步地,上述方法还可包括,所述嵌入式系统判断若所述数量m不大于N,则根据所述数量m,生成包含长度为m的空的数组的c文件。
进一步地,上述方法还可包括,所述嵌入式系统分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件,是指:
所述嵌入式系统通过binutils工具分析所述bin文件,得到所有符号的名称和地址的对应关系,生成符合所述数组在存储器中存放顺序的dfile文件;
所述嵌入式系统通过binutils工具分析所述bin文件,得到所述数组在bin文件中的偏移位置,将所述dfile文件写入所述偏移位置,生成包含所有符号查找表信息的新的bin文件。
本发明还提供了一种嵌入式系统,包括编译模块和分析控制模块,其中,
所述编译模块,用于生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述分析控制模块预留的空间中生成包含长度为m的空的数组的c文件,编译所述c文件,并和所述obj文件链接生成bin文件并发送给所述分析控制模块;
所述分析控制模块,用于编译时在存储器中预留空间;接收所述编译模块发送的所述bin文件并进行分析,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件。
进一步地,上述嵌入式系统还可包括,所述分析控制模块在存储器中预留空间的长度为N,其中N为大于0的整数;
所述分析控制模块,还用于判断若所述数量m大于N,则将预留空间的长度N的数值调整为m。
进一步地,上述嵌入式系统还可包括,所述编译模块是根据目标代码生成所述obj文件。
进一步地,上述嵌入式系统还可包括,所述分析控制模块分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件,是指:
所述分析控制模块通过binutils工具分析所述bin文件,得到所有符号的名称和地址的对应关系,生成符合所述数组在存储器中存放顺序的dfile文件;通过binutils工具分析所述bin文件,得到所述数组在bin文件中的偏移位置,将所述dfile文件写入所述偏移位置,生成包含所有符号查找表信息的新的bin文件。
与现有技术相比,应用本发明,解决了当前需要得到所有bin文件内的符号的地址的需求的问题,可以最大程度得到所有的符号,其中包括static的变量和函数。
附图说明
图1是本发明的一种嵌入式系统获取符号表的方法的流程图;
图2是本发明的一种嵌入式系统的结构示意图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步说明。
本发明的主要构思是:不同于Vxworks的生成c文件的二次链接,采取第一次编译时预留空间生成程序,然后解析程序得到符号表再填充回程序的方式,可以最大程度得到所有的符号,其中包括static的变量和函数.
如图1所示,本发明的一种嵌入式系统获取符号表的方法,具体分为如下步骤:
步骤110、嵌入式系统进行编译时在存储器中预留长度为N的空间,根据目标代码生成obj文件;
其中,N为大于0的整数。
步骤120、根据所述obj文件获得所有符号的数量m;
其中,m为大于0的整数。
步骤130、嵌入式系统判断若所述数量m大于N,则执行步骤135;否则,执行步骤140;
步骤135、将预留空间的长度N的数值调整为m,执行步骤140;
步骤140、根据所述数量m,生成包含长度为m的空的数组D的c文件;
步骤150、编译所述c文件,并和所述obj文件链接生成bin文件;
步骤160、通过binutils工具分析所述bin文件,得到所有符号的名称和地址的对应关系,生成符合所述数组D在存储器中存放顺序的dfile文件;
步骤170、通过binutils工具分析所述bin文件,得到所述数组D在bin文件中的偏移位置,将dfile文件写入所述偏移位置,生成包含所有符号查找表信息的新的bin文件。
上述方法主要是预留空间,确定对应表结构体的数组D在最终文件bin中的位置,不需要再改变bin,把现有所有信息提取出来,填充回原来bin中的空数组,这样bin其他符号的地址也不会因为这个填充有任何改变,填充回去的表是包含所有符号的信息的表。
如图2所示,本发明的一种嵌入式系统,包括编译模块和分析控制模块,其中,
所述编译模块,用于生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述分析控制模块预留的空间中生成包含长度为m的空的数组的c文件,编译所述c文件,并和所述obj文件链接生成bin文件并发送给所述分析控制模块;
所述编译模块是根据目标代码生成所述obj文件。
所述分析控制模块,用于编译时在存储器中预留空间;接收所述编译模块发送的所述bin文件并进行分析,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件。
所述分析控制模块在存储器中预留空间的长度为N,其中N为大于0的整数;
所述分析控制模块,还用于判断若所述数量m大于N,则将预留空间的长度N的数值调整为m。
所述分析控制模块分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件,是指:
所述分析控制模块通过binutils工具分析所述bin文件,得到所有符号的名称和地址的对应关系,生成符合所述数组在存储器中存放顺序的dfile文件;通过binutils工具分析所述bin文件,得到所述数组在bin文件中的偏移位置,将所述dfile文件写入所述偏移位置,生成包含所有符号查找表信息的新的bin文件。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内.因此,本发明的保护范围应该以权利要求的保护范围为准.
Claims (8)
1.一种嵌入式系统获取符号表的方法,其特征在于,包括:
所述嵌入式系统进行编译时在存储器中预留空间,生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述预留空间中生成包含长度为m的空的数组的c文件;其中,m为大于0的整数;
所述嵌入式系统编译所述c文件,并和所述obj文件链接生成bin文件;
所述嵌入式系统分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件。
2.如权利要求1所述的方法,其特征在于,
所述嵌入式系统进行编译时在存储器中预留空间,生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述预留空间中生成包含长度为m的空的数组的c文件,是指:
所述嵌入式系统进行编译时在存储器中预留长度为N的空间,根据目标代码生成obj文件;其中,N为大于0的整数;
所述嵌入式系统根据所述obj文件获得所有符号的数量m;判断若所述数量m大于N,则将预留空间的长度N的数值调整为m,根据所述数量m,生成包含长度为m的空的数组的c文件。
3.如权利要求2所述的方法,其特征在于,
所述嵌入式系统判断若所述数量m不大于N,则根据所述数量m,生成包含长度为m的空的数组的c文件。
4.如权利要求1所述的方法,其特征在于,
所述嵌入式系统分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件,是指:
所述嵌入式系统通过binutils工具分析所述bin文件,得到所有符号的名称和地址的对应关系,生成符合所述数组在存储器中存放顺序的dfile文件;
所述嵌入式系统通过binutils工具分析所述bin文件,得到所述数组在bin文件中的偏移位置,将所述dfile文件写入所述偏移位置,生成包含所有符号查找表信息的新的bin文件。
5.一种嵌入式系统,其特征在于,
包括编译模块和分析控制模块,其中,
所述编译模块,用于生成obj文件并根据该obj文件获得所有符号的数量m,根据所述数量m在所述分析控制模块预留的空间中生成包含长度为m的空的数组的c文件,编译所述c文件,并和所述obj文件链接生成bin文件并发送给所述分析控制模块;
所述分析控制模块,用于编译时在存储器中预留空间;接收所述编译模块发送的所述bin文件并进行分析,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件。
6.如权利要求5所述的嵌入式系统,其特征在于,
所述分析控制模块在存储器中预留空间的长度为N,其中N为大于0的整数;
所述分析控制模块,还用于判断若所述数量m大于N,则将预留空间的长度N的数值调整为m。
7.如权利要求5所述的嵌入式系统,其特征在于,
所述编译模块是根据目标代码生成所述obj文件。
8.如权利要求5所述的嵌入式系统,其特征在于,
所述分析控制模块分析所述bin文件,根据所述数组在存储器中存放位置,生成包含所有符号查找表信息的新的bin文件,是指:
所述分析控制模块通过binutils工具分析所述bin文件,得到所有符号的名称和地址的对应关系,生成符合所述数组在存储器中存放顺序的dfile文件;通过binutils工具分析所述bin文件,得到所述数组在bin文件中的偏移位置,将所述dfile文件写入所述偏移位置,生成包含所有符号查找表信息的新的bin文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910246729A CN101706735A (zh) | 2009-11-26 | 2009-11-26 | 一种嵌入式系统及其获取符号表的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910246729A CN101706735A (zh) | 2009-11-26 | 2009-11-26 | 一种嵌入式系统及其获取符号表的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101706735A true CN101706735A (zh) | 2010-05-12 |
Family
ID=42376961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910246729A Pending CN101706735A (zh) | 2009-11-26 | 2009-11-26 | 一种嵌入式系统及其获取符号表的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101706735A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142846A (zh) * | 2014-08-06 | 2014-11-12 | 汉柏科技有限公司 | 一种程序脚本编译方法和装置 |
CN105700861A (zh) * | 2014-11-27 | 2016-06-22 | 迈普通信技术股份有限公司 | 一种嵌入式程序运行符号表的生成方法及装置 |
CN103677851B (zh) * | 2013-12-27 | 2016-07-27 | 瑞斯康达科技发展股份有限公司 | 一种生成嵌入式程序运行符号表的方法和装置 |
CN107193604A (zh) * | 2017-05-25 | 2017-09-22 | 深圳震有科技股份有限公司 | 嵌入式系统加载符号表的方法、存储介质及终端 |
CN111025127A (zh) * | 2019-12-05 | 2020-04-17 | 上海御渡半导体科技有限公司 | 一种Pattern静态编译链接的方法 |
-
2009
- 2009-11-26 CN CN200910246729A patent/CN101706735A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677851B (zh) * | 2013-12-27 | 2016-07-27 | 瑞斯康达科技发展股份有限公司 | 一种生成嵌入式程序运行符号表的方法和装置 |
CN104142846A (zh) * | 2014-08-06 | 2014-11-12 | 汉柏科技有限公司 | 一种程序脚本编译方法和装置 |
CN105700861A (zh) * | 2014-11-27 | 2016-06-22 | 迈普通信技术股份有限公司 | 一种嵌入式程序运行符号表的生成方法及装置 |
CN107193604A (zh) * | 2017-05-25 | 2017-09-22 | 深圳震有科技股份有限公司 | 嵌入式系统加载符号表的方法、存储介质及终端 |
CN111025127A (zh) * | 2019-12-05 | 2020-04-17 | 上海御渡半导体科技有限公司 | 一种Pattern静态编译链接的方法 |
CN111025127B (zh) * | 2019-12-05 | 2022-09-23 | 上海御渡半导体科技有限公司 | 一种Pattern静态编译链接的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101706735A (zh) | 一种嵌入式系统及其获取符号表的方法 | |
CN104156314B (zh) | 一种应用于测试系统的代码重用方法 | |
CN107918666A (zh) | 一种区块链上的数据同步方法和系统 | |
CN101840373B (zh) | 数据操作方法及装置 | |
CN102722432A (zh) | 追踪内存访问的方法和装置 | |
CN102541521A (zh) | 基于结构化查询语言的操作指令自动生成装置及方法 | |
CN108415708A (zh) | 应用程序安装包大小的处理方法、装置、设备和存储介质 | |
CN109491884A (zh) | 代码性能检测方法、装置、计算机设备和介质 | |
CN110489630A (zh) | 资源数据的处理方法、装置、计算机设备和存储介质 | |
CN104270424A (zh) | 一种数据库同步方法、服务器及系统 | |
CN106100919A (zh) | 一种fc总线测试系统及fc总线测试方法 | |
CN103902677A (zh) | 一种跨平台的数据库访问方法 | |
CN109254964A (zh) | 地址标准化方法、装置、计算机设备和存储介质 | |
CN110109658A (zh) | 一种基于形式化模型的ros代码生成器及代码生成方法 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN102867023B (zh) | 一种栅格数据的存储、读取方法及装置 | |
Bogdanov et al. | Energy transition for Japan: Pathways towards a 100% renewable energy system in 2050 | |
CN103902449A (zh) | 一种用于生成搜索引擎相关性排序测试用例的方法与设备 | |
CN110334141A (zh) | 数据转换的方法、装置、计算机设备和存储介质 | |
CN101295245B (zh) | 一种基于模型信息的智能提取方法 | |
CN102842088A (zh) | 智能商业选址系统 | |
CN101216769A (zh) | 层次化系统描述语言SmartC到C代码的自动转换方法 | |
CN102662807A (zh) | 一种Java卡栈性能测试应用程序及其框架的制作方法 | |
CN103049313A (zh) | 用于浏览器的标签关闭装置和方法 | |
CN103294053A (zh) | 一种汽车k线诊断系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20100512 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |