CN114510429B - 一种基于动态符号执行的调试方法、***和介质 - Google Patents

一种基于动态符号执行的调试方法、***和介质 Download PDF

Info

Publication number
CN114510429B
CN114510429B CN202210183362.3A CN202210183362A CN114510429B CN 114510429 B CN114510429 B CN 114510429B CN 202210183362 A CN202210183362 A CN 202210183362A CN 114510429 B CN114510429 B CN 114510429B
Authority
CN
China
Prior art keywords
execution
symbol
command
debugging
target program
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
Application number
CN202210183362.3A
Other languages
English (en)
Other versions
CN114510429A (zh
Inventor
黄晖
陆余良
刘京菊
潘祖烈
王永杰
杨国正
赵军
赵顺恺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202210183362.3A priority Critical patent/CN114510429B/zh
Publication of CN114510429A publication Critical patent/CN114510429A/zh
Application granted granted Critical
Publication of CN114510429B publication Critical patent/CN114510429B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开提供一种基于动态符号执行的调试方法、***和介质。所述调试方法包括:步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体‑符号执行,所述具体‑符号执行同时对所述目标程序执行具体执行和符号执行;步骤S2、经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体‑符号执行来执行所述命令;以及步骤S3、采集执行结果,将所述执行结果发送至所述调试客户端。该方法在动态二进制翻译过程中加入动态符号执行机制,由此得到关注程序变量对于外部输入的显示依赖关系,提升软件调试的效率。

Description

一种基于动态符号执行的调试方法、***和介质
技术领域
本公开涉及软件调试领域,尤其是涉及一种基于动态符号执行的调试方法、***和介质。
背景技术
符号执行是指一种基于约束求解技术的程序分析方法。将程序的输入由具体值替换为符号变元,将程序中每条指令本身的具体计算语义映射为相应的符号计算语义,沿着程序的控制流累积计算程序中各个变量关于符号变元的表示形式,并收集分支程序点对应的谓词条件,形成关于该路径的约束条件。
二进制软件调试是对实际部署应用程序的运行机理深入理解的一种动态分析方法。依托于动态调试器,安全分析人员可以通过设置断点、单步执行等方式对目标软件的运行过程动态监控,对程序的执行状态进行观察分析。该方法当前在软件逆向、漏洞分析方面等具有较为广泛的应用。尽管现有二进制软件调试器具备完善的对目标程序执行过程动态监控和数据查看的能力,程序变量和外部输入之间的依赖关系仍需专业的分析人员经花费较长时间人工推导得到。
当前应用较为广泛的二进制软件调试器包括Windows平台下的windbg、Linux平台下的gdb。这两型调试器或使用宿主机操作***内置的调试功能对目标程序进行本地调试,或与安装在客户机操作***内的调试插桩代码进行通信,进行远程调试。上述调试技术都可以用于对目标程序挂设断点进行执行监控并实时查看执行状态信息,但都无法显示提供程序变量关于外部输入的依赖关系。安全分析人员需要基于多次调试分析,结合对目标程序的深度理解才能计算出上述关系,由此制约调试分析的效率。
公开内容
针对上述问题,鉴于符号执行技术在刻画数据之间依赖关系的应用有效性,本公开提供一种基于动态符号执行的调试方案,其依托于软件虚拟机,在动态二进制翻译过程中加入动态符号执行机制,同时在程序的仿真执行过程中引入断点监控机制,由此使用户能够在预定义断点触发时,得到关注程序变量对于外部输入的显示依赖关系,由此提升软件调试的效率。本方案的核心思想在于,在目标程序的具体执行过程中同时进行符号执行,由此在数据查看时刻能够以一阶逻辑符号表达式的提供关注变量关于外部输入的依赖信息,从而根据用户需求,实时计算并提供给程序分析人员直观的任一程序变量对于外部输入的依赖关系。
本公开第一方面提供了一种基于动态符号执行的调试方法,所述调试方法包括:步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行;步骤S2、经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令;以及步骤S3、采集执行结果,将所述执行结果发送至所述调试客户端。
具体地,所述具体-符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。
具体地,所述命令包括:操作***执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
具体地,与所述操作***执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的***运行时刻进行挂钩;以及与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
本公开第二方面提供了一种基于动态符号执行的调试***,所述调试***包括:第一模块,被配置为,启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行;第二模块,被配置为,经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令;以及第三模块,被配置为,采集执行结果,将所述执行结果发送至所述调试客户端。
具体地,所述具体-符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。
具体地,所述命令包括:操作***执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
具体地,与所述操作***执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的***运行时刻进行挂钩;以及与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
本公开第三方面提供了一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据本公开第一方面的基于动态符号执行的调试方法中的步骤。
综上,本公开的技术方案依托于软件虚拟机,在动态二进制翻译过程中加入动态符号执行机制,同时在程序的仿真执行过程中引入断点监控机制,由此使用户能够在预定义断点触发时,得到关注程序变量对于外部输入的显示依赖关系,由此提升软件调试的效率。本方案的核心思想在于,在目标程序的具体执行过程中同时进行符号执行,由此在数据查看时刻能够以一阶逻辑符号表达式的提供关注变量关于外部输入的依赖信息,从而根据用户需求,实时计算并提供给程序分析人员直观的任一程序变量对于外部输入的依赖关系。
附图说明
为了更清楚地说明本公开具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本公开实施例的基于动态符号执行的调试方法的流程图;
图2为根据本公开实施例的基于具体-符号执行的二进制程序全***动态调试器框架图;
图3为根据本公开实施例的具体-符号执行的流程图;以及
图4为根据本公开实施例的基于动态符号执行的调试***的机构图。
具体实施方式
下面将结合附图对本公开的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
图1为根据本公开实施例的基于动态符号执行的调试方法的流程图;如图1所示,所述调试方法包括:步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行;步骤S2、经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令;以及步骤S3、采集执行结果,将所述执行结果发送至所述调试客户端。
图2为根据本公开实施例的基于具体-符号执行的二进制程序全***动态调试器框架图;如图2所示,在该实施例中,所述调试器可以包括调试客户端和调试服务器两个部分,其中调试服务器为***的核心组件,可以由命令解析模块、操作***信息动态监控模块、控制流动态监控模块、具体-符号模拟执行模块、机器状态获取模块构成。
在步骤S1中,启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行。具体地,用户启动调试服务端,调试服务端内的具体-符号模拟执行模块启动目标程序,并同时进行具体执行和符号执行。
在步骤S2中,经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令。所述命令包括:操作***执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
具体地,用户启动调试客户端,和调试服务端建立连接;用户在调试客户端输入命令,客户端随即将该命令转发到调试服务端;调试服务端的命令解析模块接收该命令,依据命令的类别从操作***信息动态监控模块、控制流动态监控模块、机器状态获取模块中选择对应的模块完成命令的执行。
命令解析模块主要负责解析调试客户端发送的用户输入的调试命令,并依据具体命令类型调用相应的模块对该命令进行处理。命令类型信息如下:
(1)操作***执行监控类型命令。提供对指定进程、线程创建、终止时刻的动态监控、进程内虚拟内存映射情况动态获取等功能。该型命令将交由操作***信息动态监控模块完成;
(2)指令控制流监控型命令。提供对程序执行迹动态追踪、断点的设置和清除、调用堆栈查看等功能。该型命令将交由指令控制流动态监控模块完成;
(3)机器状态读取/修改命令。提供对目标程序的执行状态(包括寄存器、内存等)的实时读取和修改功能。该型命令将交由机器状态读取/修改模块完成。
在一些实施例中,与所述操作***执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩。操作***信息动态监控模块用于对具体-符号模拟执行模块的进程、线程、模块上下文进行指定,以此实现计算上下文过滤类型调试命令的支持。
具体地,操作***信息动态监控模块旨在根据用户调试命令或对目标程序运行过程中进程创建及卸载、模块加载及卸载等关键的***时刻进行挂钩,或提供给用户目标进程当前内存映射状态等详细的运行时信息。对于前者,本申请首先为每型关键***时刻分别定制了新的客户机机器指令和相应的仿真执行代码。随之在客户虚拟机内预先安装了一个定制的Linux***内核。在该定制内核里,我们在进程创建、卸载等关键***时刻对应的源码实现处,添加对相应定制机器指令的汇编形式程序调用。由此,当客户***内运行的定制内核中发生了进程创建等关键事件,对应的定制指令将被执行,调试器进而在捕获进程创建时刻的基础上过滤出调试分析人员关注的目标进程。对于后者,基于上述工作,本申请在各个进程的创建时刻缓存对应的进程内核数据表示。当发生对内核映射信息的调试查询时,调试器将基于对应于该进程的内核数据表示索引出相关信息,并反馈给用户。
在一些实施例中,与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的***运行时刻进行挂钩。控制流动态监控模块用于对具体-符号模拟执行模块的基本块、指令执行时刻进行插桩监控,由此提供对断点类型调试命令的支持。
具体地,指令控制流动态监控模块旨在根据用户调试命令对目标程序内特定的指令执行时刻进行挂钩,由此实现指令断点、内存断点的挂设和清除。指令断点基于指令翻译过程实现。以包含add eax,-16;jmp 0x1000两条指令的基本块为例,其对应的微指令序列如下所示:
mov_T0_eax
addl_T0_im-16
movl_eax_T0
movl_eip_im 0x1000
假定调试命令要求对第二条指令挂设指令断点。在对源基本块翻译时,将在第二条指令对应的微指令序列首部引入新的用于表征指令执行前时刻的微指令OP_INSN_START,如下:
mov_T0_eax
addl_T0_im-16
movl_eax_T0
OP_INSN_START
movl_eip_im 0x1000
在***OP_INSN_START微指令的同时,还为该型微指令定制对应的仿真执行代码。由此当预期的第二条指令执行时,***的仿真执行代码将被触发,即意味着用户设置的断点被触发。内存访问型断点的挂设类似于上述过程。在内存访问型微指令后***预定义的新型微指令OP_MEM_ACCESS_END并定制相应的仿真执行代码,实现对目标程序运行过程中发生的所有内存访问操作的动态挂钩。通过以用户调试命令中指定的地址操作数进行过滤,由此实现预定内存访问断点的动态捕获。
在一些实施例中,与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。机器状态获取模块用于提取指定程序变量的即时具体-符号模拟执行机器状态,由此提供对数据查看类型调试命令的支持。
具体地,机器状态获取模块旨在根据用户调试命令即时完成指定机器位置的数据状态读取。针对通用寄存器、虚拟内存这两型机器位置,分别构建面向具体执行和面向符号执行的程序状态。由于依托于软件虚拟机,具体执行程序状态即为虚拟机软件仿真的各个机器位置在任一时刻的取值状态。关键在于符号执行程序状态。为客户虚拟机的仿真内存、仿真寄存器中的每个字节位置分别构建了对应的符号值状态,同时确定基于中间语言的符号执行计算规则将对相应的符号机器状态进行操作,由此确保符号机器状态随着程序执行的不断更新。对于给定的调试命令,机器状态获取、修改模块将根据指定的机器位置首先索引到对应的符号机器状态。如确认为符号值,即返回给用户该机器位置当前对应的外部输入相关的符号表达式;否则即为与外部输入无关的具体值。
在一些实施例中,所述具体-符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。
图3为根据本公开实施例的具体-符号执行的流程图;如图3所示,具体-符号模拟执行模块旨在对目标程序进行具体执行的同时,计算相应的符号执行语义。具体-符号模拟执行模块在目标程序启动直至结束期间以基本块为单位重复进行取指、译码、执行过程。在将基本块代码翻译成微指令序列后,首先扫描其中涉及的对客户机寄存器的读取操作,并检查相应寄存器的符号机器状态。如果确认寄存器为符号值,即将该基本块提升成对应的中间语言表现形式,随之进行符号执行;否则将进入对该微指令序列的具体执行阶段。在具体执行过程中,模拟执行引擎对其间涉及到的内存访问操作,会实时检查其内存操作数对应的机器状态。如果确认访问的内存为符号值,即进入上述符号执行阶段。可见上述过程对于微指令涉及的寄存器和内存操作数,分别在翻译和执行两个阶段进行符号状态检查,由此以一种按需调度的方式实现了符号执行的实时应用。
在步骤S3中,采集执行结果,将所述执行结果发送至所述调试客户端。具体地,调试服务端在调试命令处理完毕后,收集结果,将信息反馈给调试客户端;调试客户端接收命令执行反馈信息,并显示给终端用户。
具体示例一
基于动态符号执行、面向i386、Linux平台上二进制应用程序的软件调试器:
基于S2E动态符号执行平台,按照上述技术方案构建针对i386硬件平台、Linux操作***平台上运行的应用程序的基于动态符号执行的软件调试器。将调试服务端以插件的形式部署在S2E平台上。对S2E平台内部软件虚拟机动态二进制翻译机制进行了拓展,在使用内置的机器状态获取、修改模块的同时,添加了操作***信息动态监控模块和指令控制流动态监控模块;同时在S2E平台外部构建了对应的调试客户端。该调试客户端和调试服务端都部署于同一台宿主机。调试服务器通过监听宿主机8888端口从调试客户端获取调试命令,在完成命令的解析执行后,随即将返回结果按照预定的消息格式编码,通过共享内存传递给调试客户端。
具体示例二
软件逆向分析:
上述实施例可为软件逆向分析提供程序数据流分析的技术支持,以如下程序作为目标程序,在64位Ubuntu-16.04操作***上将该程序编译为32位i386架构下的ELF可执行程序test-p0。
int encrypt(int x,int y){
return((x<<8)^y);
}
int main(){
char*buffer=(char*)malloc(sizeof(char)*16);
char sbuffer[1024];
read(0,sbuffer,32);
memcpy(buffer,sbuffer,32);
int x=*((int*)buffer+4));
int y=*((int*)buffer+8));
int z=encrypt(x,y);
LABEL:...
return 0;
}
假定逆向分析希望确认当程序执行到LABEL标号时,程序变量z的数值状态和外部输入之间的依赖关系。LABEL标号处对应指令的虚拟地址为0x401035。
通过如下lua配置脚本指定该服务端监控的进程信息。该配置脚本除了指明被调试程序的主映像名称外,还指明了预期挂设的程序断点。随即启动调试服务端。由于调试服务端内预置有自启动脚本,将自动启动被调试的目标程序至预设断点(这仅是断点设置的一种方式,用户亦可在调试客户端输入断点命令动态挂设断点)。
在服务端启动完毕后,启动调试客户端。它将和调试服务端建立连接。当调试服务端内的被调试目标程序启动完毕后,将反馈信息给客户端,客户端此时即显示命令输入提示符,用户此时输入调试命令continue让程序继续执行(因为我们预设了调试断点);
当目标程序执行到0x401035时,调试服务端通知客户端断点触发,在客户端提供命令提示符下,用户可输入命令reg EAX查看当前EAX寄存器的符号状态,得到结果如下:
EAX=Xor((AShr(ReadLSB w32 0x4 STDIN_test-p0),8),
(ReadLSB w32 0x8 STDIN_test-p0)
)
由此可知0x401035处encrypt函数的返回值将和从标准输入读取数据中偏移[4-7]和偏移[8,11]的字节相关,具体的计算过程亦显示地反应的上述符号数值状态中。
具体示例三
软件漏洞调试:
上述实施例可为软件漏洞调试提供技术支持,以如下程序作为目标程序,在64位Ubuntu-16.04操作***上将该程序编译为32位i386架构下的ELF可执行程序test-p1。
int main(){
char sbuffer[16];
read(0,sbuffer,40);
return 0;
}
观察以上程序可发现其中存在一个栈缓冲区溢出漏洞,期望确认输入中的哪些字节能够对程序指令指针EIP产生影响。以同于具体示例二的方式启动调试过程。不同之处在于不需设置断点,直接运行程序即可。以40个’a’作为启动目标程序使用的种子输入内容。目标程序运行后很快即发生崩溃。调试服务器捕捉该信号,并通知调试客户端。客户端即通知用户目标程序崩溃事件发生,并提示用户于此时输入命令。用户可输入以下命令查看此时EIP的符号状态:reg EIP。结果如下:
EIP=(ReadLSB w32 0x14 STDIN_test-p1)
从该符号表示可直观看出偏移20开始的4个字节的输入可对EIP产生影响。由此进一步分析确认程序之前对这4个字节的处理过程中是否缺失验证条件,由此完成对该漏洞的成因分析和补丁构建。
综上,传统二进制软件调试技术大多仅对目标程序在具体执行过程中数据状态变化进行分析,对于程序变量之间的依赖关系、程序变量关于外部输入的依赖关系往往需要具备丰富软件逆向经验的分析人员花费较多时间手工推导确认。本申请的技术方案基于动态符号执行技术,在软件调试过程中,将上述依赖关系以一阶逻辑符号表达式的形式显示地提供给分析人员,由此节约时间和人力开销,提高软件逆向、漏洞调试等程序分析过程的效率。
本公开第二方面提供了一种基于动态符号执行的调试***。图4为根据本公开实施例的基于动态符号执行的调试***的机构图;如图4所示,所述调试***包括:第一模块401,被配置为,启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行;第二模块402,被配置为,经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令;以及第三模块403,被配置为,采集执行结果,将所述执行结果发送至所述调试客户端。
具体地,所述具体-符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。
具体地,所述命令包括:操作***执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
具体地,与所述操作***执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的***运行时刻进行挂钩;以及与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
本公开第三方面提供了一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据本公开第一方面的基于动态符号执行的调试方法中的步骤。
综上,本公开各个方面的技术方案依托于软件虚拟机,在动态二进制翻译过程中加入动态符号执行机制,同时在程序的仿真执行过程中引入断点监控机制,由此使用户能够在预定义断点触发时,得到关注程序变量对于外部输入的显示依赖关系,由此提升软件调试的效率。本方案的核心思想在于,在目标程序的具体执行过程中同时进行符号执行,由此在数据查看时刻能够以一阶逻辑符号表达式的提供关注变量关于外部输入的依赖信息,从而根据用户需求,实时计算并提供给程序分析人员直观的任一程序变量对于外部输入的依赖关系。
最后应说明的是:以上各实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述各实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的范围。

