基于VxWorks操作系统的函数调用栈分析方法及装置制造方法及图纸

技术编号:9642341 阅读:84 留言:0更新日期:2014-02-07 00:48
本发明专利技术公开了一种基于VxWorks操作系统的函数调用栈分析方法及装置,涉及函数调用栈分析领域,该方法包括以下步骤:主机向目标机请求任务t1的TCB信息,目标机返回任务t1的TCB信息;主机从返回的TCB信息中获取到SP值、PC值、RA值,主机依据SP值以及栈底信息向目标机请求栈空间的信息,目标机返回相应的栈信息;主机根据目标机的TCB信息、栈空间的信息以及反汇编文件,进行函数调用栈分析。本发明专利技术能解析出局部函数的函数名,方便的查找到PC值所属函数的第一条指令,在没有特征指令的场景下,也能进行函数调用栈的分析,同时还能不受目标机资源的限制,提供完整的函数调用栈,有利于定位故障和异常。

【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种基于VxWorks操作系统的函数调用栈分析方法及装置,涉及函数调用栈分析领域,该方法包括以下步骤:主机向目标机请求任务t1的TCB信息,目标机返回任务t1的TCB信息;主机从返回的TCB信息中获取到SP值、PC值、RA值,主机依据SP值以及栈底信息向目标机请求栈空间的信息,目标机返回相应的栈信息;主机根据目标机的TCB信息、栈空间的信息以及反汇编文件,进行函数调用栈分析。本专利技术能解析出局部函数的函数名,方便的查找到PC值所属函数的第一条指令,在没有特征指令的场景下,也能进行函数调用栈的分析,同时还能不受目标机资源的限制,提供完整的函数调用栈,有利于定位故障和异常。【专利说明】基于VxWorks操作系统的函数调用栈分析方法及装置
本专利技术涉及函数调用栈分析领域,特别是涉及一种基于VxWorks操作系统的函数调用栈分析方法及装置。
技术介绍
在计算机科学中,栈被定义为一个特殊的容器,其遵守的规则是先入栈的数据后出栈。用户可以将数据压入栈中,即入栈,也可以将已经压入栈中的数据弹出,即出栈。栈在程序运行中具有举足轻重的地位,最重要的,栈保存了一个函数调用所需要的维护信息,这常常被称为栈帧,一个函数的栈帧占用一个连续的区域,每个栈帧对应于一个未完成运行的函数。在函数开始时,对应的栈帧已经完整地建立了 ;在函数退出时,该函数栈帧将被销毁。由于函数调用通常是嵌套的,因此在同一时刻,栈中会有多个函数的栈帧信息,调用栈就是由多个嵌套调用函数所使用的栈帧组成。调用栈体现了函数调用关系,也即一个函数调用链。例如,函数调用函数f2,函数f2调用函数f3,则— f2 — f3就是一个调用栈。其中对于函数调用函数f2而言,f:为调用者,f2为被调用者。在实际的软件运行中,一个函数到另一个函数之间的调用关系可能存在多种调用情况,这个调用栈不可能在预先确定,因此当程序出现异常、检测到错误或者被断点中断时,需要查看当前函数的调用栈,以便确定异常发生的场景。这也是软件调试的一个常用方法。下面以32 位的 MIPS (Microprocessor without interlocked piped stages,无内部互锁流水级的微处理器)系统为例,说明现有技术函数调用栈分析的基本原理,其它系统的函数调用栈分析方法也类似。MIPS具有32个通用寄存器,其中SP (Stack Pointer,栈指针)寄存器、RA (Return Address,返回地址)寄存器以及PC (Program Counter,程序计数器)寄存器扮演着重要的角色。为了叙述方便,SP寄存器、RA寄存器、PC寄存器中的内容在本专利技术中分别称为SP值、RA值、PC值。由于MIPS通常只在函数进入和退出的时刻才调整SP值,因此MIPS下函数调用栈分析的基本原理是:分析目标机上的代码指令,获取当前任务的SP值、PC值和RA值,从PC值开始的指令地址向前扫描指令,直到搜索到函数入口的特征指令,确定函数的栈帧大小,由此计算出调用者的栈指针。同时搜索RA值以及RA在栈上的存取指令,分析被调用者的返回地址,从而获取调用者的地址。以此类推获取当前任务完整的函数调用链。对于每个函数地址,查找内核中的符号表,从而得到函数的名称。一般调试器都能提供查看函数调用栈的工具。例如在VxWorks系统下,可以通过一个命令:display a stack trace of a task (显示一个任务的栈轨迹),下文简称tt命令,来查看任务的函数调用栈,该命令可以直接运行在目标机上,其它系统也有类似的调试命令。但是,这些调试命令可能存在以下问题:(I )Vxfforks的符号表是动态存在系统中的,通常VxWorks映像文件加载的是全局符号,局部符号不加载。调用栈分析时,解析出的函数名是全局函数名,不能解析出局部函数名,其局部函数名是通过全局函数名加上地址偏移来标识的,因此,在VxWorks目标机上利用tt命令运行函数调用栈分析的程序时,无法准确的提供局部函数的函数名。(2 )现有技术中,在目标机上通过PC值搜索到PC所属函数的第一条指令的方法比较繁琐,同时还是不可靠的,因为其假设前提是该函数前面还有函数。(3)调用栈分析依赖于特征指令,例如:MIPS系统下内嵌的汇编子程序可能没有显式的入栈指令,则无法进行调用栈的分析或者分析的内容不正确。(4)调用栈分析的命令大都运行在目标机上,在嵌入式系统中,由于目标机的资源有限,对所能跟踪的单个函数的大小以及所能跟踪的函数调用深度均有限制,因此当函数大小超过了系统预设的所跟踪的指令长度时,或者当函数调用的深度超过了系统预设的深度时,则获取的函数调用栈信息不完整。
技术实现思路
本专利技术的目的是为了克服上述
技术介绍
的不足,提供一种基于VxWorks操作系统的函数调用栈分析方法及装置,能够解析出局部函数的函数名,方便的查找到PC值所属函数的第一条指令,在没有特征指令例如显式的入栈指令的场景下,也能进行函数调用栈的分析,同时还能不受目标机资源的限制,提供完整的函数调用栈,有利于定位故障和异常。本专利技术提供一种基于VxWorks操作系统的函数调用栈分析方法,包括以下步骤:S1、在主机上输 入目标机当前运行的VxWorks映像的可执行链接格式ELF文件,同时在主机上生成映像文件的符号表文件;S2、假定需要进行函数调用栈分析的任务为tl,主机向目标机下发请求命令:暂停任务tl,目标机执行该命令;S3、主机向目标机请求任务tl的任务控制块TCB信息,目标机返回任务tl的TCB信息,包括通用寄存器信息、栈底以及栈大小;S4、主机从返回的TCB信息中获取到栈指针SP值、程序计数器PC值、返回地址RA值,无内部互锁流水级的微处理器MIPS栈空间采用的是向下增长的方式,栈底在高地址,运行时SP值就是当前函数的栈指针,它指向的是栈顶的位置,每个栈帧中所存放的内容和存放顺序由目标体系架构的调用约定来定义;当前SP值是程序运行到当前状态的SP值,函数入口点的SP值则是进入该函数还未执行函数第一条指令时的SP值;S5、主机依据SP值以及栈底信息向目标机请求栈空间的信息,所请求的栈信息为SP值所指向的栈顶至栈底之间的内存空间信息,目标机返回相应的栈信息;S6、主机根据目标机的TCB信息,栈空间的信息以及反汇编文件,进行函数调用栈分析;S7、主机向目标机下发请求命令:恢复需要进行函数调用栈分析的任务tl,目标机执行该命令。在上述技术方案的基础上,步骤S6中的函数调用栈分析是一个递归的过程,进行顶层函数调用栈分析时,PC值和SP值分别为目标机返回的TCB信息中的PC值和SP值,后续递归过程中每一层的分析则依赖于上一层所生成的新的PC值和SP值,直至SP值到达栈。在上述技术方案的基础上,步骤S6中的函数调用栈分析过程如下:步骤601、判断SP值是否到达栈底,如果是,则转到步骤602 ;如果否,则转到步骤603 ;步骤602、串接每一层PC值所属的函数func形成函数调用链,结束;步骤603、根据PC值查找所属的函数地址以及函数名称,具体查找过程为:在符号表文件中查找地址不超过并且最接近PC值函数地址以及函数名称,将该函数记为func ;转到步骤604 ;本文档来自技高网
...

