CN112199116B - 操作数栈寄存器识别方法、装置、设备及存储介质 - Google Patents
操作数栈寄存器识别方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112199116B CN112199116B CN202011111857.2A CN202011111857A CN112199116B CN 112199116 B CN112199116 B CN 112199116B CN 202011111857 A CN202011111857 A CN 202011111857A CN 112199116 B CN112199116 B CN 112199116B
- Authority
- CN
- China
- Prior art keywords
- register
- operand stack
- stack
- interpretation routine
- value
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明实施例公开了一种操作数栈寄存器识别方法、装置、设备及存储介质,其中,所述操作数栈寄存器识别方法,包括:确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;先确认在进入虚拟机之前,操作数栈所对应的寄存器;然后跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器。根据解释例程执行的特征,以及寄存器的变化范围确认每个解释例程操作数栈所对应的寄存器,有助于后续的虚拟指令语法和语义分析。
Description
技术领域
本发明涉及操作数栈寄存器技术领域,也涉及信息安全、软件分析、逆向工程和计算机软件技术领域,特别涉及一种操作数栈寄存器识别方法、装置、设备及存储介质,尤指一种虚拟机保护的解释例程操作数栈寄存器识别方法、装置、设备及存储介质。
背景技术
虚拟机保护是结合虚拟化和代码混淆实现软件保护的一种技术,现有的代码反混淆分析方法还原被虚拟机保护的软件时存在较大困难。有文献提出以动态二进制插桩平台Pin作为支撑,跟踪记录被虚拟机保护的算法在动态执行过程中的数据流信息,对记录的数据流信息进行整理分析,获取虚拟机指令的解释执行轨迹,还原程序的控制流图,根据轨迹信息对数据生成过程进行分层次、分阶段还原,并由分析人员结合控制流图和数据生成过程进行算法重构。然而,该方法还原的控制流图准确性不高,且无法实现对虚拟指令的逆向还原。
发明内容
本发明实施例提供了一种操作数栈寄存器识别方法、装置、设备及存储介质,针对虚拟机软件保护的逆向工程分析,通过特征匹配和寄存器变化值的范围分析,以达到准确识别解释例程中的操作数栈对应的寄存器目的。
本发明实施例提供了一种操作数栈寄存器识别方法,包括:
确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;
先确认在进入虚拟机之前,操作数栈所对应的寄存器;
然后跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器。
进一步的,在每个解释例程的记录中,第1行会显示每个寄存器的值,之后每条记录的最后1列会记录每条指令执行后被修改的寄存器及其被修改后的值。
进一步的,虚拟机会通过设定的方式切换操作数栈所对应的寄存器。
进一步的,所述解释例程操作数栈所对应的寄存器判定的方法,包括如下步骤:
遍历解释例程中的指令序列,使用正则表达式来匹配所述特征,如果匹配到设定的指令特征一,则置标志变量的值为True;
待后续匹配到设定的指令特征二,认定操作数栈所对应的寄存器发生变化,记录指令特征二的另一个寄存器为寄存器,并在遍历结束后并设置解释例程的值为寄存器一的值;
如果在匹配到mov指令特征二之前没有匹配到xchg指令特征一,则判定其疑似发生变化并设置op_stack_reg_candidate;
在解释例程指令序列一次遍历结束后,解释例程的exit_status和enter_status判断操作数栈顶的变化值,如果按照操作数栈对应寄存器没变化的情况计算其变化值超出了正常的变化范围[-8,8],则认定疑似变化的op_stack_reg_candidate是真实变化的情况,修改该解释例程的op_stack_exit_reg值为op_stack_reg_candidate。
本发明实施例还提供一种操作数栈寄存器识别装置,包括:
记录模块,用于确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;
确认模块,用于先确认在进入虚拟机之前,操作数栈所对应的寄存器;
跟踪模块,用于跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器。
本发明实施例还提供一种操作数栈寄存器识别设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述操作数栈寄存器识别方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述操作数栈寄存器识别方法。
本发明实施例,其方法包括:确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;先确认在进入虚拟机之前,操作数栈所对应的寄存器;然后跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器。由此根据解释例程执行的特征,以及寄存器的变化范围确认每个解释例程操作数栈所对应的寄存器,有助于后续的虚拟指令语法和语义分析。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
图1是本发明实施例的所述解释例程操作数栈所对应的寄存器判定的方法的整体流程图;
图2是本发明实施例的所述操作数栈寄存器识别装置的结构图。
具体实施方式
下文中将结合附图对本发明的实施例进行详细说明。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在虚拟机保护的逆向分析中,每个解释例程对操作数栈栈顶的变化值对虚拟指令的逆向分析具有重要价值,但是目前为止尚未发现有人提出确定解释例程操作数栈所对应寄存器的方法,也未见有人提出利用不同的操作指令对求值栈栈顶的改变值有差异的特性进行分析和破解虚拟机保护。因此,本发明实施例提出一种虚拟机保护的解释例程操作数栈寄存器识别方法,为逆向分析虚拟机保护提供帮助。
针对上述情况,如图1所示,本发明实施例提出一种操作数栈寄存器识别方法,包括:
步骤101,确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态。
其中,在一个实施例中,在每个解释例程的记录中,第1行会显示每个寄存器的值,之后每条记录的最后1列会记录每条指令执行后被修改的寄存器及其被修改后的值。根据这两个条件,可以确定每个解释例程执行前后所有寄存器的值。使用寄存器作为健值key的两个容器map来记录这两组状态,这里分别用enter_status和exit_status表示,如下所示:
vm_handler.enter_status = {key:value} key = {eax, ebx, ecx, edx, edi,esi, esp, ebp}
vm_handler.exit_status = {key:value} key = {eax, ebx, ecx, edx, edi,esi, esp, ebp}。
步骤102,先确认在进入虚拟机之前,操作数栈所对应的寄存器。
其中,由于操作数栈所对应的寄存器会变化,即不同的解释例程或者同一个解释例程的开始和结束时的操作数栈所对应的寄存器可能不同,所以这里使用两个容器map来记录寄存器的动态值,下面将利用这两个容器map来计算操作数栈的变化值。
虚拟机中的操作数栈对应的寄存器并不固定,它可能通过寄存器轮转的方式动态修改。首先确认在进入虚拟机之前,操作数栈所对应的寄存器。其初始匹配特征如下汇编语言代码所示:
mov reg, esp
以上汇编代码是指将esp赋给寄存器reg。通过匹配上述特征,可以找到初始操作栈所对应的寄存器,初始通过esp寄存器传递,之后可能是reg={eax, ebx, ecx, edx,edi, esi, esp, ebp}中的任意寄存器,即:
op_stack_entry_reg = a, a∈reg
op_stack_exit_reg = b, b∈reg
其中,eax,ebx,ecx,edx,esi,edi,ebp,esp等都是X86 汇编语言中CPU上的32位通用寄存器的名称。EAX 是累加器(accumulator), 它是很多加法乘法指令的缺省寄存器。EBX 是基地址(base)寄存器, 在内存寻址时存放基地址。ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。EDX则总是被用来放整数除法产生的余数。ESI/EDI分别叫做源/目标索引寄存器(source/destination index)。EBP是基址指针(basepointer)。ESP用作堆栈指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。op_stack_entry_reg表示操作数栈的入口寄存器,op_stack_exit_reg表示操作数栈的出口寄存器。
步骤103,然后跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器。
其中,在一个实施例中,虚拟机会通过设定的以下两种方式切换操作数栈所对应的寄存器:
method 1(方式1):
xchg op_stack_reg, reg1 //寄存器reg1和寄存器op_stack_reg交换
mov reg2, reg1 //将寄存器reg1赋给寄存器reg2
method 2(方式2):
mov reg, op_stack_reg //将寄存器op_stack_reg赋给寄存器reg
根据以上两种方法所实现的判断条件都不是强约束,即可能出现符合条件但操作数栈对应的寄存器没有改变的情况。那么可以进一步通过其变化值的范围来增加识别的准确性,操作数栈用于在解释执行时存放操作数,每次执行前后的变化范围与其支持的操作数数量和字长有直接关系,在虚拟机的实现中,算数指令不改变操作数栈栈顶值,加载和存储指令及操作数栈管理指令改变操作数栈栈顶值的范围为[-8,8],解释例程操作数栈对应寄存器判定算法的伪代码逻辑如下所示:
xchg_fmt = r'\bxchg\b.*' //正则匹配特征字符串变量赋值
xchg_pattern = xchg_fmt + op_stack_reg //构建方式1特征匹配字符串
xchg_on = False //设置xchg_on标志为False
for vm_handler in vm_handlers: //遍历解释例程集合
vm_handler.op_stack_entry_reg = op_stack_reg //给操作数栈入口寄存器赋值
for i, inst in enumerate(vm_handler.insts): //遍历每个解释例程中的指令
if re.search(xchg_pattern, inst.text): // 方式1特征模式正则匹配是否成功?
xchg_on = True 如果匹配成功,设置xchg_on标志为True
if op_stack_reg == inst.op_data1: //如果操作数栈寄存器等于inst.op_data1
op_stack_reg = inst.op_data2 操作数栈等于inst.op_data2
else:
op_stack_reg = inst.op_data1 //如果匹配不成功,则操作数栈寄存器等于inst.op_data1
else if re.search(r'^mov(?!.*\[).*' + op_stack_reg,inst.text): // 方式2特征模式正则匹配是否成功?
op_stack_reg_candidate = inst.op_data1 //如果匹配成功,则候选的操作数栈寄存器为inst.op_data1
if xchg_on: //判断xchg_on是否为True
op_stack_reg = inst.op_data1如果xchg_on为True,则操作数栈寄存器为inst.op_data1
xchg_on = False //设置xchg_on标志为False
xchg_on = False //设置xchg_on标志为False
op_stack_chg = vm_handler.exit_status[op_stack_reg] - vm_handler.enter_status[vm_handler.op_stack_entry_reg] //计算操作数栈栈顶变化值
if op_stack_chg not in range(-8, 9): //判断操作数栈栈顶值的范围是否为[-8,8]
vm_handler.op_stack_exit_reg = op_stack_reg_candidate //如果操作数栈栈顶值不在 [-8,8] 范围,则出口操作数栈寄存器为op_stack_reg_candidate
op_stack_reg = op_stack_reg_candidate //将op_stack_reg_candidate赋值给操作数栈寄存器
else:
vm_handler.op_stack_exit_reg = op_stack_reg //如果操作数栈栈顶值在 [-8,8] 范围,则出口操作数栈寄存器为op_stack_reg
xchg_pattern = xchg_fmt + op_stack_reg //构建方式1特征匹配字符串。
根据以上解释例程操作数栈所对应的寄存器判定的伪代码,其流程如图1所示。
其中,在一个实施例中,所述解释例程操作数栈所对应的寄存器判定的方法,包括如下步骤:
步骤201,遍历解释例程中的指令序列,使用正则表达式来匹配所述特征,如果匹配到设定的xchg指令特征一,则置xchg_on标志变量的值为True。
步骤202,待后续匹配到设定的mov指令特征二,认定操作数栈所对应的寄存器发生变化,记录mov指令特征二的另一个寄存器为寄存器一op_stack_reg,并在遍历结束后并设置解释例程的op_stack_exit_reg值为寄存器一op_stack_reg的值。
步骤203,如果在匹配到mov指令特征二之前没有匹配到xchg指令特征一,则判定其疑似发生变化并设置op_stack_reg_candidate。
步骤204,在解释例程指令序列一次遍历结束后,解释例程的exit_status和enter_status判断操作数栈顶的变化值,如果按照操作数栈对应寄存器没变化的情况计算其变化值超出了正常的变化范围[-8,8],则认定疑似变化的op_stack_reg_candidate是真实变化的情况,修改该解释例程的op_stack_exit_reg值为op_stack_reg_candidate。
xchg是x86汇编指令,表示2个寄存器之间进行交换;
xchg_on是一个布尔变量名,当它的值为True(真)时,表示出现了xchg的寄存器交换。
mov是x86汇编指令,表示数据传送。
op_stack_reg寄存器变量,表示操作数栈寄存器。
op_stack_exit_reg寄存器变量,表示操作数栈的出口寄存器。
op_stack_reg_candidate寄存器变量,表示候选的操作数栈寄存器。
exit_status表示解释例程出口的寄存器状态;enter_status表示解释例程入口的寄存器状态。
如图2所示,本发明实施例还提供一种操作数栈寄存器识别装置,包括:
记录模块71,用于确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;
确认模块72,用于先确认在进入虚拟机之前,操作数栈所对应的寄存器;
跟踪模块73,用于跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器。
本发明实施例还提供一种操作数栈寄存器识别设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述操作数栈寄存器识别方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述操作数栈寄存器识别方法。
在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,ReadOnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号。
Claims (6)
1.一种操作数栈寄存器识别方法,其特征在于,包括:
确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;
先确认在进入虚拟机之前,操作数栈所对应的寄存器;
然后跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器;
所述确定每个解释例程操作数栈所对应的寄存器的方法,包括如下步骤:
遍历解释例程中的指令序列,使用正则表达式来匹配特征,如果匹配到设定的xchg指令特征一,则置标志变量的值为True;
待后续匹配到设定的mov指令特征二,认定操作数栈所对应的寄存器发生变化,记录指令特征二的另一个寄存器为寄存器,并在遍历结束后并设置解释例程的值为寄存器一的值;
如果在匹配到mov指令特征二之前没有匹配到xchg指令特征一,则判定其疑似发生变化并设置op_stack_reg_candidate,即候选的操作数栈寄存器;
在解释例程指令序列一次遍历结束后,解释例程的exit_status,即解释例程出口的寄存器状态和enter_status,即解释例程入口的寄存器状态,判断操作数栈顶的变化值,如果按照操作数栈对应寄存器没变化的情况计算其变化值超出了正常的变化范围[-8,8],则认定疑似变化的op_stack_reg_candidate是真实变化的情况,修改该解释例程的op_stack_exit_reg,即操作数栈的出口寄存器值为op_stack_reg_candidate。
2.根据权利要求1所述的操作数栈寄存器识别方法,其特征在于,在每个解释例程的记录中,第1行会显示每个寄存器的值,之后每条记录的最后1列会记录每条指令执行后被修改的寄存器及其被修改后的值。
3.根据权利要求1所述的操作数栈寄存器识别方法,其特征在于,所述虚拟机会通过设定的方式切换操作数栈所对应的寄存器。
4.一种操作数栈寄存器识别装置,其特征在于,包括:
记录模块,用于确定每个解释例程执行前后所有寄存器的值,使用寄存器作为健值的两个容器来记录这两组状态;
确认模块,用于先确认在进入虚拟机之前,操作数栈所对应的寄存器;
跟踪模块,用于跟踪分析操作数栈的变化情况进一步确定每个解释例程操作数栈所对应的寄存器;
所述确定每个解释例程操作数栈所对应的寄存器的方法,包括如下步骤:
遍历解释例程中的指令序列,使用正则表达式来匹配特征,如果匹配到设定的xchg指令特征一,则置标志变量的值为True;
待后续匹配到设定的mov指令特征二,认定操作数栈所对应的寄存器发生变化,记录指令特征二的另一个寄存器为寄存器,并在遍历结束后并设置解释例程的值为寄存器一的值;
如果在匹配到mov指令特征二之前没有匹配到xchg指令特征一,则判定其疑似发生变化并设置op_stack_reg_candidate,即候选的操作数栈寄存器;
在解释例程指令序列一次遍历结束后,解释例程的exit_status,即解释例程出口的寄存器状态和enter_status,即解释例程入口的寄存器状态,判断操作数栈顶的变化值,如果按照操作数栈对应寄存器没变化的情况计算其变化值超出了正常的变化范围[-8,8],则认定疑似变化的op_stack_reg_candidate是真实变化的情况,修改该解释例程的op_stack_exit_reg,即操作数栈的出口寄存器值为op_stack_reg_candidate。
5.一种操作数栈寄存器识别设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1~3中任意一项所述操作数栈寄存器识别方法。
6.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求1~3中任意一项所述操作数栈寄存器识别方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011111857.2A CN112199116B (zh) | 2020-10-16 | 2020-10-16 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011111857.2A CN112199116B (zh) | 2020-10-16 | 2020-10-16 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112199116A CN112199116A (zh) | 2021-01-08 |
CN112199116B true CN112199116B (zh) | 2023-08-11 |
Family
ID=74009345
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011111857.2A Active CN112199116B (zh) | 2020-10-16 | 2020-10-16 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112199116B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007051347A1 (en) * | 2005-10-31 | 2007-05-10 | Intel Corporation | System and method for managing a register-based stack of operand tags |
CN101158891A (zh) * | 2007-11-19 | 2008-04-09 | 中国科学院计算技术研究所 | 在非cisc处理器上进行浮点栈溢出检查的装置和方法 |
CN101976187A (zh) * | 2010-11-16 | 2011-02-16 | 广州迪庆电子科技有限公司 | 反编译过程中的堆栈跟踪方法、装置及反编译器 |
CN105511942A (zh) * | 2015-12-02 | 2016-04-20 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN110909347A (zh) * | 2019-11-29 | 2020-03-24 | 广州大学 | 一种基于Mcsema的Remill库栈污染分析方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7478224B2 (en) * | 2005-04-15 | 2009-01-13 | Atmel Corporation | Microprocessor access of operand stack as a register file using native instructions |
-
2020
- 2020-10-16 CN CN202011111857.2A patent/CN112199116B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007051347A1 (en) * | 2005-10-31 | 2007-05-10 | Intel Corporation | System and method for managing a register-based stack of operand tags |
CN101158891A (zh) * | 2007-11-19 | 2008-04-09 | 中国科学院计算技术研究所 | 在非cisc处理器上进行浮点栈溢出检查的装置和方法 |
CN101976187A (zh) * | 2010-11-16 | 2011-02-16 | 广州迪庆电子科技有限公司 | 反编译过程中的堆栈跟踪方法、装置及反编译器 |
CN105511942A (zh) * | 2015-12-02 | 2016-04-20 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN110909347A (zh) * | 2019-11-29 | 2020-03-24 | 广州大学 | 一种基于Mcsema的Remill库栈污染分析方法及装置 |
Non-Patent Citations (1)
Title |
---|
一种抵御逆向工程的安卓应用混淆技术研究;乐德广 等;《小型微型计算机系统》;第39卷(第7期);第1513-1517页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112199116A (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111381879B (zh) | 一种数据处理方法及装置 | |
CN110287702B (zh) | 一种二进制漏洞克隆检测方法及装置 | |
US20070157007A1 (en) | Forward-pass dead instruction identification | |
CN104364778A (zh) | 在事务处理中保存/恢复选择的寄存器 | |
CN104412232A (zh) | 事务处理 | |
GB2475161A (en) | Incremental implementation of undo/redo support in legacy applications | |
US20130145216A1 (en) | Systems and methods for hardware-assisted type checking | |
CN104350474A (zh) | 事务执行内的随机测试 | |
CN103530184A (zh) | 一种在线补丁激活的方法及装置 | |
US7624384B2 (en) | Apparatus, system, and method of dynamic binary translation with translation reuse | |
US20170031687A1 (en) | Register comparison for operand store compare (osc) prediction | |
CN101546287A (zh) | 代码修改方法和代码修改设备 | |
CN107526970A (zh) | 基于动态二进制平台检测运行时程序漏洞的方法 | |
CN103810099A (zh) | 代码跟踪方法及其系统 | |
CN104049947A (zh) | 基于动态重命名的矢量寄存器堆的寄存器重新配置 | |
CN104685443A (zh) | 锁定引导数据用以更快引导 | |
CN112199116B (zh) | 操作数栈寄存器识别方法、装置、设备及存储介质 | |
CN111913742A (zh) | 一种程序处理方法及相关设备 | |
KR102594770B1 (ko) | 데이터 처리장치에서의 연속값들의 매칭 | |
CN112486723B (zh) | 数据校验方法、装置、处理器及电子设备 | |
CN109426702B (zh) | iOS平台文件读取保护方法、存储介质、电子设备及系统 | |
US20190361810A1 (en) | Prefetching data based on register-activity patterns | |
US11765193B2 (en) | Contextual embeddings for improving static analyzer output | |
CN112199163B (zh) | 分析解释例程的虚拟指令方法、装置、设备及存储介质 | |
US7353343B2 (en) | Memory management system for preventing program execution when CPU fetches execution code from unoccupied region of memory |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |