CN114756284A - 变长指令集系统栈回溯的实现方法及装置 - Google Patents
变长指令集系统栈回溯的实现方法及装置 Download PDFInfo
- Publication number
- CN114756284A CN114756284A CN202210420252.4A CN202210420252A CN114756284A CN 114756284 A CN114756284 A CN 114756284A CN 202210420252 A CN202210420252 A CN 202210420252A CN 114756284 A CN114756284 A CN 114756284A
- Authority
- CN
- China
- Prior art keywords
- instruction
- function
- address
- stack
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 70
- 238000004458 analytical method Methods 0.000 claims abstract description 109
- 230000006870 function Effects 0.000 claims description 547
- 238000004422 calculation algorithm Methods 0.000 claims description 39
- 238000001514 detection method Methods 0.000 claims description 39
- 230000009191 jumping Effects 0.000 claims description 9
- 230000002159 abnormal effect Effects 0.000 claims description 8
- 230000001960 triggered effect Effects 0.000 claims description 8
- 238000003860 storage Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 description 8
- 230000009286 beneficial effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种变长指令集系统栈回溯的实现方法及装置,该方法包括:确定当前函数栈帧的程序运行地址,确定第一合法指令长度,从基准地址向低地址方向偏移第一合法指令长度,得到第二地址及对应的第一解析指令,并在判断出该指令为入栈指令且已触发返回寄存器入栈之后,将第二地址确定为当前函数的上边界;确定第二合法指令长度,从第二地址向高地址方向偏移第二合法指令长度,得到第三地址及对应的第二解析指令,在判断出该指令为入栈指令且第三地址为当前函数的跳转地址之后,将下一级函数确定为新的当前函数,并重新执行上述流程。可见,实施本发明提供了一种栈回溯方案,能够动态检测指令长度、解析指令并应用于变长指令集系统。
Description
技术领域
本发明涉及软件调试技术领域,尤其涉及一种变长指令集系统栈回溯的实现方法及装置。
背景技术
在进行软件开发时,开发者需要获取一些函数和出错时错误现场的栈回溯信息,通过栈回溯信息,能够快速地定位、调试软件问题。
针对栈回溯,目前行业内主要有三种方案:1)、通过特定的编译选项来构造规整栈帧,由软件通过规整的栈帧,能快速简单地获取到每个函数的栈帧起始地址、栈帧大小以及PC寄存器的值,从而能快速完成栈回溯的计算;2)、提前存储每个函数的出栈入栈信息,在编译阶段,计算每个函数的出栈入栈个数及其函数地址并保存至特殊的程序段表中。在进行栈回溯时,对这些特殊的程序段表进行搜索,获取其出栈入栈个数,从而计算出栈顶地址寄存器SP的值和返回寄存器LR的值,从而能快速完成栈回溯的计算;3)、通过指令解析计算栈帧大小提取回溯信息,是指解析出指令的类型、计算出当前栈帧的大小以及保存返回寄存器LR的值的栈偏移,然后提取出上一级函数的栈顶地址寄存器SP的值以及跳转地址。
但是现行的三种方案均存在局限性,其中,第一种方案依赖于特定的编译选项,同时要求栈帧寄存器FP不能被优化,使用场景受到了一定的限制;第二种方案亦依赖于特定的编译选项,同时引入了一些内存资源开销,使用场景也受到一定的限制;第三种方案目前仅支持定长指令集系统,如在变长指令集系统中,则会因提取出错误的指令,导致回溯出错。可见,提供一种不依赖于额外的编译选项且不引入额外内存开销的栈回溯方法显得尤为重要。
发明内容
本发明所要解决的技术问题在于,提供一种变长指令集系统栈回溯的实现方法及装置,能够在栈回溯流程中动态检测指令长度,不依赖于额外的编译选项且不引入额外内存开销,使用场景的限制性低,提高了栈回溯的回溯效率以及回溯准确性。
为了解决上述技术问题,本发明第一方面公开了一种变长指令集系统栈回溯的实现方法,所述方法包括:
确定当前函数的目标栈帧对应的栈帧参数,所述目标栈帧对应的栈帧参数包括所述目标栈帧对应的第一地址,所述第一地址为所述目标栈帧对应的程序运行地址,所述目标栈帧为第一级栈帧或者为非第一级栈帧;
根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址;初始确定出的基准地址为所述第一地址;
读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令,当判断出所述第一解析指令为所述入栈指令时,判断所述第一解析指令是否已触发返回寄存器完成入栈,当判断出所述第一解析指令已触发所述返回寄存器完成入栈时,将所述第二地址确定为所述目标栈帧对应的当前函数的上边界;
根据预设的第二指令长度检测算法,确定第二合法指令长度,以所述第二地址为基准向高地址方向偏移所述第二合法指令长度,得到第三地址;
读取所述第三地址处的第二解析指令,并判断所述第二解析指令是否为所述入栈指令,当判断出所述第二解析指令为所述入栈指令时,判断所述第三地址是否等于所述当前函数对应的跳转地址,所述当前函数对应的跳转地址存放有从所述当前函数跳转至后置调用函数的跳转指令,所述后置调用函数为函数调用顺序在所述当前函数的函数调用顺序之后的函数;当判断出所述第三地址等于所述跳转地址时,将所述当前函数的下一级函数确定为新的当前函数,并触发执行所述的确定当前函数的目标栈帧对应的栈帧参数的操作。
作为一种可选的实施方式,在本发明第一方面中,所述栈帧参数还包括所述目标栈帧的栈顶寄存器的值;
其中,当所述目标栈帧为所述非第一级栈帧时,所述目标栈帧对应的栈帧参数是通过以下方式确定出的:
根据当前函数的上一级函数对应的入栈总长度以及该当前函数的上一级函数对应的栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值;其中,该当前函数的上一级函数对应的入栈总长度是根据该当前函数的上一级函数对应的每个入栈指令的入栈长度确定出的;其中,当前函数的上一级函数为在当前函数之前最新回溯过的函数;
根据在运行该当前函数的上一级函数时返回寄存器对应的栈内偏移量、该当前函数的上一级函数对应的栈顶寄存器的值以及该当前函数的上一级函数对应的入栈总长度,确定在运行该当前函数的上一级函数时所述返回寄存器的值,并根据在运行该当前函数的上一级函数时所述返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址。
作为一种可选的实施方式,在本发明第一方面中,所述方法还包括:
当判断出所述第一解析指令不为所述入栈指令时,将所述第二地址确定为新的基准地址,并重新执行所述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址的步骤,以及执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的步骤;
以及,所述方法还包括:
当判断出所述第一解析指令为所述入栈指令,且判断出所述第一解析指令未触发所述返回寄存器完成入栈时,将所述第二地址确定为新的基准地址,并重新执行所述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址对应的步骤,以及执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的步骤。
作为一种可选的实施方式,在本发明第一方面中,所述判断所述第一解析指令是否为入栈指令,包括:
分析所述第一解析指令,得到所述第一解析指令对应的分析结果,判断所述分析结果是否包括预先确定出的特征码;
当判断出所述分析结果包括所述特征码时,确定所述第一解析指令为入栈指令;
当判断出所述分析结果不包括所述特征码时,确定所述第一解析指令不为入栈指令;
以及,在判断出所述第三地址等于所述跳转地址之后,所述的将所述当前函数的下一级函数确定为新的当前函数之前,所述方法还包括:
判断所述当前函数的下一级函数对应的跳转地址是否为预设任务退出地址,当判断出所述当前函数的下一级函数对应的跳转地址不为所述预设任务退出地址时,确定所述当前函数的下一级函数对应的跳转地址中存放有从所述下一级函数跳转至所述当前函数的下一级函数对应的后置调用函数的跳转指令,并触发执行所述的将所述当前函数的下一级函数确定为新的当前函数的操作;
当判断出所述下一级函数对应的跳转地址为所述预设任务退出地址时,退出栈回溯接口。
作为一种可选的实施方式,在本发明第一方面中,当判断出所述第一解析指令已触发所述返回寄存器完成入栈时,所述将所述第二地址确定为所述目标栈帧对应的当前函数的上边界之后,所述方法还包括:
根据所述第一解析指令,确定所述第一解析指令对应的指令列表;
分析所述指令列表,得到所述指令列表中第一置位参数对应的第一数量以及第二置位参数对应的第二数量,其中所述第一置位参数为所述指令列表所包括的所有比特位中处于预设置位状态的参数,所述第二置位参数为所述指令列表所包括的所有比特位中处于预设比特位置区间内且处于所述预设置位状态的参数;
根据所述第一数量以及预设寄存器宽度,确定所述第一解析指令对应的入栈长度;
根据所述第二数量以及所述预设寄存器宽度,确定所述返回寄存器对应的入栈偏移量;
根据所述入栈长度、所述入栈偏移量以及确定出的所述当前函数的栈顶寄存器的值确定所述返回寄存器的值,所述返回寄存器的值用于计算所述当前函数的上一级函数栈帧对应的程序运行地址的值,所述当前函数的上一级函数栈帧对应的程序运行地址的值用于确定所述下一级函数对应的跳转地址。
作为一种可选的实施方式,在本发明第一方面中,所述根据预设的第一指令长度检测算法,确定第一合法指令长度,包括:
根据预设的第一指令长度检测算法,以确定出的基准地址为基准向低地址方向偏移第一预设长度,得到第一待定指令;
确定当前栈回溯对应的运行架构类型,并根据所述运行架构类型确定指令集状态,所述运行架构类型对应有至少一种指令集状态,每个所述指令集状态至少对应一个指令长度;
根据每个所述指令集状态分别对应的指令长度,判断所述第一待定指令的指令长度是否为所有所述指令集状态对应的其中一个指令长度;
当判断出所述第一待定指令的指令长度不为所有所述指令集状态对应的任一指令长度时,将第二预设长度确定为第一合法指令长度;
当判断出所述第一待定指令的指令长度为所有所述指令集状态对应的其中一个指令长度时,确定所述第一预设长度为第一合法指令长度。
作为一种可选的实施方式,在本发明第一方面中,当所述目标栈帧为所述第一级栈帧时,所述确定当前函数的目标栈帧对应的栈帧参数,包括:
根据预设栈回溯启动指令调用回溯函数,并根据所述回溯函数判断当前运行的目标函数是否为异常处理函数,所述回溯函数为启动栈回溯流程的函数;
当判断出所述目标函数为所述异常处理函数时,调用确定出的异常栈获取异常信息对应的程序运行地址以及栈顶寄存器对应的值,作为当前函数的目标栈帧对应的栈帧参数;
当判断出所述待处理函数不为所述异常处理函数时,确定待回溯的指定任务,并获取所述指定任务对应的栈帧参数,将所述指定任务对应的栈帧参数所在的函数确定为当前函数以及将所述指定任务对应的栈帧参数确定为所述当前函数的目标栈帧对应的栈帧参数;所述指定任务为当前运行任务或非当前运行任务;
其中,所述获取所述指定任务对应的栈帧参数,包括:
当所述指定任务为所述当前运行任务时,根据预设汇编程序获取当前CPU对应的程序运行地址以及栈顶寄存器对应的值,作为所述指定任务对应的栈帧参数;
当所述指定任务为所述非当前运行任务时,从所述指定任务对应的上下文信息中提取程序运行地址以及栈顶寄存器的值,作为所述指定任务对应的栈帧参数。
本发明第二方面公开了一种变长指令集系统栈回溯的实现装置,所述装置包括:
确定模块,用于确定当前函数的目标栈帧对应的栈帧参数,所述目标栈帧对应的栈帧参数包括所述目标栈帧对应的第一地址,所述第一地址为所述目标栈帧对应的程序运行地址,所述目标栈帧为第一级栈帧或者为非第一级栈帧;
寻址模块,用于根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址;初始确定出的基准地址为所述第一地址;
入栈判断模块,用于读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令;
第一判断模块,用于当所述入栈判断模块判断出所述第一解析指令为所述入栈指令时,判断所述第一解析指令是否已触发返回寄存器完成入栈;
所述确定模块,还用于当所述第一判断模块判断出所述第一解析指令已触发所述返回寄存器完成入栈时,将所述第二地址确定为所述目标栈帧对应的当前函数的上边界;
所述寻址模块,还用于根据预设的第二指令长度检测算法,确定第二合法指令长度,以所述第二地址为基准向高地址方向偏移所述第二合法指令长度,得到第三地址;
所述入栈判断模块,还用于读取所述第三地址处的第二解析指令,并判断所述第二解析指令是否为所述入栈指令;
所述第一判断模块,还用于当所述入栈判断模块判断出所述第二解析指令为所述入栈指令时,判断所述第三地址是否等于所述当前函数对应的跳转地址,所述当前函数对应的跳转地址存放有从所述当前函数跳转至后置调用函数的跳转指令,所述后置调用函数为函数调用顺序在所述当前函数的函数调用顺序之后的函数;
所述确定模块,还用于当所述第一判断模块判断出所述第三地址等于所述跳转地址时,将所述当前函数的下一级函数确定为新的当前函数,并触发执行所述的确定当前函数的目标栈帧对应的栈帧参数的操作。
作为一种可选的实施方式,在本发明第二方面中,所述栈帧参数还包括所述目标栈帧的栈顶寄存器的值;
其中,当所述目标栈帧为所述非第一级栈帧时,所述目标栈帧对应的栈帧参数是通过以下方式确定出的:
根据当前函数的上一级函数对应的入栈总长度以及该当前函数的上一级函数对应的栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值;其中,该当前函数的上一级函数对应的入栈总长度是根据该当前函数的上一级函数对应的每个入栈指令的入栈长度确定出的;其中,当前函数的上一级函数为在当前函数之前最新回溯过的函数;
根据在运行该当前函数的上一级函数时返回寄存器对应的栈内偏移量、该当前函数的上一级函数对应的栈顶寄存器的值以及该当前函数的上一级函数对应的入栈总长度,确定在运行该当前函数的上一级函数时所述返回寄存器的值,并根据在运行该当前函数的上一级函数时所述返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址。
作为一种可选的实施方式,在本发明第二方面中,所述确定模块,还用于当所述入栈判断模块判断出所述第一解析指令不为所述入栈指令时,将所述第二地址确定为新的基准地址,并触发所述寻址模块重新执行所述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址的操作,以及触发所述入栈判断模块执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的操作;
所述确定模块,还用于当所述入栈判断模块判断出所述第一解析指令为所述入栈指令,且所述第一判断模块判断出所述第一解析指令未触发所述返回寄存器完成入栈时,将所述第二地址确定为新的基准地址,并触发所述寻址模块重新执行所述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址对应的操作,以及触发所述入栈判断模块执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的操作。
作为一种可选的实施方式,在本发明第二方面中,所述入栈判断模块判断所述第一解析指令是否为入栈指令的方式具体包括:
分析所述第一解析指令,得到所述第一解析指令对应的分析结果,判断所述分析结果是否包括预先确定出的特征码;
当判断出所述分析结果包括所述特征码时,确定所述第一解析指令为入栈指令;
当判断出所述分析结果不包括所述特征码时,确定所述第一解析指令不为入栈指令;
以及,所述装置还包括:
第二判断模块,用于当所述入栈判断模块判断出所述第二解析指令为所述入栈指令时,以及在所述第一判断模块判断出所述第三地址等于所述跳转地址之后,所述确定模块将所述当前函数的下一级函数确定为新的当前函数之前,判断所述当前函数的下一级函数对应的跳转地址是否为预设任务退出地址;
所述确定模块,还用于当所述第二判断模块判断出所述当前函数的下一级函数对应的跳转地址不为所述预设任务退出地址时,确定所述当前函数的下一级函数对应的跳转地址中存放有从所述当前函数的下一级函数跳转至所述当前函数的下一级函数对应的后置调用函数的跳转指令,并触发执行所述的将所述当前函数的下一级函数确定为新的当前函数的操作;
退出模块,用于当所述第二判断模块判断出所述下一级函数对应的跳转地址为所述预设任务退出地址时,退出栈回溯接口。
作为一种可选的实施方式,在本发明第二方面中,所述确定模块,还用于当所述第一判断模块判断出所述第一解析指令已触发所述返回寄存器完成入栈时,所述将所述第二地址确定为所述目标栈帧对应的当前函数的上边界之后,根据所述第一解析指令,确定所述第一解析指令对应的指令列表;
所述装置还包括:
分析模块,用于分析所述确定模块确定出的所述指令列表,得到所述指令列表中第一置位参数对应的第一数量以及第二置位参数对应的第二数量,其中所述第一置位参数为所述指令列表所包括的所有比特位中处于预设置位状态的参数,所述第二置位参数为所述指令列表所包括的所有比特位中处于预设比特位置区间内且处于所述预设置位状态的参数;
所述确定模块,还用于根据所述第一数量以及预设寄存器宽度,确定所述第一解析指令对应的入栈长度;
所述确定模块,还用于根据所述第二数量以及所述预设寄存器宽度,确定所述返回寄存器对应的入栈偏移量;
所述确定模块,还用于根据所述入栈长度、所述入栈偏移量以及确定出的所述当前函数的栈顶寄存器的值确定所述返回寄存器的值,所述返回寄存器的值用于计算所述当前函数的上一级函数栈帧对应的程序运行地址的值,所述当前函数的上一级函数栈帧对应的程序运行地址的值用于确定所述下一级函数对应的跳转地址。
作为一种可选的实施方式,在本发明第二方面中,所述确定模块根据预设的第一指令长度检测算法,确定第一合法指令长度的方式具体包括:
根据预设的第一指令长度检测算法,以确定出的基准地址为基准向低地址方向偏移第一预设长度,得到第一待定指令;
确定当前栈回溯对应的运行架构类型,并根据所述运行架构类型确定指令集状态,所述运行架构类型对应有至少一种指令集状态,每个所述指令集状态至少对应一个指令长度;
根据每个所述指令集状态分别对应的指令长度,判断所述第一待定指令的指令长度是否为所有所述指令集状态对应的其中一个指令长度;
当判断出所述第一待定指令的指令长度不为所有所述指令集状态对应的任一指令长度时,将第二预设长度确定为第一合法指令长度;
当判断出所述第一待定指令的指令长度为所有所述指令集状态对应的其中一个指令长度时,确定所述第一预设长度为第一合法指令长度。
作为一种可选的实施方式,在本发明第二方面中,当所述目标栈帧为所述第一级栈帧时,所述确定模块确定当前函数的目标栈帧对应的栈帧参数的方式具体包括:
根据预设栈回溯启动指令调用回溯函数,并根据所述回溯函数判断当前运行的目标函数是否为异常处理函数,所述回溯函数为启动栈回溯流程的函数;
当判断出所述目标函数为所述异常处理函数时,调用确定出的异常栈获取异常信息对应的程序运行地址以及栈顶寄存器对应的值,作为当前函数的目标栈帧对应的栈帧参数;
当判断出所述待处理函数不为所述异常处理函数时,确定待回溯的指定任务,并获取所述指定任务对应的栈帧参数,将所述指定任务对应的栈帧参数所在的函数确定为当前函数以及将所述指定任务对应的栈帧参数确定为所述当前函数的目标栈帧对应的栈帧参数;所述指定任务为当前运行任务或非当前运行任务;
其中,所述获取所述指定任务对应的栈帧参数,包括:
当所述指定任务为所述当前运行任务时,根据预设汇编程序获取当前CPU对应的程序运行地址以及栈顶寄存器对应的值,作为所述指定任务对应的栈帧参数;
当所述指定任务为所述非当前运行任务时,从所述指定任务对应的上下文信息中提取程序运行地址以及栈顶寄存器的值,作为所述指定任务对应的栈帧参数。
本发明第三方面公开了另一种变长指令集系统栈回溯的实现装置,所述装置包括:
存储有可执行程序代码的存储器;
与所述存储器耦合的处理器;
所述处理器调用所述存储器中存储的所述可执行程序代码,执行本发明第一方面公开的变长指令集系统栈回溯的实现方法。
本发明第四方面公开了一种计算机存储介质,所述计算机存储介质存储有计算机指令,所述计算机指令被调用时,用于执行本发明第一方面公开的变长指令集系统栈回溯的实现方法。
与现有技术相比,本发明实施例具有以下有益效果:
本发明实施例中,提供了一种变长指令集系统栈回溯的实现方法,该方法包括:确定当前函数的目标栈帧对应的栈帧参数,目标栈帧对应的栈帧参数包括目标栈帧对应的第一地址,第一地址为目标栈帧对应的程序运行地址,目标栈帧为第一级栈帧或者为非第一级栈帧;根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址;初始确定出的基准地址为第一地址;读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令,当判断出第一解析指令为入栈指令时,判断第一解析指令是否已触发返回寄存器完成入栈,当判断出第一解析指令已触发返回寄存器完成入栈时,将第二地址确定为目标栈帧对应的当前函数的上边界;根据预设的第二指令长度检测算法,确定第二合法指令长度,以第二地址为基准向高地址方向偏移第二合法指令长度,得到第三地址;读取第三地址处的第二解析指令,并判断第二解析指令是否为入栈指令,当判断出第二解析指令为入栈指令时,判断第三地址是否等于当前函数对应的跳转地址,当前函数对应的跳转地址存放有从当前函数跳转至下一级函数的跳转指令;当判断出第三地址等于跳转地址时,将下一级函数确定为新的当前函数,并触发执行上述的确定当前函数的目标栈帧对应的栈帧参数的操作。可见,实施本发明,能够自动确定当前需要执行栈回溯操作的函数对应的栈帧参数、合法指令长度,进而在预设回溯方向上读取到正确的待解析指令,在一定程度上提高了读取到指令的准确性;进一步的,能够在判断出指令为入栈指令且判断出该指令触发返回寄存器入栈之后,自动根据返回寄存器入栈确定当前函数的上边界,有利于提高后续执行栈回溯流程时确定上一级函数栈顶寄存器的值的确定效率以及确定准确性;此外,通过一个完整的栈回溯流程,在判断出第三地址为跳转地址之前,自动重复执行栈回溯,直至判断出第三地址为跳转地址后将下一级函数确定为新的当前函数,该栈回溯流程不依赖于任何的编译选项、也不需要引入额外的开销、更能够适用于变长指令集系统,提高了栈回溯的回溯效率以及回溯准确性,同时解决了现有栈回溯手段中存在的使用局限高的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例公开的一种变长指令集系统栈回溯的实现方法的流程示意图;
图2是本发明实施例公开的另一种变长指令集系统栈回溯的实现方法的流程示意图;
图3是本发明实施例公开的一种变长指令集系统栈回溯的实现装置的结构示意图;
图4是本发明实施例公开的另一种变长指令集系统栈回溯的实现装置的结构示意图;
图5是本发明实施例公开的又一种变长指令集系统栈回溯的实现装置的结构示意图;
图6是本发明实施例公开的又一种变长指令集系统栈回溯的实现方法的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或端没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或端固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明公开了一种变长指令集系统栈回溯的实现方法及装置,能够自动确定当前需要执行栈回溯操作的函数对应的栈帧参数、合法指令长度,进而在预设回溯方向上读取到正确的待解析指令,在一定程度上提高了读取到指令的准确性;进一步的,能够在判断出指令为入栈指令且判断出该指令触发返回寄存器入栈之后,自动根据返回寄存器入栈确定当前函数的上边界,有利于提高后续执行栈回溯流程时确定上一级函数栈顶寄存器的值的确定效率以及确定准确性;此外,通过一个完整的栈回溯流程,在判断出第三地址为跳转地址之前,自动重复执行栈回溯,直至判断出第三地址为跳转地址后将下一级函数确定为新的当前函数,该栈回溯流程不依赖于任何的编译选项、也不需要引入额外的开销、更能够适用于变长指令集系统,提高了栈回溯的回溯效率以及回溯准确性,同时解决了现有栈回溯手段中存在的使用局限高的问题。以下分别进行详细说明。
实施例一
请参阅图1以及图6,图1及图6是本发明实施例公开的一种变长指令集系统栈回溯的实现方法的流程示意图。其中,图1及图6所描述的变长指令集系统栈回溯的实现方法可以应用于变长指令集系统栈回溯的实现装置中,本发明实施例不做限定。如图1及图6所示,该变长指令集系统栈回溯的实现方法可以包括以下操作:
101、确定当前函数的目标栈帧对应的栈帧参数。
本发明实施例中,目标栈帧对应的栈帧参数包括目标栈帧对应的第一地址,第一地址为目标栈帧对应的程序运行地址,目标栈帧为第一级栈帧或者为非第一级栈帧。
本发明实施例中,可选的,栈帧参数还包括目标栈帧的栈顶寄存器的值;
其中,当目标栈帧为非第一级栈帧时,目标栈帧对应的栈帧参数可以通过以下方式确定出:
根据当前函数的上一级函数对应的入栈总长度以及该当前函数的上一级函数对应的栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值;其中,该当前函数的上一级函数对应的入栈总长度是根据该当前函数的上一级函数对应的每个入栈指令的入栈长度确定出的;其中,当前函数的上一级函数为在当前函数之前最新回溯过的函数;
根据在运行该当前函数的上一级函数时返回寄存器对应的栈内偏移量、该当前函数的上一级函数对应的栈顶寄存器的值以及该当前函数的上一级函数对应的入栈总长度,确定在运行该当前函数的上一级函数时返回寄存器的值,并根据在运行该当前函数的上一级函数时返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址。
本发明实施例中,需要说明的是,上述提及的上一级函数以及下一级函数是相对于栈回溯流程中栈回溯方向进行定义的,与各个函数的实际对应的函数地址无关同时也与各个函数实际应用中的调用关系无关,也即,当函数A为当前正在回溯的函数,函数B为回溯函数A之前最新回溯的函数,则称函数B为函数A的上一级函数,同理,回溯完函数A后若要继续回溯函数C,则函数C称为函数A的下一级函数,实际应用中可适应性调整,本发明实施例不做限定。
需要说明的是,在本发明实施例中,为了便于理解,对上述计算当前函数目标栈帧的栈顶寄存器的值、确定在运行该当前函数的上一级函数时返回寄存器的值以及计算该当前函数目标栈帧对应的第一地址的方式进行举例说明:
其中,当前函数目标栈帧的栈顶寄存器的值(记为SP1)=该当前函数的上一级函数对应的栈顶寄存器的值(记为SP2)+该当前函数的上一级函数对应的入栈指令的入栈长度;
返回寄存器的值(记为LR1)=当前函数对应的栈顶寄存器的值SP1+该当前函数对应的入栈指令的指令入栈长度-该返回寄存器的栈内偏移量(记为LR2);
该当前函数目标栈帧对应的第一地址(记为PC1)=返回寄存器的值LR1-跳转指令长度;
进一步的,假定SP2=0x40800000,确定出第一解析指令对应的指令列表中,入栈指令的指令个数为6,每个入栈指令默认对应的通用寄存器宽度为4bit,则该当前函数对应的入栈指令的入栈长度=6*4=24(24对应十六进制为0x18);确定出指令列表中0-13bit中二进制中1的个数为4,每个通用寄存器宽度默认为4bit,则返回寄存器的栈内偏移量LR2=4*4=16(16的十六进制为0x10);则可以确定出保存返回寄存器的值的地址为:LR1=0x40800000+0x18-0x10=0x40800004;
假定跳转指令长度为4bit,则PC1=LR1-4bit=0x40800004-4=0x40800000,本发明实施例不做限定。
可见,在本发明实施例中,针对目标栈帧为非第一级栈帧的情况,提供了通过当前函数的上一级函数对应的入栈总长度、栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值的计算方案;同时也提供了通过确定返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址的计算方式;实现针对不同类型的目标栈帧时,能够自适应调整栈帧参数的计算方式,提高了确定出的栈帧参数的准确性,在一定程度上提高了后续栈回溯流程的回溯准确性。
本发明实施例中,可选的,当目标栈帧为第一级栈帧时,确定当前函数的目标栈帧对应的栈帧参数,包括:
根据预设栈回溯启动指令调用回溯函数,并根据回溯函数判断当前运行的目标函数是否为异常处理函数,回溯函数为启动栈回溯流程的函数;
当判断出目标函数为异常处理函数时,调用确定出的异常栈获取异常信息对应的程序运行地址以及栈顶寄存器对应的值,作为当前函数的目标栈帧对应的栈帧参数;
当判断出待处理函数不为异常处理函数时,确定待回溯的指定任务,并获取指定任务对应的栈帧参数,将指定任务对应的栈帧参数所在的函数确定为当前函数以及将指定任务对应的栈帧参数确定为当前函数的目标栈帧对应的栈帧参数;指定任务为当前运行函数或非当前运行函数;
其中,获取指定任务对应的栈帧参数,包括:
当指定任务为当前运行函数时,根据预设汇编程序获取当前CPU对应的程序运行地址以及栈顶寄存器对应的值,作为指定任务对应的栈帧参数;
当指定任务为非当前运行函数时,从指定任务对应的上下文信息中提取程序运行地址以及栈顶寄存器的值,作为指定任务对应的栈帧参数。
可见,本发明实施例中,在调用回溯函数之后,能够自动判断该回溯函数的函数类型(判断是否为异常处理函数),并根据判断结果执行匹配的判断操作:判断为是时通过异常栈获取栈帧参数;判断为否时,在确定待回溯的指定任务之后再获取指定任务的栈帧参数;实现了自适应调整栈帧参数的确定方法,提高了栈帧参数的确定效率以及确定准确性。
102、根据预设的第一指令长度检测算法,确定第一合法指令长度。
本发明实施例中,步骤102根据预设的第一指令长度检测算法,确定第一合法指令长度的方式具体可以包括以下操作:
根据预设的第一指令长度检测算法,以确定出的基准地址为基准向低地址方向偏移第一预设长度,得到第一待定指令;
确定当前栈回溯对应的运行架构类型,并根据运行架构类型确定指令集状态,运行架构类型对应有至少一种指令集状态,每个指令集状态至少对应一个指令长度;
根据每个指令集状态分别对应的指令长度,判断第一待定指令的指令长度是否为所有指令集状态对应的其中一个指令长度;
当判断出第一待定指令的指令长度不为所有指令集状态对应的任一指令长度时,将第二预设长度确定为第一合法指令长度;
当判断出第一待定指令的指令长度为所有指令集状态对应的其中一个指令长度时,确定第一预设长度为第一合法指令长度。
本发明实施例中,需要说明的是,上述运行架构类型包括ARM类型或RISC-V类型;其中,当运行架构类型为ARM类型时,指令集状态包括ARM态和/或Thumb态。
可见,本发明实施例中,在确定第一合法指令长度时,能够根据不同的运行架构类型,确定对应的指令集状态以及该指令集状态对应的指令长度,从而根据不同指令集状态的指令长度确定出第一预设长度,提高了确定出的第一预设长度的准确性,从而提高了第一待定指令的确定准确性。
103、以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址。
本发明实施例中,初始确定出的基准地址为第一地址。
104、读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令。
本发明实施例中,当步骤104的判断结果为是时,执行步骤105;可选的,当步骤104的判断结果为否时,也即判断出第一解析指令不为入栈指令时,将第二地址确定为新的基准地址,并重新执行上述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址的步骤,以及执行上述的读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令的步骤;
进一步的,上述判断第一解析指令是否为入栈指令的方式具体可以包括以下操作:
分析第一解析指令,得到第一解析指令对应的分析结果,判断分析结果是否包括预先确定出的特征码;
当判断出分析结果包括特征码时,确定第一解析指令为入栈指令;
当判断出分析结果不包括特征码时,确定第一解析指令不为入栈指令;
以及,在判断出第三地址等于跳转地址之后,上述将当前函数的下一级函数确定为新的当前函数之前,方法还包括:
判断当前函数的下一级函数对应的跳转地址是否为预设任务退出地址,当判断出当前函数的下一级函数对应的跳转地址不为预设任务退出地址时,确定当前函数的下一级函数对应的跳转地址中存放有从当前函数的下一级函数跳转至当前函数的下一级函数对应的后置调用函数的跳转指令,并触发执行上述的将当前函数的下一级函数确定为新的当前函数的操作;
当判断出下一级函数对应的跳转地址为预设任务退出地址时,退出栈回溯接口。
可见,本发明实施例中,通过特征码来确定第一解析指令是否为入栈指令,有利于提高入栈指令的确定效率以及确定准确性;此外,上述将下一级函数确定为新的当前函数之前,会再判断下一级函数对应的跳转地址是否为预设任务退出地址,若是则退出栈回溯接口,结束当前栈回溯流程,设置了结束栈回溯流程的步骤,防止在完成栈回溯流程后仍重复执行栈回溯操作,导致程序出现卡顿出错的情况,一定程度上实现了栈回溯的流程优化,提高了栈回溯成功率。
105、当判断出第一解析指令为入栈指令时,判断第一解析指令是否已触发返回寄存器完成入栈。
本发明实施例中,当步骤105的判断结果为是时,执行步骤106;可选的,当步骤105的判断结果为否时,也即判断出第一解析指令为入栈指令,且判断出第一解析指令未触发返回寄存器完成入栈时,将第二地址确定为新的基准地址,并重新执行上述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址对应的步骤,以及执行上述的读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令的步骤。
106、当判断出第一解析指令已触发返回寄存器完成入栈时,将第二地址确定为目标栈帧对应的当前函数的上边界。
107、根据预设的第二指令长度检测算法,确定第二合法指令长度。
本发明实施例中,可选的,上述根据预设的第二指令长度检测算法,确定第二合法指令长度的方式具体可以包括以下操作:
根据预设的第二指令长度检测算法,以第二地址为基准向高地址方向偏移第一预设长度,得到第二待定指令;
根据每个指令集状态分别对应的指令长度,判断第二待定指令的指令长度是否为所有指令集状态对应的其中一个指令长度;
当判断出第二待定指令的指令长度不为所有指令集状态对应的任一指令长度时,将第二预设长度确定为第二合法指令长度;
当判断出第二待定指令的指令长度为所有指令集状态对应的其中一个指令长度时,确定第一预设长度为第二合法指令长度。
108、以第二地址为基准向高地址方向偏移第二合法指令长度,得到第三地址。
109、读取第三地址处的第二解析指令,并判断第二解析指令是否为入栈指令。
110、当判断出第二解析指令为入栈指令时,判断第三地址是否等于当前函数对应的跳转地址。
本发明实施例中,当前函数对应的跳转地址存放有从当前函数跳转至后置调用函数的跳转指令,后置调用函数为函数调用顺序在当前函数的函数调用顺序之后的函数。
111、当判断出第三地址等于跳转地址时,将当前函数的下一级函数确定为新的当前函数。
可见,实施图1及图6所描述的变长指令集系统栈回溯的实现方法,能够自动确定当前需要执行栈回溯操作的函数对应的栈帧参数、合法指令长度,进而在预设回溯方向上读取到正确的待解析指令,在一定程度上提高了读取到指令的准确性;进一步的,能够在判断出指令为入栈指令且判断出该指令触发返回寄存器入栈之后,自动根据返回寄存器入栈确定当前函数的上边界,有利于提高后续执行栈回溯流程时确定上一级函数栈顶寄存器的值的确定效率以及确定准确性;此外,通过一个完整的栈回溯流程,在判断出第三地址为跳转地址之前,自动重复执行栈回溯,直至判断出第三地址为跳转地址后将下一级函数确定为新的当前函数,该栈回溯流程不依赖于任何的编译选项、也不需要引入额外的开销、更能够适用于变长指令集系统,提高了栈回溯的回溯效率以及回溯准确性,同时解决了现有栈回溯手段中存在的使用局限高的问题。
在一个可选的实施例中,当判断出下一级函数对应的跳转地址不为预设任务退出地址时,上述确定该下一级函数对应的跳转地址中存放有从当前函数的下一级函数跳转至当前函数的下一级函数对应的后置调用函数的跳转指令之后,以及触发执行上述的将当前函数的下一级函数确定为新的当前函数的操作之前,该变长指令集系统栈回溯的实现方法还可以包括以下操作:
判断上述当前函数的下一级函数中是否发生指令集状态切换,当判断出上述下一级函数中未发生指令集状态切换时,触发执行上述的将当前函数的下一级函数确定为新的当前函数的操作;
当判断出上述当前函数的下一级函数中发生指令集状态切换时,根据当前函数的下一级函数对应的运行架构类型,确定该运行架构类型对应的目标指令集状态以及目标指令集状态对应的目标指令长度;
将该目标指令集状态确定为该当前函数的下一级函数执行栈回溯时对应的新的指令集状态,以及将该目标指令长度确定为该当前函数的下一级函数执行栈回溯时对应的新的指令长度,并触发执行上述的将当前函数的下一级函数确定为新的当前函数的操作。
可见,在该可选的实施例中,在回溯到新的函数前,能够自动判断指令集状态是否发生切换,并根据判断结果执行匹配的操作,实现了指令集状态的动态切换,提高了栈回溯流程的回溯准确性以及可靠性。
实施例二
请参阅图2,图2是本发明实施例公开的另一种变长指令集系统栈回溯的实现方法的流程示意图。其中,图2所描述的变长指令集系统栈回溯的实现方法可以应用于变长指令集系统栈回溯的实现装置中,本发明实施例不做限定。如图2所示,该变长指令集系统栈回溯的实现方法可以包括以下操作:
201、确定当前函数的目标栈帧对应的栈帧参数。
202、根据预设的第一指令长度检测算法,确定第一合法指令长度。
203、以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址。
204、读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令。
205、当判断出第一解析指令为入栈指令时,判断第一解析指令是否已触发返回寄存器完成入栈。
206、当判断出第一解析指令已触发返回寄存器完成入栈时,将第二地址确定为目标栈帧对应的当前函数的上边界。
207、根据第一解析指令,确定第一解析指令对应的指令列表。
208、分析指令列表,得到指令列表中第一置位参数对应的第一数量以及第二置位参数对应的第二数量。
本发明实施例中,第一置位参数为指令列表所包括的所有比特位中处于预设置位状态的参数,第二置位参数为指令列表所包括的所有比特位中处于预设比特位置区间内且处于预设置位状态的参数。
需要说明的是,该预设置位状态可以为二进制的0或二进制的1,预设比特位置区间可以为在指令列表中第0-13bit对应的比特区间,本发明实施例不做限定。
209、根据第一数量以及预设寄存器宽度,确定第一解析指令对应的入栈长度。
210、根据第二数量以及预设寄存器宽度,确定返回寄存器对应的入栈偏移量。
211、根据入栈长度、入栈偏移量以及确定出的当前函数的栈顶寄存器的值确定返回寄存器的值。
本发明实施例中,返回寄存器的值用于计算当前函数的上一级函数栈帧对应的程序运行地址的值,当前函数的上一级函数栈帧对应的程序运行地址的值用于确定下一级函数对应的跳转地址。
212、根据预设的第二指令长度检测算法,确定第二合法指令长度。
213、以第二地址为基准向高地址方向偏移第二合法指令长度,得到第三地址。
214、读取第三地址处的第二解析指令,并判断第二解析指令是否为入栈指令。
215、当判断出第二解析指令为入栈指令时,判断第三地址是否等于当前函数对应的跳转地址。
216、当判断出第三地址等于跳转地址时,将当前函数的下一级函数确定为新的当前函数。
本发明实施例中,针对步骤201-步骤206,以及步骤212-步骤216的其他描述请参阅实施例一中针对步骤101-步骤106,以及步骤107-步骤111的其他具体描述,本发明实施例不再赘述。
可见,实施图2所描述的变长指令集系统栈回溯的实现方法,能够根据第一解析指令确定出对应的指令列表后,智能化确定第一置位参数的第一数量以及第二置位参数对应的第二数量,从而自动计算第一解析指令的入栈长度、返回寄存器的入栈偏移量,进而该入栈长度与该入栈偏移量用于确定返回寄存器的值,该返回寄存器的值用于后续计算上一级函数栈帧对应的程序运行地址的值,其中上一级函数栈帧对应的程序运行地址的值用于确定下一级函数对应的跳转地址,有利于提高栈回溯流程中的跳转至下一级函数时跳转至正确的地址,提高了栈回溯的准确性和可靠性。
实施例三
请参阅图3,图3是本发明实施例公开的一种变长指令集系统栈回溯的实现装置的结构示意图。该变长指令集系统栈回溯的实现装置可以应用于RISC-V芯片中,也可以应用在ARM芯片中,本发明实施例不做限定。如图3所示,该变长指令集系统栈回溯的实现装置可以包括确定模块301、寻址模块302、入栈判断模块303以及第一判断模块304,其中:
确定模块301,用于确定当前函数的目标栈帧对应的栈帧参数,目标栈帧对应的栈帧参数包括目标栈帧对应的第一地址,第一地址为目标栈帧对应的程序运行地址,目标栈帧为第一级栈帧或者为非第一级栈帧。
寻址模块302,用于根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址;初始确定出的基准地址为第一地址。
入栈判断模块303,用于读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令。
第一判断模块304,用于当入栈判断模块303判断出第一解析指令为入栈指令时,判断第一解析指令是否已触发返回寄存器完成入栈。
确定模块301,还用于当第一判断模块304判断出第一解析指令已触发返回寄存器完成入栈时,将寻址模块302得到的第二地址确定为目标栈帧对应的当前函数的上边界。
寻址模块302,还用于根据预设的第二指令长度检测算法,确定第二合法指令长度,以第二地址为基准向高地址方向偏移第二合法指令长度,得到第三地址。
入栈判断模块303,还用于读取第三地址处的第二解析指令,并判断第二解析指令是否为入栈指令。
第一判断模块304,还用于当入栈判断模块303判断出第二解析指令为入栈指令时,判断第三地址是否等于当前函数对应的跳转地址,当前函数对应的跳转地址存放有从当前函数跳转至后置调用函数的跳转指令,后置调用函数为函数调用顺序在当前函数的函数调用顺序之后的函数。
确定模块301,还用于当入栈判断模块303判断出第二解析指令为入栈指令,且第一判断模块304判断出第三地址等于跳转地址时,将当前函数的下一级函数确定为新的当前函数,并触发执行上述的确定当前函数的目标栈帧对应的栈帧参数的操作。
可见,实施图3所描述的变长指令集系统栈回溯的实现装置,能够自动确定当前需要执行栈回溯操作的函数对应的栈帧参数、合法指令长度,进而在预设回溯方向上读取到正确的待解析指令,在一定程度上提高了读取到指令的准确性;进一步的,能够在判断出指令为入栈指令且判断出该指令触发返回寄存器入栈之后,自动根据返回寄存器入栈确定当前函数的上边界,有利于提高后续执行栈回溯流程时确定上一级函数栈顶寄存器的值的确定效率以及确定准确性;此外,通过一个完整的栈回溯流程,在判断出第三地址为跳转地址之前,自动重复执行栈回溯,直至判断出第三地址为跳转地址后将下一级函数确定为新的当前函数,该栈回溯流程不依赖于任何的编译选项、也不需要引入额外的开销、更能够适用于变长指令集系统,提高了栈回溯的回溯效率以及回溯准确性,同时解决了现有栈回溯手段中存在的使用局限高的问题。
在一个可选的实施例中,确定模块301,还用于当入栈判断模块303判断出第一解析指令不为入栈指令时,将第二地址确定为新的基准地址,并触发寻址模块302重新执行上述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址的操作,以及触发入栈判断模块303执行上述的读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令的操作。
确定模块301,还用于当入栈判断模块303判断出第一解析指令为入栈指令,且第一判断模块304判断出第一解析指令未触发返回寄存器完成入栈时,将第二地址确定为新的基准地址,并触发寻址模块302重新执行上述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址对应的操作,以及触发入栈判断模块303执行上述的读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令的操作。
可见,在该可选的实施例中,针对判断出第一解析指令不为入栈指令或第一解析指令未触发返回寄存器完成入栈的情况,设置了循环流程,重新触发寻址模块302执行上述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移第一合法指令长度,得到第二地址对应的操作,以及触发入栈判断模块303执行上述的读取第二地址处的第一解析指令,并判断第一解析指令是否为入栈指令的操作,达到栈回溯的流程优化,提高了栈回溯流程的回溯完整性以及回溯可靠性。
在该可选的实施例中,进一步可选的,入栈判断模块303判断第一解析指令是否为入栈指令的方式具体包括:
分析第一解析指令,得到第一解析指令对应的分析结果,判断分析结果是否包括预先确定出的特征码;
当判断出分析结果包括特征码时,确定第一解析指令为入栈指令;
当判断出分析结果不包括特征码时,确定第一解析指令不为入栈指令;
以及,如图4所示,该装置还可以包括第二判断模块305、退出模块306,其中:
第二判断模块305,用于当入栈判断模块303判断出第二解析指令为入栈指令时,以及在第一判断模块304判断出第三地址等于跳转地址之后,确定模块301将当前函数的下一级函数确定为新的当前函数之前,判断当前函数的下一级函数对应的跳转地址是否为预设任务退出地址。
确定模块301,还用于当第二判断模块305判断出当前函数的下一级函数对应的跳转地址不为预设任务退出地址时,确定当前函数的下一级函数对应的跳转地址中存放有从当前函数的下一级函数跳转至当前函数的下一级函数的后置调用函数的跳转指令,并触发执行上述的将当前函数的下一级函数确定为新的当前函数的操作。
退出模块306,用于当第二判断模块305判断出下一级函数对应的跳转地址为预设任务退出地址时,退出栈回溯接口。
可见,实施图4所描述的变长指令集系统栈回溯的实现装置,通过特征码来确定第一解析指令是否为入栈指令,有利于提高入栈指令的确定效率以及确定准确性;此外,上述将下一级函数确定为新的当前函数之前,会再判断下一级函数对应的跳转地址是否为预设任务退出地址,若是则退出栈回溯接口,结束当前栈回溯流程,设置了结束栈回溯流程的步骤,防止在完成栈回溯流程后仍重复执行栈回溯操作,导致程序出现卡顿出错的情况,一定程度上实现了栈回溯的流程优化,提高了栈回溯成功率。
在另一个可选的实施例中,栈帧参数还包括目标栈帧的栈顶寄存器的值;其中,当目标栈帧为非第一级栈帧时,目标栈帧对应的栈帧参数是通过以下方式确定出的:
根据当前函数的上一级函数对应的入栈总长度以及该当前函数的上一级函数对应的栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值;其中,该当前函数的上一级函数对应的入栈总长度是根据该当前函数的上一级函数对应的每个入栈指令的入栈长度确定出的;其中,当前函数的上一级函数为在当前函数之前最新回溯过的函数;
根据在运行该当前函数的上一级函数时返回寄存器对应的栈内偏移量、该当前函数的上一级函数对应的栈顶寄存器的值以及该当前函数的上一级函数对应的入栈总长度,确定在运行该当前函数的上一级函数时返回寄存器的值,并根据在运行该当前函数的上一级函数时返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址。
可见,实施图4所描述的变长指令集系统栈回溯的实现装置,针对目标栈帧为非第一级栈帧的情况,提供了通过当前函数的上一级函数对应的入栈总长度、栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值的计算方案;同时也提供了通过确定返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址的计算方式;实现针对不同类型的目标栈帧时,能够自适应调整栈帧参数的计算方式,提高了确定出的栈帧参数的准确性,在一定程度上提高了后续栈回溯流程的回溯准确性。
在又一个可选的实施例中,确定模块301,还用于当第一判断模块304判断出第一解析指令已触发返回寄存器完成入栈时,将第二地址确定为目标栈帧对应的当前函数的上边界之后,根据第一解析指令,确定第一解析指令对应的指令列表。
以及,如图4所示,该装置还可以包括分析模块307,其中:
分析模块307,用于分析确定模块301确定出的指令列表,得到指令列表中第一置位参数对应的第一数量以及第二置位参数对应的第二数量,其中第一置位参数为指令列表所包括的所有比特位中处于预设置位状态的参数,第二置位参数为指令列表所包括的所有比特位中处于预设比特位置区间内且处于预设置位状态的参数。
确定模块301,还用于根据第一数量以及预设寄存器宽度,确定第一解析指令对应的入栈长度。
确定模块301,还用于根据第二数量以及预设寄存器宽度,确定返回寄存器对应的入栈偏移量。
确定模块301,还用于根据入栈长度、入栈偏移量以及确定出的当前函数的栈顶寄存器的值确定返回寄存器的值,返回寄存器的值用于计算当前函数的上一级函数栈帧对应的程序运行地址的值,当前函数的上一级函数栈帧对应的程序运行地址的值用于确定下一级函数对应的跳转地址。
可见,实施图4所描述的变长指令集系统栈回溯的实现装置,能够根据第一解析指令确定出对应的指令列表后,智能化确定第一置位参数的第一数量以及第二置位参数对应的第二数量,从而自动计算第一解析指令的入栈长度、返回寄存器的入栈偏移量,进而该入栈长度与该入栈偏移量用于确定返回寄存器的值,该返回寄存器的值用于后续计算上一级函数栈帧对应的程序运行地址的值,其中上一级函数栈帧对应的程序运行地址的值用于确定下一级函数对应的跳转地址,有利于提高栈回溯流程中的跳转至下一级函数时跳转至正确的地址,提高了栈回溯的准确性和可靠性。
在另一个可选的实施例中,确定模块301根据预设的第一指令长度检测算法,确定第一合法指令长度的方式具体包括:
根据预设的第一指令长度检测算法,以确定出的基准地址为基准向低地址方向偏移第一预设长度,得到第一待定指令;
确定当前栈回溯对应的运行架构类型,并根据运行架构类型确定指令集状态,运行架构类型对应有至少一种指令集状态,每个指令集状态至少对应一个指令长度;
根据每个指令集状态分别对应的指令长度,判断第一待定指令的指令长度是否为所有指令集状态对应的其中一个指令长度;
当判断出第一待定指令的指令长度不为所有指令集状态对应的任一指令长度时,将第二预设长度确定为第一合法指令长度;
当判断出第一待定指令的指令长度为所有指令集状态对应的其中一个指令长度时,确定第一预设长度为第一合法指令长度。
可见,实施图4所描述的变长指令集系统栈回溯的实现装置,在确定第一合法指令长度时,能够根据不同的运行架构类型,确定对应的指令集状态以及该指令集状态对应的指令长度,从而根据不同指令集状态的指令长度确定出第一预设长度,提高了确定出的第一预设长度的准确性,从而提高了第一待定指令的确定准确性。
在又一个可选的实施例中,当目标栈帧为第一级栈帧时,确定模块301确定当前函数的目标栈帧对应的栈帧参数的方式具体包括:
根据预设栈回溯启动指令调用回溯函数,并根据回溯函数判断当前运行的目标函数是否为异常处理函数,回溯函数为启动栈回溯流程的函数;
当判断出目标函数为异常处理函数时,调用确定出的异常栈获取异常信息对应的程序运行地址以及栈顶寄存器对应的值,作为当前函数的目标栈帧对应的栈帧参数;
当判断出待处理函数不为异常处理函数时,确定待回溯的指定任务,并获取指定任务对应的栈帧参数,将指定任务对应的栈帧参数所在的函数确定为当前函数以及将指定任务对应的栈帧参数确定为当前函数的目标栈帧对应的栈帧参数;指定任务为当前运行任务或非当前运行任务;
其中,获取指定任务对应的栈帧参数,包括:
当指定任务为当前运行任务时,根据预设汇编程序获取当前CPU对应的程序运行地址以及栈顶寄存器对应的值,作为指定任务对应的栈帧参数;
当指定任务为非当前运行任务时,从指定任务对应的上下文信息中提取程序运行地址以及栈顶寄存器的值,作为指定任务对应的栈帧参数。
可见,实施图4所描述的变长指令集系统栈回溯的实现装置,在调用回溯函数之后,能够自动判断该回溯函数的函数类型(判断是否为异常处理函数),并根据判断结果执行匹配的判断操作:判断为是时通过异常栈获取栈帧参数;判断为否时,在确定待回溯的指定任务之后再获取指定任务的栈帧参数;实现了自适应调整栈帧参数的确定方法,提高了栈帧参数的确定效率以及确定准确性。
实施例四
请参阅图5,图5是本发明实施例公开的又一种变长指令集系统栈回溯的实现装置的结构示意图。如图5所示,该变长指令集系统栈回溯的实现装置可以包括:
存储有可执行程序代码的存储器401;
与存储器401耦合的处理器402;
处理器402调用存储器401中存储的可执行程序代码,执行本发明实施例一或本发明实施例二所描述的变长指令集系统栈回溯的实现方法中的步骤。
实施例五
本发明实施例公开了一种计算机存储介质,该计算机存储介质存储有计算机指令,该计算机指令被调用时,用于执行本发明实施例一或本发明实施例二所描述的变长指令集系统栈回溯的实现方法中的步骤。
实施例六
本发明实施例公开了一种计算机程序产品,该计算机程序产品包括存储了计算机程序的非瞬时性计算机存储介质,且该计算机程序可操作来使计算机执行实施例一或实施例二中所描述的变长指令集系统栈回溯的实现方法中的步骤。
以上所描述的装置实施例仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施例的具体描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机存储介质中,存储介质包括只读存储器(Read-OnlyMemory,ROM)、随机存储器(Random Access Memory,RAM)、可编程只读存储器(Programmable Read-only Memory,PROM)、可擦除可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)、一次可编程只读存储器(One-timeProgrammable Read-Only Memory,OTPROM)、电子抹除式可复写只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(CompactDisc Read-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
最后应说明的是:本发明实施例公开的一种变长指令集系统栈回溯的实现方法及装置所揭露的仅为本发明较佳实施例而已,仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各项实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应的技术方案的本质脱离本发明各项实施例技术方案的精神和范围。
Claims (10)
1.一种变长指令集系统栈回溯的实现方法,其特征在于,所述方法包括:
确定当前函数的目标栈帧对应的栈帧参数,所述目标栈帧对应的栈帧参数包括所述目标栈帧对应的第一地址,所述第一地址为所述目标栈帧对应的程序运行地址,所述目标栈帧为第一级栈帧或者为非第一级栈帧;
根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址;初始确定出的基准地址为所述第一地址;
读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令,当判断出所述第一解析指令为所述入栈指令时,判断所述第一解析指令是否已触发返回寄存器完成入栈,当判断出所述第一解析指令已触发所述返回寄存器完成入栈时,将所述第二地址确定为所述目标栈帧对应的当前函数的上边界;
根据预设的第二指令长度检测算法,确定第二合法指令长度,以所述第二地址为基准向高地址方向偏移所述第二合法指令长度,得到第三地址;
读取所述第三地址处的第二解析指令,并判断所述第二解析指令是否为所述入栈指令,当判断出所述第二解析指令为所述入栈指令时,判断所述第三地址是否等于所述当前函数对应的跳转地址,所述当前函数对应的跳转地址存放有从所述当前函数跳转至后置调用函数的跳转指令,所述后置调用函数为函数调用顺序在所述当前函数的函数调用顺序之后的函数;当判断出所述第三地址等于所述跳转地址时,将所述当前函数的下一级函数确定为新的当前函数,并触发执行所述的确定当前函数的目标栈帧对应的栈帧参数的操作。
2.根据权利要求1所述的变长指令集系统栈回溯的实现方法,其特征在于,所述栈帧参数还包括所述目标栈帧的栈顶寄存器的值;
其中,当所述目标栈帧为所述非第一级栈帧时,所述目标栈帧对应的栈帧参数是通过以下方式确定出的:
根据当前函数的上一级函数对应的入栈总长度以及该当前函数的上一级函数对应的栈顶寄存器的值,计算该当前函数目标栈帧的栈顶寄存器的值;其中,该当前函数的上一级函数对应的入栈总长度是根据该当前函数的上一级函数对应的每个入栈指令的入栈长度确定出的;其中,当前函数的上一级函数为在当前函数之前最新回溯过的函数;
根据在运行该当前函数的上一级函数时返回寄存器对应的栈内偏移量、该当前函数的上一级函数对应的栈顶寄存器的值以及该当前函数的上一级函数对应的入栈总长度,确定在运行该当前函数的上一级函数时所述返回寄存器的值,并根据在运行该当前函数的上一级函数时所述返回寄存器的值以及预先确定出的跳转指令长度,计算该当前函数目标栈帧对应的第一地址。
3.根据权利要求1或2所述的变长指令集系统栈回溯的实现方法,其特征在于,所述方法还包括:
当判断出所述第一解析指令不为所述入栈指令时,将所述第二地址确定为新的基准地址,并重新执行所述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址的步骤,以及执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的步骤;
以及,所述方法还包括:
当判断出所述第一解析指令为所述入栈指令,且判断出所述第一解析指令未触发所述返回寄存器完成入栈时,将所述第二地址确定为新的基准地址,并重新执行所述的根据预设指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址对应的步骤,以及执行所述的读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令的步骤。
4.根据权利要求3所述的变长指令集系统栈回溯的实现方法,其特征在于,所述判断所述第一解析指令是否为入栈指令,包括:
分析所述第一解析指令,得到所述第一解析指令对应的分析结果,判断所述分析结果是否包括预先确定出的特征码;
当判断出所述分析结果包括所述特征码时,确定所述第一解析指令为入栈指令;
当判断出所述分析结果不包括所述特征码时,确定所述第一解析指令不为入栈指令;
以及,在判断出所述第三地址等于所述跳转地址之后,所述的将所述当前函数的下一级函数确定为新的当前函数之前,所述方法还包括:
判断所述当前函数的下一级函数对应的跳转地址是否为预设任务退出地址,当判断出所述当前函数的下一级函数对应的跳转地址不为所述预设任务退出地址时,确定所述当前函数的下一级函数对应的跳转地址中存放有从所述当前函数的下一级函数跳转至所述当前函数的下一级函数对应的后置调用函数的跳转指令,并触发执行所述的将所述当前函数的下一级函数确定为新的当前函数的操作;
当判断出所述下一级函数对应的跳转地址为所述预设任务退出地址时,退出栈回溯接口。
5.根据权利要求4所述的变长指令集系统栈回溯的实现方法,其特征在于,当判断出所述第一解析指令已触发所述返回寄存器完成入栈时,所述将所述第二地址确定为所述目标栈帧对应的当前函数的上边界之后,所述方法还包括:
根据所述第一解析指令,确定所述第一解析指令对应的指令列表;
分析所述指令列表,得到所述指令列表中第一置位参数对应的第一数量以及第二置位参数对应的第二数量,其中所述第一置位参数为所述指令列表所包括的所有比特位中处于预设置位状态的参数,所述第二置位参数为所述指令列表所包括的所有比特位中处于预设比特位置区间内且处于所述预设置位状态的参数;
根据所述第一数量以及预设寄存器宽度,确定所述第一解析指令对应的入栈长度;
根据所述第二数量以及所述预设寄存器宽度,确定所述返回寄存器对应的入栈偏移量;
根据所述入栈长度、所述入栈偏移量以及确定出的所述当前函数的栈顶寄存器的值确定所述返回寄存器的值,所述返回寄存器的值用于计算所述当前函数的上一级函数栈帧对应的程序运行地址的值,所述当前函数的上一级函数栈帧对应的程序运行地址的值用于确定所述下一级函数对应的跳转地址。
6.根据权利要求1-5任一项所述的变长指令集系统栈回溯的实现方法,其特征在于,所述根据预设的第一指令长度检测算法,确定第一合法指令长度,包括:
根据预设的第一指令长度检测算法,以确定出的基准地址为基准向低地址方向偏移第一预设长度,得到第一待定指令;
确定当前栈回溯对应的运行架构类型,并根据所述运行架构类型确定指令集状态,所述运行架构类型对应有至少一种指令集状态,每个所述指令集状态至少对应一个指令长度;
根据每个所述指令集状态分别对应的指令长度,判断所述第一待定指令的指令长度是否为所有所述指令集状态对应的其中一个指令长度;
当判断出所述第一待定指令的指令长度不为所有所述指令集状态对应的任一指令长度时,将第二预设长度确定为第一合法指令长度;
当判断出所述第一待定指令的指令长度为所有所述指令集状态对应的其中一个指令长度时,确定所述第一预设长度为第一合法指令长度。
7.根据权利要求1-6任一项所述的变长指令集系统栈回溯的实现方法,其特征在于,当所述目标栈帧为所述第一级栈帧时,所述确定当前函数的目标栈帧对应的栈帧参数,包括:
根据预设栈回溯启动指令调用回溯函数,并根据所述回溯函数判断当前运行的目标函数是否为异常处理函数,所述回溯函数为启动栈回溯流程的函数;
当判断出所述目标函数为所述异常处理函数时,调用确定出的异常栈获取异常信息对应的程序运行地址以及栈顶寄存器对应的值,作为当前函数的目标栈帧对应的栈帧参数;
当判断出所述待处理函数不为所述异常处理函数时,确定待回溯的指定任务,并获取所述指定任务对应的栈帧参数,将所述指定任务对应的栈帧参数所在的函数确定为当前函数以及将所述指定任务对应的栈帧参数确定为所述当前函数的目标栈帧对应的栈帧参数;所述指定任务为当前运行任务或非当前运行任务;
其中,所述获取所述指定任务对应的栈帧参数,包括:
当所述指定任务为所述当前运行任务时,根据预设汇编程序获取当前CPU对应的程序运行地址以及栈顶寄存器对应的值,作为所述指定任务对应的栈帧参数;
当所述指定任务为所述非当前运行任务时,从所述指定任务对应的上下文信息中提取程序运行地址以及栈顶寄存器的值,作为所述指定任务对应的栈帧参数。
8.一种变长指令集系统栈回溯的实现装置,其特征在于,所述装置包括:
确定模块,用于确定当前函数的目标栈帧对应的栈帧参数,所述目标栈帧对应的栈帧参数包括所述目标栈帧对应的第一地址,所述第一地址为所述目标栈帧对应的程序运行地址,所述目标栈帧为第一级栈帧或者为非第一级栈帧;
寻址模块,用于根据预设的第一指令长度检测算法,确定第一合法指令长度,以确定出的基准地址为基准向低地址方向偏移所述第一合法指令长度,得到第二地址;初始确定出的基准地址为所述第一地址;
入栈判断模块,用于读取所述第二地址处的第一解析指令,并判断所述第一解析指令是否为入栈指令;
第一判断模块,用于当所述入栈判断模块判断出所述第一解析指令为所述入栈指令时,判断所述第一解析指令是否已触发返回寄存器完成入栈;
所述确定模块,还用于当所述第一判断模块判断出所述第一解析指令已触发所述返回寄存器完成入栈时,将所述第二地址确定为所述目标栈帧对应的当前函数的上边界;
所述寻址模块,还用于根据预设的第二指令长度检测算法,确定第二合法指令长度,以所述第二地址为基准向高地址方向偏移所述第二合法指令长度,得到第三地址;
所述入栈判断模块,还用于读取所述第三地址处的第二解析指令,并判断所述第二解析指令是否为所述入栈指令;
所述第一判断模块,还用于当所述入栈判断模块判断出所述第二解析指令为所述入栈指令时,判断所述第三地址是否等于所述当前函数对应的跳转地址,所述当前函数对应的跳转地址存放有从所述当前函数跳转至后置调用函数的跳转指令,所述后置调用函数为函数调用顺序在所述当前函数的函数调用顺序之后的函数;
所述确定模块,还用于当所述第一判断模块判断出所述第三地址等于所述跳转地址时,将所述当前函数的下一级函数确定为新的当前函数,并触发执行所述的确定当前函数的目标栈帧对应的栈帧参数的操作。
9.一种变长指令集系统栈回溯的实现装置,其特征在于,所述装置包括:
存储有可执行程序代码的存储器;
与所述存储器耦合的处理器;
所述处理器调用所述存储器中存储的所述可执行程序代码,执行如权利要求1-7任一项所述的变长指令集系统栈回溯的实现方法。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机指令,所述计算机指令被调用时,用于执行如权利要求1-7任一项所述的变长指令集系统栈回溯的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210420252.4A CN114756284A (zh) | 2022-04-21 | 2022-04-21 | 变长指令集系统栈回溯的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210420252.4A CN114756284A (zh) | 2022-04-21 | 2022-04-21 | 变长指令集系统栈回溯的实现方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114756284A true CN114756284A (zh) | 2022-07-15 |
Family
ID=82330775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210420252.4A Pending CN114756284A (zh) | 2022-04-21 | 2022-04-21 | 变长指令集系统栈回溯的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114756284A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149732A (zh) * | 2023-02-15 | 2023-05-23 | 深圳大学 | 一种数据流任务的硬件自动化执行方法、系统及产品 |
CN116431220A (zh) * | 2023-06-14 | 2023-07-14 | 青岛鑫晟汇科技有限公司 | 一种基于数据分布式指令集的多系统架构互通系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102109975A (zh) * | 2009-12-24 | 2011-06-29 | 华为技术有限公司 | 确定函数调用关系的方法、装置及系统 |
US8458671B1 (en) * | 2008-02-12 | 2013-06-04 | Tilera Corporation | Method and system for stack back-tracing in computer programs |
CN108984328A (zh) * | 2017-05-31 | 2018-12-11 | 中兴通讯股份有限公司 | 一种堆栈回溯的方法及装置 |
US20200371945A1 (en) * | 2019-05-22 | 2020-11-26 | Vdoo Connected Trust Ltd. | Dynamic Identification of Stack Frames |
CN113238883A (zh) * | 2021-04-30 | 2021-08-10 | 烽火通信科技股份有限公司 | 一种堆栈回溯的方法及装置 |
CN113742119A (zh) * | 2021-07-26 | 2021-12-03 | 上海闻泰信息技术有限公司 | 嵌入式系统的调用栈回溯方法、装置和计算机设备 |
-
2022
- 2022-04-21 CN CN202210420252.4A patent/CN114756284A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8458671B1 (en) * | 2008-02-12 | 2013-06-04 | Tilera Corporation | Method and system for stack back-tracing in computer programs |
CN102109975A (zh) * | 2009-12-24 | 2011-06-29 | 华为技术有限公司 | 确定函数调用关系的方法、装置及系统 |
CN108984328A (zh) * | 2017-05-31 | 2018-12-11 | 中兴通讯股份有限公司 | 一种堆栈回溯的方法及装置 |
US20200371945A1 (en) * | 2019-05-22 | 2020-11-26 | Vdoo Connected Trust Ltd. | Dynamic Identification of Stack Frames |
CN113238883A (zh) * | 2021-04-30 | 2021-08-10 | 烽火通信科技股份有限公司 | 一种堆栈回溯的方法及装置 |
CN113742119A (zh) * | 2021-07-26 | 2021-12-03 | 上海闻泰信息技术有限公司 | 嵌入式系统的调用栈回溯方法、装置和计算机设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149732A (zh) * | 2023-02-15 | 2023-05-23 | 深圳大学 | 一种数据流任务的硬件自动化执行方法、系统及产品 |
CN116149732B (zh) * | 2023-02-15 | 2023-10-27 | 深圳大学 | 一种数据流任务的硬件自动化执行方法、系统及产品 |
CN116431220A (zh) * | 2023-06-14 | 2023-07-14 | 青岛鑫晟汇科技有限公司 | 一种基于数据分布式指令集的多系统架构互通系统 |
CN116431220B (zh) * | 2023-06-14 | 2023-08-18 | 青岛鑫晟汇科技有限公司 | 一种基于数据分布式指令集的多系统架构互通系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114756284A (zh) | 变长指令集系统栈回溯的实现方法及装置 | |
KR100868762B1 (ko) | 임베디드용 소프트웨어의 오류 검출 방법 | |
US20070300209A1 (en) | Run into function | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
CN103559123B (zh) | 基于VxWorks操作系统的函数调用栈分析方法及装置 | |
US7698690B2 (en) | Identifying code that wastes time performing redundant computation | |
CN105630463A (zh) | 用于检测jar包冲突的方法及装置 | |
CN103019787A (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
CN117195568B (zh) | 一种基于离散事件的仿真引擎性能分析方法及装置 | |
CN110209520B (zh) | 一种提高ssd测试效率的方法、装置、计算机设备及存储介质 | |
CN106886446B (zh) | 软件源代码的验证方法及装置 | |
US20200143061A1 (en) | Method and apparatus for tracking location of input data that causes binary vulnerability | |
CN113127314A (zh) | 一种检测程序性能瓶颈的方法、装置及计算机设备 | |
CN110213243A (zh) | 一种基于动态污点分析的工业通信协议逆向分析方法 | |
CN109634822A (zh) | 一种函数耗时统计方法、装置、存储介质及终端设备 | |
CN109857642A (zh) | 一种ui自动化脚本的阻塞式调试方法及调试工具 | |
CN116820853A (zh) | 芯片测试数据的解析方法、装置、电子设备及存储介质 | |
US6086624A (en) | Simulator and simulation method in each of which simulation can be carried out at a high-speed | |
CN113190235B (zh) | 一种代码的分析方法、装置、电子终端及存储介质 | |
CN109582574A (zh) | 一种代码覆盖率统计方法、装置、存储介质及终端设备 | |
CN116155934A (zh) | 智能合约调用账本的方法、装置、电子设备和存储介质 | |
US20060265687A1 (en) | Method for Finding a Function Call Stack in Run Time for a Computer System | |
Yuan et al. | A method for detecting buffer overflow vulnerabilities | |
US9122796B2 (en) | Recreating timing issues during program debug | |
JP2010079343A (ja) | トレース情報取得装置、トレース情報取得プログラム、および、トレース情報取得方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |