掌桥专利:专业的专利平台
掌桥专利
首页

一种符号化内存映射方法及系统

文献发布时间:2024-04-18 19:52:40



技术领域

本发明主要涉及到计算机程序分析技术领域,特指一种符号化内存映射方法及系统。

背景技术

“符号执行”是一种计算机科学领域的程序分析技术,它是通过采用抽象的符号值代替具体值作为程序的变量分析程序的技术。

使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器求解可以触发目标代码的具体值。

符号执行的过程涉及程序内存空间的维护,需要建立程序内存空间到符号表达式的映射关系。无论应用于源码还是应用于二进制程序的符号执行,符号化内存映射方法是他们不可或缺的组成部分。

但是现有的符号化内存映射方法仍有一些不足:

(1)没有维护内存的读写属性;

(2)若对程序用到的所有内存进行符号化,则开销较大;

(3)若对程序用到的一部分内存进行符号化,从未符号化的内存读取的符号表达式为空值或者具体值。

发明内容

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、适用范围广、硬件开销小的符号化内存映射方法及系统。

为解决上述技术问题,本发明采用以下技术方案:

一种符号化内存映射方法,其包括:

步骤S1:根据内存读写属性配置,初始化内存属性判断器;

步骤S2:根据符号化内存配置,初始化符号表达式映射器;

步骤S3:输入处理器接收读取操作或者写入操作,内存属性判断器根据步骤S1中的内存属性判断器,判断读写操作的合法性;对于不合法操作,交由输出处理器生成输出;对于合法操作,交由符号表达式映射器执行后续操作;

步骤S4:符号表达式映射器根据读写操作,和步骤S2中符号化内存配置,分情况处理符号化内存的读写操作。

作为本发明方法的进一步改进:所述步骤S4中包括:对于读操作,读取的内存ra1配置为符号化内存的情况下;若读取的内存映射到符号表达式sym_ra1,则将该符号表达式交给输出处理器输出,否则根据读取内存的具体内存值ra1_value,生成符号表达式sym_ra1_value,交给输出处理器输出。

作为本发明方法的进一步改进:所述步骤S4中包括:对于读操作,读取的内存ra2未配置为符号化内存的情况下;若读取的内存映射到符号表达式sym_ra2,则将该符号表达式交给输出处理器输出,否则将读取内存的具体内存值ra2_value,交给输出处理器输出。

作为本发明方法的进一步改进:所述步骤S4中包括:对于写操作,写入的内存wa1配置为符号化内存的情况下;若写入的内存为具体值wa1_value,则根据此具体值生成符号值sym_wa1_value,若写入的内存为符号值sym_wa1_value,则直接使用此符号值;然后,在符号表达式中记录写入内存wa1到符号表达式sym_wa1_value的映射,且将该符号表达式sym_wa1_value交给输出处理器输出。

作为本发明方法的进一步改进:所述步骤S4中包括:对于写操作,写入的内存wa2未配置为符号化内存的情况下;若写入内存的值为符号值sym_wa2_value,符号表达式中记录写入内存wa2到符号表达式sym_wa2_value的映射,且将该符号表达式sym_wa2_value交给输出处理器输出;若写入内存的值为具体值wa2_value,则将该具体值wa2_value交给输出处理器输出。

作为本发明方法的进一步改进:所述步骤S1中,内存读写属性配置描述了一段内存范围只读r或者可读写rw,采用json格式的语法表示。

作为本发明方法的进一步改进:所述步骤S2中,符号化内存配置置描述了一段符号化内存范围,采用json格式的语法表示。

本发明进一步提供一种符号化内存映射系统,其包括内存属性判断器、符号表达式映射器、输入处理器及输出处理器,所述输入处理器用来接收读取操作或者写入操作,所述内存属性判断器用来判断读写操作的合法性;对于不合法操作,交由所述输出处理器生成输出;对于合法操作,交由所述符号表达式映射器执行后续操作;所述符号表达式映射器根据读写操作以及符号化内存配置分情况处理符号化内存的读写操作。

作为本发明装置的进一步改进:将符号化内存划分为可读内存、可写内存、可读写内存;对于内存的读取和写入操作,分以下情况进行处理:

(1)对于从非符号化内存读的情况,若内容为符号表达式,则返回符号表达式,若内容为非符号表达式,则返回具体值;

(2)对于向非符号化内存写的情况,若写入值为符号表达式,则内存映射为符号表达式,若写入值为非符号表达式,则忽略;

(3)对于从符号化内存读的情况,若内容为符号表达式,则返回符号表达式,若内容为非符号表达式,则返回具体值对应的符号表达式;

(4)对于向符号化内存写的情况,则记录内存映射到符号表达式。

作为本发明装置的进一步改进:内存读写属性配置描述了一段内存范围只读r或者可读写rw,采用json格式的语法表示;符号化内存配置描述了一段符号化内存范围,采用json格式的语法表示。

与现有技术相比,本发明的优点就在于:本发明的符号化内存映射方法及系统,原理简单、适用范围广、硬件开销小,对于内存的读取和写入操作分情况进行处理,为此本发明具有维护内存的读写属性,映射效果较好等优点。

附图说明

图1是本发明方法的流程示意图。

图2是本发明在具体应用实例中装置的结构组成原理示意图。

具体实施方式

以下将结合说明书附图和具体实施例对本发明做进一步详细说明。

本发明的一种符号化内存映射方法,它将符号化内存划分为可读内存、可写内存、可读写内存;对于内存的读取和写入操作,分以下情况进行处理:

1、对于从非符号化内存读的情况,若内容为符号表达式,则返回符号表达式,若内容为非符号表达式,则返回具体值;

2、对于向非符号化内存写的情况,若写入值为符号表达式,则内存映射为符号表达式,若写入值为非符号表达式,则忽略;

3、对于从符号化内存读的情况,若内容为符号表达式,则返回符号表达式,若内容为非符号表达式,则返回具体值对应的符号表达式;

4、对于向符号化内存写的情况,则记录内存映射到符号表达式。

如图1所示,本发明的一种符号化内存映射方法,包括以下步骤:

步骤S1:根据内存读写属性配置,初始化内存属性判断器;

内存读写属性配置描述了一段内存范围(从addr1到addr2)只读(r)或者可读写(rw),采用json格式的语法表示。例如:

{”range”:{”start”:addr1,”end”:addr2},”attribute”:”r”}或者{”range”:{”start”:addr1,”end”:addr2},”attribute”:”rw”};

步骤S2:根据符号化内存配置,初始化符号表达式映射器。

符号化内存配置描述了一段符号化内存范围(从addr1到addr2),采用json格式的语法表示,例如:{”range”:{”start”:addr1,”end”:addr2}};

步骤S3:输入处理器接收读取操作或者写入操作,内存属性判断器根据步骤S1中的内存属性判断器,判断读写操作的合法性。对于不合法操作,交由输出处理器生成输出;对于合法操作,交由符号表达式映射器执行后续操作。

步骤S4:符号表达式映射器根据读写操作,和步骤S2中符号化内存配置,分情况处理符号化内存的读写操作。

在具体应用实例中,所述步骤S4中包括:对于读操作,读取的内存ra1配置为符号化内存的情况下。若读取的内存映射到符号表达式sym_ra1,则将该符号表达式交给输出处理器输出,否则根据读取内存的具体内存值ra1_value,生成符号表达式sym_ra1_value,交给输出处理器输出。

在具体应用实例中,所述步骤S4中包括:对于读操作,读取的内存ra2未配置为符号化内存的情况下。若读取的内存映射到符号表达式sym_ra2,则将该符号表达式交给输出处理器输出,否则将读取内存的具体内存值ra2_value,交给输出处理器输出。

在具体应用实例中,所述步骤S4中包括:对于写操作,写入的内存wa1配置为符号化内存的情况下。若写入的内存为具体值wa1_value,则根据此具体值生成符号值sym_wa1_value,若写入的内存为符号值sym_wa1_value,则直接使用此符号值。然后,在符号表达式中记录写入内存wa1到符号表达式sym_wa1_value的映射,且将该符号表达式sym_wa1_value交给输出处理器输出。

在具体应用实例中,所述步骤S4中包括:对于写操作,写入的内存wa2未配置为符号化内存的情况下。若写入内存的值为符号值sym_wa2_value,符号表达式中记录写入内存wa2到符号表达式sym_wa2_value的映射,且将该符号表达式sym_wa2_value交给输出处理器输出。若写入内存的值为具体值wa2_value,则将该具体值wa2_value交给输出处理器输出。

在一个本发明的具体应用实例中,本实例采用了配置内存范围0x1000-0x5000和内存范围0x7000-0x9000为符号化内存的符号化内存配置,如

{”range”:[{”start”:”0x1000”,”end”:”0x5000”},{”start”:”0x7000”,”end”:”0x9000”}]};