【技术保护点】
一种基于VxWorks操作系统的函数调用栈分析方法,其特征在于,包括以下步骤:S1、在主机上输入目标机当前运行的VxWorks映像的可执行链接格式ELF文件,同时在主机上生成映像文件的符号表文件;S2、假定需要进行函数调用栈分析的任务为t1,主机向目标机下发请求命令:暂停任务t1,目标机执行该命令;S3、主机向目标机请求任务t1的任务控制块TCB信息,目标机返回任务t1的TCB信息,包括通用寄存器信息、栈底以及栈大小;S4、主机从返回的TCB信息中获取到栈指针SP值、程序计数器PC值、返回地址RA值,无内部互锁流水级的微处理器MIPS栈空间采用的是向下增长的方式,栈底在高地址,运行时SP值就是当前函数的栈指针,它指向的是栈顶的位置,每个栈帧中所存放的内容和存放顺序由目标体系架构的调用约定来定义;当前SP值是程序运行到当前状态的SP值,函数入口点的SP值则是进入该函数还未执行函数第一条指令时的SP值;S5、主机依据SP值以及栈底信息向目标机请求栈空间的信息,所请求的栈信息为SP值所指向的栈顶至栈底之间的内存空间信息,目标机返回相应的栈信息;S6、主机根据目标机的TCB信息,栈空间的信息以及反汇编文件,进行函数调用栈分析;S7、主机向目标机下发请求命令:恢复需要进行函数调用栈分析的任务t1,目标机执行该命令。...

【技术特征摘要】

【专利技术属性】
技术研发人员:曾颜
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:

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

1