Claims (7)

1.一种基于动态符号执行的调试方法,其特征在于,所述调试方法包括:
步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行;
步骤S2、经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令;以及
步骤S3、采集执行结果,将所述执行结果发送至所述调试客户端;
其中,所述具体-符号执行包括:
从所述目标程序中提取基本块,并生成微指令序列;
扫描所述微指令序列中寄存器对应的机器状态;
当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;
否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令;
其中,对于给定的调试命令,根据指定的机器位置索引到对应的符号机器状态;如确认为符号值,即返回给用户该机器位置当前对应的外部输入相关的符号表达式;否则即为与外部输入无关的具体值。
2.根据权利要求1所述的基于动态符号执行的调试方法,其特征在于,所述命令包括:操作***执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
3.根据权利要求2所述的基于动态符号执行的调试方法,其特征在于,其中:
与所述操作***执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;
与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的***运行时刻进行挂钩;以及
与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
4.一种基于动态符号执行的调试***,其特征在于,所述调试***包括:
第一模块,被配置为,启动调试服务端的目标程序,对所述目标程序执行具体-符号执行,所述具体-符号执行同时对所述目标程序执行具体执行和符号执行;
第二模块,被配置为,经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体-符号执行来执行所述命令;以及
第三模块,被配置为,采集执行结果,将所述执行结果发送至所述调试客户端;
其中,所述具体-符号执行包括:
从所述目标程序中提取基本块,并生成微指令序列;
扫描所述微指令序列中寄存器对应的机器状态;
当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;
否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令;
其中,对于给定的调试命令,根据指定的机器位置索引到对应的符号机器状态;如确认为符号值,即返回给用户该机器位置当前对应的外部输入相关的符号表达式;否则即为与外部输入无关的具体值。
5.根据权利要求4所述的基于动态符号执行的调试***,其特征在于,所述命令包括:操作***执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
6.根据权利要求5所述的基于动态符号执行的调试***,其特征在于,其中:
与所述操作***执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;
与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的***运行时刻进行挂钩;以及
与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
7.一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据权利要求1-3中任一项所述的基于动态符号执行的调试方法中的步骤。
CN202210183362.3A 2022-02-28 2022-02-28 一种基于动态符号执行的调试方法、***和介质 Active CN114510429B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210183362.3A CN114510429B (zh) 2022-02-28 2022-02-28 一种基于动态符号执行的调试方法、***和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210183362.3A CN114510429B (zh) 2022-02-28 2022-02-28 一种基于动态符号执行的调试方法、***和介质