配置内存范围0x1000-0x3000为只读内存,内存范围0x4000-0x8000为可读可写内存的内存读写属性配置,如:

[{”range”:{”start”:”0x1000”,”end”:”0x3000”},”attribute”:”r”},{”range”:{”start”:”0x4000”,”end”:”0x8000”},”attribute”:”rw”}];

通过以下几种情况描述实例的执行过程:

(1)向不可写位置写入符号表达式的情况。

将符号表达式sym_a写入内存位置0x2000,内存属性判断器判断内存0x2000写入非法,输出处理器输出非法操作。

(2)向不可写位置写入具体值的情况。

将具体值0xa写入内存位置0x2000,内存属性判断器判断内存0x2000写入非法,输出处理器输出非法操作。

(3)向可写的符号化内存位置写入符号表达式的情况。

将符号表达式sym_a写入内存位置0x7000,内存属性判断器判断内存0x7000写入合法,符号表达式映射器判断内存位置0x7000为符号化内存,符号表达式映射器记录内存位置0x7000到符号表达式sym_a的映射,输出处理器输出成功写入的符号表达式sym_a。

(4)向可写的符号化内存位置写入具体值的情况。

将具体值0xa写入内存位置0x7000,内存属性判断器判断内存0x7000写入合法,生成具体值0xa对应的符号表达式sym_a,符号表达式映射器记录内存位置0x7000到符号表达式sym_a的映射,输出处理器输出成功写入的符号表达式sym_a。

(5)向可写的非符号化内存位置写入符号表达式的情况。

将表达式sym_a写入内存位置0x6000,内存属性判断器判断内存0x6000写入合法,符号表达式映射器记录内存位置0x6000到符号表达式sym_a的映射,输出处理器输出成功写入的符号表达式sym_a。

(6)向可写的非符号化内存位置写入具体值的情况。

将具体值0xa写入内存位置0x6000,内存属性判断器判断内存0x6000写入合法,符号表达式映射器判断内存位置0x6000为非符号化内存,且写入值为具体值,忽略该写入操作。

(7)从不可读的内存位置读取的情况。

从内存位置0x5000读取符号表达式,内存属性判断器判断内存0x5000读取非法,输出处理器输出非法操作。

(8)从可读的符号化内存位置读取的情况。

从内存位置0x2000读取符号表达式,内存属性判断器判断内存0x2000读取合法,若符号表达式映射器中记录了内存位置0x2000到符号表达式sym_b的映射,则输出处理器输出符号表达式sym_b,否则根据内存位置0x2000处的具体值0xb生成符号表达式sym_b,输出处理器输出符号表达式sym_b。

(9)从可读的非符号化内存位置读取的情况。

从内存位置0x6000读取符号表达式,内存属性判断器判断内存0x6000读取合法,符号表达式映射器判断内存位置0x6000为非符号化内存,若符号表达式映射器中记录了内存位置0x6000到符号表达式sym_a的映射,则输出处理器输出符号表达式sym_a,否则输出空的符号表达式。

本发明进一步提供一种符号化内存映射系统,其包括内存属性判断器、符号表达式映射器、输入处理器及输出处理器,所述输入处理器用来接收读取操作或者写入操作,所述内存属性判断器用来判断读写操作的合法性;对于不合法操作,交由所述输出处理器生成输出;对于合法操作,交由所述符号表达式映射器执行后续操作;所述符号表达式映射器根据读写操作以及符号化内存配置分情况处理符号化内存的读写操作。

作为本发明装置的进一步改进:将符号化内存划分为可读内存、可写内存、可读写内存;对于内存的读取和写入操作,分以下情况进行处理:

(1)对于从非符号化内存读的情况,若内容为符号表达式,则返回符号表达式,若内容为非符号表达式,则返回具体值;

(2)对于向非符号化内存写的情况,若写入值为符号表达式,则内存映射为符号表达式,若写入值为非符号表达式,则忽略;

(3)对于从符号化内存读的情况,若内容为符号表达式,则返回符号表达式,若内容为非符号表达式,则返回具体值对应的符号表达式;

(4)对于向符号化内存写的情况,则记录内存映射到符号表达式。

作为本发明装置的进一步改进:内存读写属性配置描述了一段内存范围只读r或者可读写rw,采用json格式的语法表示;符号化内存配置描述了一段符号化内存范围,采用json格式的语法表示。

以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。

技术分类

06120116329605