一种分析函数栈大小的方法

文档序号:8257974阅读:267来源:国知局
一种分析函数栈大小的方法
【技术领域】
[0001] 本发明涉及嵌入式系统技术领域,尤其涉及一种分析函数栈大小的方法。
【背景技术】
[0002] vxWorks操作系统是以任务为调度单位,每个任务有单独的栈空间。栈是任务的一 个缓存区,在任务创建时根据指定大小从内存中分配。C语言函数局部变量、部分函数参数 等都会存放在栈中,因此,每个函数都需要占用一定大小的栈缓存。当一个任务函数调用链 中所有函数使用的栈缓存超过任务的栈大小时,导致栈溢出。栈溢出会导致非法修改其他 地址的内存内容,给系统带来不可预知的问题,甚至崩溃。
[0003] 因此必须要查询使用栈缓存超过指定大小的函数,并且把这些函数作为可能存在 隐患的风险点,可以使用其他的方法进行进一步分析,以排除风险点。
[0004] 目前没有查询到该功能的具体实现方法,但通常是采用类似c语言的编译型语言 编码,编译链接生成可执行文件;然后通过执行可执行文件得到查询结果。
[0005] 但是,编译型语言编码复杂,且针对不同的硬件(CPU)平台需要分别编译链接,这 些均是本领域技术人员所不期望见到的。

【发明内容】