Publications (2)

Publication Number Publication Date
CN114510429A CN114510429A (zh) 2022-05-17
CN114510429B true CN114510429B (zh) 2024-05-07

Family

ID=81552857

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210183362.3A Active CN114510429B (zh) 2022-02-28 2022-02-28 一种基于动态符号执行的调试方法、***和介质

Country Status (1)

Country Link
CN (1) CN114510429B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116737323B (zh) * 2023-08-10 2023-11-10 上海移芯通信科技股份有限公司 一种基于物联网芯片的脚本调用方法和装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN102289362A (zh) * 2011-08-26 2011-12-21 北京邮电大学 分段符号执行装置及其工作方法
CN102841844A (zh) * 2012-07-13 2012-12-26 北京航空航天大学 一种基于简易符号执行的二进制代码漏洞挖掘方法
CN103399780A (zh) * 2013-07-03 2013-11-20 清华大学 一种基于虚拟机技术和动态符号执行的整数溢出检测方法
CN106354630A (zh) * 2016-08-23 2017-01-25 电子科技大学 一种基于动态符号执行的软件缺陷检测方法
CN110337642A (zh) * 2017-02-28 2019-10-15 搜牌逻有限公司 通过使用测试用例来执行测试的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205720A1 (en) * 2001-04-30 2004-10-14 Robert Hundt Augmenting debuggers
US20080082969A1 (en) * 2006-04-04 2008-04-03 The Board Of Trustees Of The University Of Illinois Software Testing Technique Supporting Dynamic Data Structures
US9183396B2 (en) * 2012-05-21 2015-11-10 Carnegie Mellon University Detecting exploitable bugs in binary code
CN104063325B (zh) * 2014-07-11 2016-10-26 电子科技大学 一种针对嵌入式软件的测试用例自动化生成装置及其方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN102289362A (zh) * 2011-08-26 2011-12-21 北京邮电大学 分段符号执行装置及其工作方法
CN102841844A (zh) * 2012-07-13 2012-12-26 北京航空航天大学 一种基于简易符号执行的二进制代码漏洞挖掘方法
CN103399780A (zh) * 2013-07-03 2013-11-20 清华大学 一种基于虚拟机技术和动态符号执行的整数溢出检测方法
CN106354630A (zh) * 2016-08-23 2017-01-25 电子科技大学 一种基于动态符号执行的软件缺陷检测方法
CN110337642A (zh) * 2017-02-28 2019-10-15 搜牌逻有限公司 通过使用测试用例来执行测试的方法和装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
BINSEC/SE: A Dynamic Symbolic Execution Toolkit for Binary-Level Analysis;Robin David;《2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER)》;20160331;第14卷(第18期);第653-656页 *
Csallner, Christoph.DySy: Dynamic Symbolic Execution for Invariant Inference.《 ICSE'08 PROCEEDINGS OF THE THIRTIETH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING》.2008,第10卷(第18期),第281-290页. *
Research on the Key Technology of Selective Symbolic Execution;Lu YuLiang;《8th International Conference on Instrumentation Measurement Computer Communication and Control》;20180731;第19卷(第21期);第1067-1070页 *
基于动态符号执行的二进制程序缺陷发现***;黄晖 、 陆余良 、夏阳;《计算机应用研究》;20130930;第30卷(第9期);第2810-2812页 *

