Document
拖动滑块完成拼图
首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

变长指令集系统栈回溯的实现方法及装置 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:深圳全志在线有限公司

摘要:本发明公开了一种变长指令集系统栈回溯的实现方法及装置,该方法包括:确定当前函数栈帧的程序运行地址,确定第一合法指令长度,从基准地址向低地址方向偏移第一合法指令长度,得到第二地址及对应的第一解析指令,并在判断出该指令为入栈指令且已触发返回寄存器入栈之后,将第二地址确定为当前函数的上边界;确定第二合法指令长度,从第二地址向高地址方向偏移第二合法指令长度,得到第三地址及对应的第二解析指令,在判断出该指令为入栈指令且第三地址为当前函数的跳转地址之后,将下一级函数确定为新的当前函数,并重新执行上述流程。可见,实施本发明提供了一种栈回溯方案,能够动态检测指令长度、解析指令并应用于变长指令集系统。

主权项:1.一种变长指令集系统栈回溯的实现方法,其特征在于,所述方法包括:确定当前函数的目标栈帧对应的栈帧参数,所述目标栈帧对应的栈帧参数包括所述目标栈帧对应的第一地址,所述第一地址为所述目标栈帧对应的程序运行地址,所述目标栈帧为第一级栈帧或者为非第一级栈帧;根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址;初始确定出的基准地址为所述第一地址;读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令,当判断出所述第一解析指令为所述入栈指令时,判断所述第一解析指令是否已触发返回寄存器完成入栈,当判断出所述第一解析指令已触发所述返回寄存器完成入栈时,将所述第二地址确定为所述目标栈帧对应的当前函数的上边界;根据预设的第二指令长度检测算法,确定第二合法指令长度,以所述第二地址为基准向高地址方向偏移所述第二合法指令长度,得到第三地址;读取所述第三地址处的第二解析指令,并判断所述第二解析指令是否为所述入栈指令,当判断出所述第二解析指令为所述入栈指令时,判断所述第三地址是否等于所述当前函数对应的跳转地址,所述当前函数对应的跳转地址存放有从所述当前函数跳转至后置调用函数的跳转指令,所述后置调用函数为函数调用顺序在所述当前函数的函数调用顺序之后的函数;当判断出所述第三地址等于所述跳转地址时,将所述当前函数的下一级函数确定为新的当前函数,并触发执行所述的确定当前函数的目标栈帧对应的栈帧参数的操作;所述栈帧参数还包括所述目标栈帧的栈顶寄存器的值;其中,当所述目标栈帧为所述非第一级栈帧时,所述目标栈帧对应的栈帧参数是通过以下方式确定出的:根据当前函数的上一级函数对应的入栈总长度以及该当前函数的上一级函数对应的栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值;其中,该当前函数的上一级函数对应的入栈总长度是根据该当前函数的上一级函数对应的每个入栈指令的入栈长度确定出的;其中,当前函数的上一级函数为在当前函数之前最新回溯过的函数;根据在运行该当前函数的上一级函数时返回寄存器对应的栈内偏移量、该当前函数的上一级函数对应的栈顶寄存器的值以及该当前函数的上一级函数对应的入栈总长度,确定在运行该当前函数的上一级函数时所述返回寄存器的值,并根据在运行该当前函数的上一级函数时所述返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址;所述方法还包括:当判断出所述第一解析指令不为所述入栈指令时,将所述第二地址确定为新的基准地址,并重新执行所述的根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址的步骤,以及执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的步骤;以及,所述方法还包括:当判断出所述第一解析指令为所述入栈指令,且判断出所述第一解析指令未触发所述返回寄存器完成入栈时,将所述第二地址确定为新的基准地址,并重新执行所述的根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址对应的步骤,以及执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的步骤;当所述目标栈帧为所述第一级栈帧时,所述确定当前函数的目标栈帧对应的栈帧参数,包括:根据预设栈回溯启动指令调用回溯函数,并根据所述回溯函数判断当前运行的目标函数是否为异常处理函数,所述回溯函数为启动栈回溯流程的函数;当判断出所述目标函数为所述异常处理函数时,调用确定出的异常栈获取异常信息对应的程序运行地址以及栈顶寄存器对应的值,作为当前函数的目标栈帧对应的栈帧参数;当判断出所述目标函数不为所述异常处理函数时,确定待回溯的指定任务,并获取所述指定任务对应的栈帧参数,将所述指定任务对应的栈帧参数所在的函数确定为当前函数以及将所述指定任务对应的栈帧参数确定为所述当前函数的目标栈帧对应的栈帧参数;所述指定任务为当前运行任务或非当前运行任务;其中,所述获取所述指定任务对应的栈帧参数,包括:当所述指定任务为所述当前运行任务时,根据预设汇编程序获取当前CPU对应的程序运行地址以及栈顶寄存器对应的值,作为所述指定任务对应的栈帧参数;当所述指定任务为所述非当前运行任务时,从所述指定任务对应的上下文信息中提取程序运行地址以及栈顶寄存器的值,作为所述指定任务对应的栈帧参数。

全文数据:

权利要求:

百度查询: 深圳全志在线有限公司 变长指令集系统栈回溯的实现方法及装置

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