[0006] 鉴于上述问题,本发明提供一种分析函数栈大小的方法,通过该方法可以生成超 过指定栈大小的所有函数列表,根据列表信息可以通过分析相应函数源码,以提前识别出 潜在的栈溢出风险。
[0007] 本发明解决上述技术问题所采用的技术方案为:
[0008] -种分析函数栈大小的方法,其中,所述方法包括:
[0009] 步骤S1、提供一初始文件,所述初始文件具有若干声明函数行,以及部分所述声明 函数行所对应的栈缓存行;每个所述声明函数行中均包括有声明函数的函数名称,每个所 述栈缓存行中均包括有用于缓存的栈的大小;
[0010] 步骤S2、对所述初始文件添加行号,以生成第一文件;
[0011] 步骤S3、提取所述第一文件中的所述声明函数行,以生成第一合并文件;提取所 述第一文件中的所述栈缓存行,以生成第二合并文件;
[0012] 步骤S4、根据行号排列的顺序,将所述第一合并文件和所述第二合并文件进行合 并,以生成第二文件;
[0013] 步骤S5、提取所述第二文件中的各所述栈缓存行和每个所述栈缓存行所对应的声 明函数行,以生成第三文件;
[0014] 步骤S6、提取所述第三文件中的函数名称和栈大小,并将每个所述函数名称和对 应该函数名称的栈大小进行输出,以生成第四文件;
[0015] 步骤S7、提取所述第四文件中栈大小大于或等于预定值的声明函数,以生成列表 输出文件。
[0016] 较佳的,上述的分析函数栈大小的方法,其中,所述方法还包括:
[0017] 步骤S8、删除所述第一文件、所述第二文件、所述第三文件和所述第四文件。
[0018] 较佳的,上述的分析函数栈大小的方法,其中,所述初始文件为反汇编文件。
[0019] 较佳的,上述的分析函数栈大小的方法,其中,所述栈缓存行位于该栈缓存行所对 应的声明函数行之下排列。
[0020] 较佳的,上述的分析函数栈大小的方法,其中,步骤S2中,根据所述行号由小到大 的排列顺序对所述初始文件添加行号。
[0021] 较佳的,上述的分析函数栈大小的方法,其中,步骤S4中,根据所述行号由小到大 的排列顺序,将所述第一合并文件和所述第二合并文件进行合并,以生成所述第二文件。
[0022] 较佳的,上述的分析函数栈大小的方法,其中,步骤S6中,将每个所述函数名称和 对应该函数名称的栈大小以单行的形式进行输出,以生成所述第四文件。
[0023] 较佳的,上述的分析函数栈大小的方法,其中,步骤S7中,所述预定值为3000字 T。
[0024] 较佳的,上述的分析函数栈大小的方法,其中,所述方法还包括:
[0025] 组合使用工具cat、grep、sort、sed或awk依次进行步骤S2?S7,以完成对所述 函数栈大小的分析。
[0026] 较佳的,上述的分析函数栈大小的方法,其中,所述方法还包括:
[0027] 采用shell脚本语言,并组合使用工具cat、grep、sort、sed或awk依次进行步骤 S2?S7,以完成对所述函数栈大小的分析。
[0028] 上述技术方案具有如下优点或有益效果:
[0029] 本发明公开了一种分析函数栈大小的方法,使用现成的工具sed、awk等和shell 脚本语言(解释型语言)来实现预期功能特性,这些现成的工具在不同硬件平台上都已经 有相应的执行程序,其中采用脚本语言编码简单,不需编译链接,可跨平台直接运行,进而 通过该方法可以生成超过指定栈大小的所有函数列表,根据列表信息可以通过分析相应函 数源码,以提前识别出潜在的栈溢出风险。
[0030] 具体【附图说明】
[0031] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明及其特征、夕卜 形和优点将会变得更加明显。在全部附图中相同的标记指示相同的部分,同时也可以未按 照比例绘制附图,其重点在于示出本发明的主旨。
[0032] 图1是本发明中分析函数栈大小的方法流程示意图。
【具体实施方式】
[0033] 下面结合附图和具体的实施例对本发明作进一步的说明:本实施例在以本发明技 术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的实施例的 保护范围不限于下述的实施例。
[0034] 鉴于现有技术的不足,本发明提供一种分析函数栈大小的方法,该方法基于Linux 操作系统下shell脚本语言并组合工具cat、grep、sort、sed或awk进行函数栈大小的分 析(具体进行后续的步骤S2?S7),以通过使用现成的工具shell脚本语言来实现预期功 能特性,这些现成的工具在不同硬件平台上都已经有相应的执行程序,可直接运行。
[0035] 因脚本语言(解释型语言)的执行性能比编译型语言的程序要慢,所以本发明实 施例中,通过合理设计脚本流程以及相关数据,确保功能的执行时间在一个合理的范围,具 体的,如图1所示。
[0036] 步骤S1、本发明分析的基础数据是一个初始文件,可选为反汇编文件,其通过以下 命令进行生成:〇bjdumpppc_D vxWorks. st>vxWorks. asm。
[0037] 该命令是vxWorks平台自带,下面进行详细阐述流程,将以vxWorks. asm反汇编文 件为起点和作为基础。
[0038] vxWorks. asm的反汇编文件中,通常包括有若干声明函数行和部分声明函数行所 对应的栈缓存行,每一个声明函数行中均包括有声明函数的函数名称,每一个栈缓存行中 均包括有用于缓存的栈的大小,其结构通常如下:
[0039]
【主权项】
1. 一种分析函数找大小的方法,其特征在于,所述方法包括: 步骤S1、提供一初始文件,所述初始文件具有若干声明函数行,W及部分所述声明函数 行所对应的找缓存行;每个所述声明函数行中均包括有声明函数的函数名称,每个所述找 缓存行中均包括有用于缓存的找的大小; 步骤S2、对所述初始文件添加行号,W生成第一文件; 步骤S3、提取所述第一文件中的所述声明函数行,W生成第一合并文件;提取所述第 一文件中的所述找缓存行,W生成第二合并文件; 步骤S4、根据行号排列的顺序,将所述第一合并文件和所述第二合并文件进行合并,W 生成第二文件; 步骤S5、提取所述第二文件中的各所述找缓存行和每个所述找缓存行所对应的声明函 数行,W生成第=文件; 步骤S6、提取所述第=文件中的函数名称和找大小,并将每个所述函数名称和对应该 函数名称的找大小进行输出,W生成第四文件; 步骤S7、提取所述第四文件中找大小大于或等于预定值的声明函数,W生成列表输出 文件。
2. 如权利要求1所述的分析函数找大小的方法,其特征在于,所述方法还包括: 步骤S8、删除所述第一文件、所述第二文件、所述第=文件和所述第四文件。
3. 如权利要求1所述的分析函数找大小的方法,其特征在于,所述初始文件为反汇编 文件。
4. 如权利要求1所述的分析函数找大小的方法,其特征在于,所述找缓存行位于该找 缓存行所对应的声明函数行之下排列。
5. 如权利要求1所述的分析函数找大小的方法,其特征在于,步骤S2中,根据所述行号 由小到大的排列顺序对所述初始文件添加行号。
6. 如权利要求1所述的分析函数找大小的方法,其特征在于,步骤S4中,根据所述行号 由小到大的排列顺序,将所述第一合并文件和所述第二合并文件进行合并,W生成所述第 二文件。
7. 如权利要求1所述的分析函数找大小的方法,其特征在于,步骤S6中,将每个所述函 数名称和对应该函数名称的找大小W单行的形式进行输出,W生成所述第四文件。
8. 如权利要求1所述的分析函数找大小的方法,其特征在于,步骤S7中,所述预定值为 3000字节。
9. 如权利要求1所述的分析函数找大小的方法,其特征在于,所述方法还包括: 组合使用工具cat、gr巧、sort、sed或awk依次进行步骤S2?S7, W完成对所述函数 找大小的分析。
10. 如权利要求9所述的分析函数找大小的方法,其特征在于,所述方法还包括: 采用shell脚本语言,并组合使用工具cat、grep、so;rt、sed或awk依次进行步骤S2? S7, W完成对所述函数找大小的分析。
【专利摘要】本发明涉及嵌入式系统技术领域,尤其涉及一种分析函数栈大小的方法,通过使用现成的工具sed、awk等和shell脚本语言来实现预期功能特性,这些现成的工具在不同硬件平台上都已经有相应的执行程序,其中采用脚本语言编码简单,不需编译链接,可跨平台直接运行,进而通过该方法可以生成超过指定栈大小的所有函数列表,根据列表信息可以通过分析相应函数源码,以提前识别出潜在的栈溢出风险。
【IPC分类】G06F9-44
【公开号】CN104572094
【申请号】CN201410844223
【发明人】钟捷群
【申请人】上海斐讯数据通信技术有限公司
【公开日】2015年4月29日
【申请日】2014年12月25日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1