Also Published As

Publication number Publication date
CN114510429A (zh) 2022-05-17

Similar Documents

Publication Publication Date Title
CN109800159B (zh) 程序调试方法、程序调试装置、终端设备及存储介质
US7266809B2 (en) Software debugger and software development support system for microcomputer operable to execute conditional execution instruction
EP1179777B1 (en) Generation of runtime execution traces of applications and error detection
CA2332650C (en) Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof
CN110580226B (zh) 操作***级程序的目标码覆盖率测试方法、***及介质
US20070079288A1 (en) System and method for capturing filtered execution history of executable program code
JPH0689200A (ja) デバッグシステム及び方法
US20070079177A1 (en) Process monitoring and diagnosis apparatus, systems, and methods
US20070300209A1 (en) Run into function
CN107577593B (zh) 使用执行单一步骤来诊断编码
CN107220175B (zh) 应用程序死循环定位方法、装置、计算机设备和存储介质
CN108021791B (zh) 数据保护方法及装置
CN111291384A (zh) 漏洞扫描方法、装置及电子设备
CN114510429B (zh) 一种基于动态符号执行的调试方法、***和介质
US20080307397A1 (en) Program Analysis by Partial Emulation
CN105630664B (zh) 一种反向调试方法、装置及调试器
CN111352842A (zh) 基于嵌入式的软件调试方法
CN100403275C (zh) 应用于固件程序除错的微处理器与方法
EP2634693A1 (en) Method and apparatus for interacting with runnung software
CN115905012A (zh) 嵌入式***软件开发场景下的调试分析***、方法、电子设备及存储介质
JP2010287101A (ja) ソフトウエアデバッグ装置及び方法
CN115033223A (zh) 一种日志生成方法及装置
CN110647467B (zh) 基于单步异常的目标码覆盖率测试方法、***及介质
KR100428712B1 (ko) 멀티 태스크 프로그램의 논스톱 디버깅을 위한트레이스포인트 설정 방법
CN110554969B (zh) 基于预设断点的目标码覆盖率测试方法、***及介质

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