发明名称 反编译过程中的堆栈跟踪方法、装置及反编译器
摘要 一种反编译过程中的堆栈跟踪方法、装置及反编译器,该方法包括步骤:顺序执行指令,根据每条指令对堆栈指针寄存器ESP的值的影响,对预设整型变量进行相应的加减操作,所述预设整型变量用以表示系统当前ESP寄存器的值与函数入口处系统ESP寄存器的值之间的偏移量。本发明方案通过预设整型变量来模拟堆栈寄存器ESP的行为,根据在执行指令时各指令对堆栈指针寄存器ESP的值的影响,来对该预设整型变量执行相应的加减操作,据此模拟CPU的压栈入栈等堆栈操作行为,从而可以根据该预设整型变量来准确地识别函数执行过程中的参数、局部变量,可以给反编译过程提供更多准确的信息,进而提高了最终反编译结果的正确性和可读性。
申请公布号 CN101976187B 申请公布日期 2012.12.26
申请号 CN201010545429.0 申请日期 2010.11.16
申请人 广州迪庆电子科技有限公司 发明人 陈耿标;林毓双
分类号 G06F9/30(2006.01)I;G06F9/45(2006.01)I 主分类号 G06F9/30(2006.01)I
代理机构 广州华进联合专利商标代理有限公司 44224 代理人 黄晓庆;王茹
主权项 一种反编译过程中的堆栈跟踪方法,其特征在于,包括步骤:顺序执行指令,根据每条指令对堆栈指针寄存器ESP的值的影响,对预设整型变量进行相应的加减操作,所述预设整型变量用以表示系统当前ESP寄存器的值与函数入口处系统ESP寄存器的值之间的偏移量;所述根据每条指令对堆栈指针寄存器ESP的值的影响、对预设整型变量进行相应的加减操作具体包括:当运行到push指令时,将该push指令压栈的数据保存到预定数组结构中的一个空数组元素结构体内,并将该push指令执行前的预设整形变量的值保存到该空数组元素结构体中,以该预设整形变量的值作为该空数组元素结构体的索引;当运行到pop指令时,将该pop指令执行后的堆栈寄存器ESP的值作为索引值,对所述预定数组结构进行检索查询,查询到预设整形变量值与该pop指令执行后的堆栈寄存器ESP的值相匹配的数组元素结构体,获得该数组元素结构体的入栈元素并赋值给所述pop指令的操作数,并清空该数组元素结构体内的所有数据;当运行到系统调用指令时,根据调用约定,对预设整形变量进行相应的加减操作;当运行到跳转指令时,保存该跳转指令执行时堆栈寄存器ESP的值以及该跳转指令需跳转到的地址值,并在最后一条指令地址小于跳转地址的返回指令处恢复预设整形变量值,然后继续执行后续指令。
地址 510000 广东省广州市天河区华强路3号富力盈力大厦北塔2403房