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

技术编号:11399884 阅读:81 留言:0更新日期:2015-05-03 14:57
本发明专利技术涉及嵌入式系统技术领域,尤其涉及一种分析函数栈大小的方法,通过使用现成的工具sed、awk等和shell脚本语言来实现预期功能特性,这些现成的工具在不同硬件平台上都已经有相应的执行程序,其中采用脚本语言编码简单,不需编译链接,可跨平台直接运行,进而通过该方法可以生成超过指定栈大小的所有函数列表,根据列表信息可以通过分析相应函数源码,以提前识别出潜在的栈溢出风险。

【技术实现步骤摘要】
一种分析函数栈大小的方法
本专利技术涉及嵌入式系统
,尤其涉及一种分析函数栈大小的方法。
技术介绍
vxWorks操作系统是以任务为调度单位,每个任务有单独的栈空间。栈是任务的一个缓存区,在任务创建时根据指定大小从内存中分配。C语言函数局部变量、部分函数参数等都会存放在栈中,因此,每个函数都需要占用一定大小的栈缓存。当一个任务函数调用链中所有函数使用的栈缓存超过任务的栈大小时,导致栈溢出。栈溢出会导致非法修改其他地址的内存内容,给系统带来不可预知的问题,甚至崩溃。因此必须要查询使用栈缓存超过指定大小的函数,并且把这些函数作为可能存在隐患的风险点,可以使用其他的方法进行进一步分析,以排除风险点。目前没有查询到该功能的具体实现方法,但通常是采用类似c语言的编译型语言编码,编译链接生成可执行文件;然后通过执行可执行文件得到查询结果。但是,编译型语言编码复杂,且针对不同的硬件(cpu)平台需要分别编译链接,这些均是本领域技术人员所不期望见到的。
技术实现思路
鉴于上述问题,本专利技术提供一种分析函数栈大小的方法,通过该方法可以生成超过指定栈大小的所有函数列表,根据列表信息可以通过分析相应函数源码,以提前识别出潜在的栈溢出风险。本专利技术解决上述技术问题所采用的技术方案为:一种分析函数栈大小的方法,其中,所述方法包括:步骤S1、提供一初始文件,所述初始文件具有若干声明函数行,以及部分所述声明函数行所对应的栈缓存行;每个所述声明函数行中均包括有声明函数的函数名称,每个所述栈缓存行中均包括有用于缓存的栈的大小;步骤S2、对所述初始文件添加行号,以生成第一文件;步骤S3、提取所述第一文件中的所述声明函数行,以生成第一合并文件;提取所述第一文件中的所述栈缓存行,以生成第二合并文件;步骤S4、根据行号排列的顺序,将所述第一合并文件和所述第二合并文件进行合并,以生成第二文件;步骤S5、提取所述第二文件中的各所述栈缓存行和每个所述栈缓存行所对应的声明函数行,以生成第三文件;步骤S6、提取所述第三文件中的函数名称和栈大小,并将每个所述函数名称和对应该函数名称的栈大小进行输出,以生成第四文件;步骤S7、提取所述第四文件中栈大小大于或等于预定值的声明函数,以生成列表输出文件。较佳的,上述的分析函数栈大小的方法,其中,所述方法还包括:步骤S8、删除所述第一文件、所述第二文件、所述第三文件和所述第四文件。较佳的,上述的分析函数栈大小的方法,其中,所述初始文件为反汇编文件。较佳的,上述的分析函数栈大小的方法,其中,所述栈缓存行位于该栈缓存行所对应的声明函数行之下排列。较佳的,上述的分析函数栈大小的方法,其中,步骤S2中,根据所述行号由小到大的排列顺序对所述初始文件添加行号。较佳的,上述的分析函数栈大小的方法,其中,步骤S4中,根据所述行号由小到大的排列顺序,将所述第一合并文件和所述第二合并文件进行合并,以生成所述第二文件。较佳的,上述的分析函数栈大小的方法,其中,步骤S6中,将每个所述函数名称和对应该函数名称的栈大小以单行的形式进行输出,以生成所述第四文件。较佳的,上述的分析函数栈大小的方法,其中,步骤S7中,所述预定值为3000字节。较佳的,上述的分析函数栈大小的方法,其中,所述方法还包括:组合使用工具cat、grep、sort、sed或awk依次进行步骤S2~S7,以完成对所述函数栈大小的分析。较佳的,上述的分析函数栈大小的方法,其中,所述方法还包括:采用shell脚本语言,并组合使用工具cat、grep、sort、sed或awk依次进行步骤S2~S7,以完成对所述函数栈大小的分析。上述技术方案具有如下优点或有益效果:本专利技术公开了一种分析函数栈大小的方法,使用现成的工具sed、awk等和shell脚本语言(解释型语言)来实现预期功能特性,这些现成的工具在不同硬件平台上都已经有相应的执行程序,其中采用脚本语言编码简单,不需编译链接,可跨平台直接运行,进而通过该方法可以生成超过指定栈大小的所有函数列表,根据列表信息可以通过分析相应函数源码,以提前识别出潜在的栈溢出风险。具体附图说明通过阅读参照以下附图对非限制性实施例所作的详细描述,本专利技术及其特征、外形和优点将会变得更加明显。在全部附图中相同的标记指示相同的部分,同时也可以未按照比例绘制附图,其重点在于示出本专利技术的主旨。图1是本专利技术中分析函数栈大小的方法流程示意图。具体实施方式下面结合附图和具体的实施例对本专利技术作进一步的说明:本实施例在以本专利技术技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本专利技术的实施例的保护范围不限于下述的实施例。鉴于现有技术的不足,本专利技术提供一种分析函数栈大小的方法,该方法基于Linux操作系统下shell脚本语言并组合工具cat、grep、sort、sed或awk进行函数栈大小的分析(具体进行后续的步骤S2~S7),以通过使用现成的工具shell脚本语言来实现预期功能特性,这些现成的工具在不同硬件平台上都已经有相应的执行程序,可直接运行。因脚本语言(解释型语言)的执行性能比编译型语言的程序要慢,所以本专利技术实施例中,通过合理设计脚本流程以及相关数据,确保功能的执行时间在一个合理的范围,具体的,如图1所示。步骤S1、本专利技术分析的基础数据是一个初始文件,可选为反汇编文件,其通过以下命令进行生成:objdumpppc-DvxWorks.st>vxWorks.asm。该命令是vxWorks平台自带,下面进行详细阐述流程,将以vxWorks.asm反汇编文件为起点和作为基础。vxWorks.asm的反汇编文件中,通常包括有若干声明函数行和部分声明函数行所对应的栈缓存行,每一个声明函数行中均包括有声明函数的函数名称,每一个栈缓存行中均包括有用于缓存的栈的大小,其结构通常如下:第一行(声明函数行):“00011904<sysHwMemInit>:”声明函数sysHwMemInit开始。第二行(栈缓存行):“11904:9421fff0stwur1,-16(r1)”stwur1,-16(r1)开辟函数用的栈缓存,其栈大小是16字节。另外,后续的文件中栈缓存行均位于该栈缓存行所对应的声明函数行之下排列。在本专利技术实施例的实现过程中分别会提取类似上述两行文件并作进一步的解析。每个步骤生成的中间文件格式要与上述结构一致(如行号由小到大的顺序进行排列);整个算法是基于这些格式化的数据文件来完成的,上述结构中的内容均为相应文件的一小部分。步骤S2、给反汇编文件vxWorks.asm添加行号,以生成第一文件/tmp/$$.asm,该第一文件中具有若干声明函数行和若干栈缓存行。其中在该实施例中,根据行号由小到大的排列顺序对该反汇编文件添加行号。在该过程中可通过shell脚本语言,shell:cat-nvxWorks.asm|sed′s/∧*//′>/tmp/$$.asm进行第一文件的生成,第一文件的结构内容为:第一文件与反汇编文件内容和结构相同,但是相对于反汇编文件,其作出了行号的添加变换。步骤S3、在第一文件/tmp/$$.asm中提取若干声明函数行,以生成第一合并文件/tmp/$$.func,在该过程中可通过shell脚本语言,shell:grep-本文档来自技高网...
一种分析函数栈大小的方法

