买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明公布】一种TI C6000系列芯片C/C++裸机程序栈使用分析的方法_北京计算机技术及应用研究所_202311595889.8 

申请/专利权人:北京计算机技术及应用研究所

申请日:2023-11-27

公开(公告)日:2024-03-26

公开(公告)号:CN117762779A

主分类号:G06F11/36

分类号:G06F11/36

优先权:

专利状态码:在审-实质审查的生效

法律状态:2024.04.12#实质审查的生效;2024.03.26#公开

摘要:本发明属于软件测试技术领域,具体涉及一种TIC6000系列芯片CC++裸机程序栈使用分析的方法,该方法通过使用Java编写程序,调用TIC6000系列芯片的反汇编工具dis6x,解析TI集成开发环境CCS生成的out文件,获得CC++裸机程序的汇编文件;再用Java编写程序,解析汇编文件,获得程序中各函数的调用关系和栈使用大小。将解析后获得函数调用关系和栈使用信息以树结构的方式保存为序列化文件和Html文件,可以使用浏览器或自定义软件查看各函数调用链的栈使用情况。该方法不仅能够提高TIC6000系列芯片CC++裸机程序的分析效率,而且能够解析并显示CC++程序中使用的库函数内部的调用关系和栈使用信息,避免设计缺陷,提高代码质量。

主权项:1.一种TIC6000系列芯片CC++裸机程序栈使用分析的方法,其特征在于,包括如下步骤:步骤1、使用TI集成开发环境编译CC++裸机程序,生成*.out文件,编写Java程序,使用RunTime调用TIC6000系列芯片的反汇编工具dis6x,解析*.out文件生成汇编文件*.asm,在Java程序中设置顶层函数;步骤2、使用Java的BufferedReader按行读取*.asm文件,按空格分解信息字符串,解析到无指令数据的汇编信息时,表明获得Label信息或段信息,按行顺序储存入Label信息列表中,同时获得当前汇编信息的程序地址、函数名称;解析到存在指令数据的汇编信息时,表明获得汇编指令信息,按空格分解汇编信息,获得当前汇编指令信息的程序地址、指令数据、汇编指令和汇编参数;当汇编指令解析为“.word”时,当前行汇编信息为数据段的数据信息,不再处理此行汇编信息;将解析后的信息按行顺序储存入汇编信息列表中;步骤3、使用Java解析Label信息列表,跳过无用的段、数据信息、Label名称存在“$”字符的Label,建立以“程序地址-Label”为键值对的地址-Label哈希表;按Label信息列表顺序,将Label存入函数Label列表中;各函数Label对应的函数的开始地址设置为函数Label的程序地址,取下一个函数Label、无用的段、数据信息的程序地址减去4即为当前函数Label对应的函数的结束地址;步骤4、使用Java解析汇编信息列表,解析汇编指令信息对其他函数的调用,解析到“B”指令时,判断到当前汇编指令的汇编参数包含函数Label时,按汇编指令信息格式解析出调用函数名称、调用函数程序地址,将“B”指令的程序地址,调用函数地址存入跳转指令列表里;步骤5、使用Java解析汇编信息列表,为各函数的栈使用做预处理解析,解析汇编指令信息的汇编指令、汇编参数,解析到“SUB”指令时,按“,”分解参数字符串,并替换原汇编参数列表;解析到“STW”指令时,按“,”分解参数字符串,并替换原汇编参数列表;解析到“ADDK”指令时,按“,”分解参数字符串,并替换原汇编参数列表;步骤6、按函数Label列表顺序获取各函数Label,在函数Label对应的函数的开始地址和结束地址之间,查找属于跳转指令列表的汇编指令,存入当前函数的调用函数列表中;步骤7、按函数Label列表顺序获取函数Label,在函数Label对应的函数前16个汇编指令信息中解析汇编指令、汇编参数,解析到汇编指令为“SUB”,并且汇编参数的参数个数为3个时,判断第一个和第三个参数是否为“B15”、第二个参数是否为立即数,判断都为真表明当前汇编指令信息为栈操作指令,第二个参数为栈使用大小;在函数Label对应的函数前16个汇编指令信息中解析到“STW”指令,并且判断其参数为2个时,判断第二个参数是否为“*B15--[N]”,N表示立即数,判断为真表明此指令为栈操作指令,第二个参数中的立即数乘以4即为栈使用大小;在函数Label对应的函数前16个汇编指令信息中解析到“ADDK”指令,并且判断其参数为2个时,判断第一个参数是否为负的立即数、第二个参数是否为“B15”,判断都为真表明此指令为栈操作指令,第一个参数改为正数即为栈使用大小;函数Label对应的函数解析到栈操作指令后,停止当前函数的汇编指令信息的解析,并将栈使用大小记录在函数中,如果超出16个汇编指令信息、或到达函数结束地址仍未找到栈操作指令,表明此函数无栈操作;步骤8、从各顶层函数开始,深度优先遍历各函数的调用函数列表,形成函数调用树,累加各调用树分支的函数栈大小,当某一分支的调用函数已在此分支已出现过时,停止这一分支的函数调用分析,否则直到无调用函数为止,通过从顶层函数开始的深度优先遍历,形成各顶层函数的调用树和栈信息;将函数调用树和各函数的栈大小序列化,存入文件,以备进一步分析;步骤9、使用Java的javax.xml库和org.w3c.dom库,按函数的调用关系和栈累计大小,生成Html文件。

全文数据:

权利要求:

百度查询: 北京计算机技术及应用研究所 一种TI C6000系列芯片C/C++裸机程序栈使用分析的方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。