【技术保护点】
一种分析函数栈大小的方法,其特征在于,所述方法包括:步骤S1、提供一初始文件,所述初始文件具有若干声明函数行,以及部分所述声明函数行所对应的栈缓存行;每个所述声明函数行中均包括有声明函数的函数名称,每个所述栈缓存行中均包括有用于缓存的栈的大小;步骤S2、对所述初始文件添加行号,以生成第一文件;步骤S3、提取所述第一文件中的所述声明函数行,以生成第一合并文件;提取所述第一文件中的所述栈缓存行,以生成第二合并文件;步骤S4、根据行号排列的顺序,将所述第一合并文件和所述第二合并文件进行合并,以生成第二文件;步骤S5、提取所述第二文件中的各所述栈缓存行和每个所述栈缓存行所对应的声明函数行,以生成第三文件;步骤S6、提取所述第三文件中的函数名称和栈大小,并将每个所述函数名称和对应该函数名称的栈大小进行输出,以生成第四文件;步骤S7、提取所述第四文件中栈大小大于或等于预定值的声明函数,以生成列表输出文件。

【技术特征摘要】
1.一种分析函数栈大小的方法,其特征在于,基于解释型语言实现,所述方法包括:步骤S1、提供一初始文件,所述初始文件具有若干声明函数行,以及部分所述声明函数行所对应的栈缓存行;每个所述声明函数行中均包括有声明函数的函数名称,每个所述栈缓存行中均包括有用于缓存的栈的大小;步骤S2、对所述初始文件添加行号,以生成第一文件;步骤S3、提取所述第一文件中的所述声明函数行,以生成第一合并文件;提取所述第一文件中的所述栈缓存行,以生成第二合并文件;步骤S4、根据行号排列的顺序,将所述第一合并文件和所述第二合并文件进行合并,以生成第二文件;步骤S5、提取所述第二文件中的各所述栈缓存行和每个所述栈缓存行所对应的声明函数行,以生成第三文件;步骤S6、提取所述第三文件中的函数名称和栈大小,并将每个所述函数名称和对应该函数名称的栈大小进行输出,以生成第四文件;步骤S7、提取所述第四文件中栈大小大于或等于预定值的声明函数,以生成列表输出文件。2.如权利要求1所述的分析函数栈大小的方法,其特征在于,所述方法还包括:步骤S8、删除所述第一文件、所述第二文件、所述第三文件和所述第四文件。3.如权利要求1所述的分析函数栈大小的方法,其特征在于,所述初始文件为...

【专利技术属性】
技术研发人员:钟捷群
申请(专利权)人:上海斐讯数据通信技术有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1