CN103745755A - 一种高效且高可用的空间内存错误检测方法 - Google Patents

一种高效且高可用的空间内存错误检测方法 Download PDF

Info

Publication number
CN103745755A
CN103745755A CN201410005315.5A CN201410005315A CN103745755A CN 103745755 A CN103745755 A CN 103745755A CN 201410005315 A CN201410005315 A CN 201410005315A CN 103745755 A CN103745755 A CN 103745755A
Authority
CN
China
Prior art keywords
pointer
memory
program
space
stain
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.)
Granted
Application number
CN201410005315.5A
Other languages
English (en)
Other versions
CN103745755B (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.)
Institute of Software of CAS
Third Research Institute of the Ministry of Public Security
Original Assignee
Institute of Software of CAS
Third Research Institute of the Ministry of Public Security
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 Institute of Software of CAS, Third Research Institute of the Ministry of Public Security filed Critical Institute of Software of CAS
Priority to CN201410005315.5A priority Critical patent/CN103745755B/zh
Publication of CN103745755A publication Critical patent/CN103745755A/zh
Application granted granted Critical
Publication of CN103745755B publication Critical patent/CN103745755B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种高效且高可用的空间内存错误检测方法,其步骤包括:对程序进行静态污点分析,对可能会被攻击者所控制的指针进行污点标记;在程序运行前,构建影子内存空间,对被污点标记的指针的边界信息进行存储;然后对程序中污点标记的指针创建其边界信息,并传播到其他相关指针;最后对于程序中使用污点标记的指针写内存的指令进行指针边界检测,通过在程序中插入容忍错误的代码,使得程序可以容忍空间内存错误的发生,保证程序的可用性。本发明使得被转换过的程序在运行时性能开销降低,并且能够有效检测出空间内存错误。另外本发明采用错误容忍的方法,提高程序的可用性,防止程序遭受拒绝服务攻击。

Description

一种高效且高可用的空间内存错误检测方法
技术领域
本发明属于计算机软件内存安全技术领域,具体涉及一种空间内存错误检测方法。
背景技术
程序的内存错误通常分为两类:空间内存错误和时间内存错误。空间内存错误包括数组越界错误(如,缓冲区溢出),未初始化指针解引用,无效的类型转换错误,格式化字符串错误等等。时间内存错误包括悬挂指针解引用,双重释放,无效释放等等。内存错误大多存在于C/C++语言中,因为根据C/C++语言标准,数组越界,空指针解引用,读一个未初始化的变量,会导致未定义的行为。攻击者可以通过利用程序的内存错误来控制程序的执行。在CWE/SANS发布的排名前25个最危险的软件错误中,内存错误占据4个。另外根据NIST的NVD漏洞数据库的报告,在2011年的1818个高危漏洞中,超过1/3都是由内存错误引起的。
目前,空间内存错误的检测方法可以分为两种:基于内存对象边界的检测和基于指针边界的检测。基于内存对象边界的检测通常使用一个单独的数据结构来记录和追踪程序运行时分配的内存区域的边界信息,当使用指针访问一个内存区域时,使用记录的内存对象边界信息来检测指针是否指向该内存区域。这种方法虽然能够提高程序的兼容性,能够透明的与库函数进行交互,但是该方法由于使用的数据结构比较复杂,导致程序的性能开销比较高,而且不能检测使用指针访问一个内存对象中的子内存对象的错误。基于指针边界的检测将指针指向的内存对象的边界信息与每个指针关联起来,当指针访问内存对象时,使用这些边界信息检测指针是否在内存对象内。在实现这种方法时,通常会修改指针的内存表示,将指针指向的内存对象的边界信息与该指针存储在一起。这种方法虽然避免了查找边界信息造成的性能开销,但是因为指针的内存表示被修改,所以该方法使得程序无法与库函数进行透明的交互,降低了程序的兼容性。
宾夕法尼亚大学的Santosh于09年在PLDI会议上发表论文《SoftBound:HighlyCompatible and Complete Spatial Memory Safety for C》,该论文提出了一种基于指针边界的方法,通过将指针的边界信息与指针分开存储来提高程序与使用的库函数的兼容性,并可以检测指针访问子内存对象时出现的错误。但是这种方法的性能开销仍然比较高,而且,当检测到程序的内存错误时,程序就会终止运行,这样会降低程序的可用性,并且可以导致拒绝服务攻击。
发明内容
针对目前基于指针边界的空间内存错误检测方法中存在的性能开销高、兼容度低、可用性低的问题,本发明的目的在于提供一种低性能开销、高兼容度且高可用性的空间内存错误检测方法,以更好且更高效地实时检测程序运行过程中出现的内存错误,且保证在发生内存错误时,程序可以继续正常运行,防止攻击者实施拒绝服务攻击。
为实现上述目的,本发明采用如下技术方案:
一种高效且高可用的空间内存错误检测方法,包括以下步骤:
1)对程序进行静态污点分析,标记污点指针;
2)对程序进行编译生成中间代码,并构建内存影子空间;
3)分析程序的中间代码,创建该污点指针的base和bound边界信息,并存储到所述的内存影子空间;
4)对程序中间代码中的指针运算、数组索引和指针赋值三种指令进行分析,将参与运算的被标记为污点指针的原始指针的边界信息拷贝到运算后得到的结果指针对应的影子空间中;
5)对程序中使用污点指针进行写内存的指令,进行指针边界检测,根据污点指针的base和bound边界信息确定的内存边界,检测出空间内存错误。
进一步地,步骤1)中,标记污点指针又包括以下步骤:
1-1)将程序调用的外部库函数返回和修改的数据标记为污点(taint),其中“数据”包括指针类型数据和非指针类型数据;
1-2)对程序进行数据流分析,传播污点标记;
1-3)对程序进行指针别名分析,将与上述污点指针是别名关系的指针标记为taint。
进一步地,步骤1-1)中,还包括将程序所接受的用户输入的参数值标记为taint。
进一步地,步骤1-1)中所述的外部库函数包括从文件中读取数据的库函数和从网络中接收数据的库函数,所述的用户输入的参数值是指程序的命令行参数。
进一步地,步骤1-2)中所述的数据流分析是程序间的数据流分析,步骤1-3)中所述的指针别名分析是指程序间的指针别名分析。
进一步地,步骤2)中所述的内存影子空间是通过分析中间代码找到main函数,在main函数的第一条指令之前,插入调用mmap()库函数的指令,在虚拟内存中创建的一块内存区域,操作系统会为该内存区域按需分配实际的物理内存。
进一步地,步骤3)中所述的指针的base和bound边界信息,是指指针指向的内存对象的地址边界,包括base地址和bound地址,所述base地址表示访问一个内存对象所允许使用的最低地址,所述bound地址表示访问一个内存对象所允许使用的最高地址。
进一步地,步骤5)中所述的进行指针边界检测,是将指针和指针访问的内存大小与指针的base和bound边界信息进行比较。如果用ptr表示该指针,size表示指针访问的内存大小,那么如果ptr<base或者ptr+size>bound,那么就说明该指针访问内存时出现错误,即检测到空间内存错误。
进一步地,步骤5)中当检测到空间内存错误时,通过开启程序的可用性功能,在程序中插入代码,忽略会导致内存错误的指令,继续执行下一条指令,提高程序的可用性;通过关闭程序的可用性功能,在程序中插入代码,终止程序的执行。
进一步地,步骤5)中所述的输出指针越界的相关信息,是指在检测到指针访问内存出现错误时,向用户输出指针值,指针指向的内存对象的边界信息,以利于用户查找代码中出现内存错误的原因。
下面进一步说明本发明的优点:
1)和空间内存错误检测工具SoftBound相比,程序在运行时的时间性能开销降低。因为在对程序插桩的过程中,只对标记为taint的指针进行存储和传播base和bound边界信息,这就减少了程序运行过程中存储和传播指针边界信息所需的时间,而且只对使用标记为taint的指针向内存中写数据时的指令进行边界检测,这就减少了程序运行过程中对使用指针访问内存时所做的检查次数。
2)能够有效地检测出攻击者利用程序中的空间内存错误进行的攻击。因为攻击者利用空间内存错误进行攻击时,必然要通过程序的命令行参数或程序使用的接收外部数据的库函数来引导程序产生内存错误,从而攻击者将自己的数据写到其本不应该写的内存位置,导致程序按照攻击者的意图进行运行。本发明通过对程序的命令行参数和程序通过库函数从外部接收的数据进行污点标记(即标记为taint)、污点传播,以及对程序进行指针别名分析,从而知道程序中哪些内存对象和指针会被攻击者所控制。通过对使用污点指针访问内存对象时,进行边界检测,从而有效地防御攻击者利用程序的空间内存错误进行的攻击。
3)和空间内存错误检测工具SoftBound相比,程序的可用性得到提高。SoftBound中,如果检测到空间内存错误发生时,就终止程序的运行。这种做法容易被攻击者所利用进而对该程序实施拒绝服务攻击。如果该程序是服务器程序,那么会影响用户的使用。本发明通过忽略程序中的空间内存错误,容忍该错误,从而提高了程序的可用性,不会使程序遭受拒绝服务攻击。另外,本发明只对使用指针向内存中写数据时进行检测,所以如果忽略了写内存时产生的错误,即越界写内存,则不会影响程序的正常功能,而且能防止攻击者破坏程序的内存数据。
附图说明
图1是基于LLVM编译器实现本发明的流程图。
图2是基于LLVM实现的EABound流程图。
图3是静态污点分析阶段流程图。
图4是指针边界信息创建和传播阶段流程图。
图5是添加指针边界检查和提高可用性阶段流程图。
具体实施方式
下面通过结合附图和实施例,对本发明作进一步说明。
图1为基于LLVM编译器实现本发明的流程图。LLVM编译器是一个开源的编译器,提供一个现代化的,基于SSA(single static assignment)的模块化和可重用的编译框架。LLVM提供很多API接口,方便实现不同的编译优化技术,同时,本发明在LLVM的中间代码上进行实现,这样,就可以独立于底层的硬件架构。本发明的实施,需要使用三个编译工具对C语言源代码进行分析和插桩.首先使用LLVM的编译前端工具clang对源代码(*.c)处理,得到LLVM中间代码文件(*.bc),然后使用链接工具llvm-link将各源代码文件被编译后形成的中间代码文件进行合并,形成一个中间代码文件(src.bc),便于进行后续处理。EABound是本发明基于LLVM实现的工具。EABound接收一个中间代码文件,执行完LLVM的各个优化阶段后,执行本发明实现的静态污点分析、指针边界信息创建和传播、添加指针边界检查和提高程序可用性三个优化阶段,最后输出经过EABound优化和插桩过的中间代码EABound.bc。最后使用llvm-ld工具对EABound.bc处理得到本地可执行文件EABound.exe。因为clang、llvm-link和llvm-ld是LLVM自身提供的编译工具,使用它们的方法是直接和简单的,所以在此主要说明本发明实现的EABound工具的实施。
图2是基于LLVM实现的EABound流程图。EABound接收一个LLVM中间代码文件src.bc,需要经过三个阶段的处理:静态污点分析阶段(TaintAnalysisPass)、指针边界信息创建和传播阶段(BaseBoundPass)和添加指针边界检查和提高可用性阶段(BoundCheckingPass)。每个阶段的实现都是LLVM中ModulePass类的子类。LLVM中的Pass类是对中间代码作转换和优化的类。下面分别对这三个阶段作进一步的说明。
图3是静态污点分析阶段示意图,该阶段包括三个部分:识别污点源,污点传播,指针别名分析。“识别污点源”部分,通过分析中间代码指令,识别出调用从外部接收输入数据的库函数,然后对该库函数返回的和修改的指针或内存对象进行污点标记。污点标记是指对指针或内存对象添加类型:taint和untaint。taint表示被标记为污点类型,untaint表示未被标记为污点类型。指针和内存对象(分配的一块内存区域)在LLVM中以Value对象来表示,在实现污点标记时,创建一个Map<Value,taint/untaint>,将Value映射为taint或untaint值。通过在该Map中插入键/值对来对指针或内存对象进行标记,通过对Map进行查询,确认一个指针或内存对象是否被进行污点标记。“污点传播”部分对涉及到指针或内存对象的操作指令进行分析,这些指令包括:通过其他指针经过算术运算得到新的指针值,获取内存对象的地址,对内存对象进行拷贝等。如果指令中有被标记为taint的操作数,则,指令的目的操作数也被标记为taint,否则,不对目的操作数进行污点标记。“指针别名分析”部分,通过利用LLVM中的llvm::AliasSetTracker接口获得指针的别名信息。llvm::AliasSetTracker接口提供getAliasSetForPointer函数,通过该函数获取一个未被标记为taint的指针ptr的别名指针集合,然后对该别名指针集合进行遍历,如果集合中有一个指针被标记为taint,则也将指针ptr标记为taint。通过执行指针别名分析,获得一个比较全面的污点指针集合,进而降低漏报的情况。
图4是指针边界信息创建和传播阶段流程图。该阶段包括两个部分:创建base/bound和传播base/bound。这里的“创建”和“传播”是指在中间代码中插入新的代码来实现边界信息的创建和传播功能。对于该阶段,EABound参考了SoftBound的实现方法进行实现,另外,EABound的实现与SoftBound又不同,EABound通过创建指针的污点标记和使用指针的污点标记来进一步优化边界检查的性能。Base/bound边界信息需要在内存中进行存储,EABound通过一个二级表结构来进行存储,并使用mmap()为二级表结构分配内存。二级表结构类似于操作系统中的页表结构,通过使用指针值进行索引,获得指针对应的边界信息。C语言中的指针通过两种方式进行创建:一是通过内存分配函数,如malloc(),二是通过使用地址操作符'&'来获得内存对象的地址。EABound首先查询静态污点分析阶段创建的Value到taint/untaint的Map映射结构来确定创建的指针是否被标记为污点,也就是该指针指向的内存对象是否会被攻击者操作。如果该指针被标记为taint,则通过插入代码设定该指针的base/bound值。对于通过内存分配操作创建的指针,base值设定为这些内存分配函数返回的地址,bound值设定为base值加上分配的内存大小。对于使用地址操作符'&'得到的指针,指针的base值设定为数组的第一个元素的地址,bound设定为base值加上数组的大小。“传播base/bound”部分,当一个表达式包含指针算术(如:ptr+index)、数组索引(比如:&(ptr[index]))或指针赋值(比如:newptr=ptr)时,如果参与计算或赋值的指针或数组被标记为taint,则插入代码,将源指针的base和bound信息拷贝给结果指针。
图5是添加指针边界检查和提高可用性阶段流程图,该阶段包括:边界检查和提高可用性两部分。“边界检查”部分,对中间代码中的每条store指令进行分析,通过查询静态污点分析阶段的结果,如果store指令中的指针被标记为taint,则在该指令前面添加指针边界检查,否则,不作任何事情。在“提高可用性”部分,在做完指针边界检查后,如果store指令中的指针在base/bound边界之内,则继续执行store指令。如果store指令中的指针违反了base/bound边界条件,则插入代码,判断用户是否通过命令行参数指定提高程序的可用性,如果用户需要提高程序的可用性,则使用中间代码的br指令跳转到store指令的下一条指令。这样就避免了执行造成内存错误的store指令。如果用户没有指定调高程序的可用性,则直接调用abort()函数,终止程序执行。
通过EABound对程序的llvm中间代码进行转换过后,使用llvm-ld将中间代码编译为可执行指令。当该程序在执行过程中,如果攻击者试图利用程序源代码中的空间内存错误进行攻击时,在保证程序可用性的情况下,程序会忽略攻击者执行攻击时利用的指令,避免内存错误的发生,保证程序正确可靠地执行。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,本发明的保护范围应以权利要求所述为准。

Claims (10)

1.一种高效且高可用的空间内存错误检测方法,包括以下步骤:
1)对程序进行静态污点分析,标记污点指针;
2)对程序进行编译生成中间代码,并构建内存影子空间;
3)分析程序的中间代码,创建所述污点指针的base和bound边界信息,并存储到所述内存影子空间;
4)分析所述中间代码的指针运算、数组索引和指针赋值三种指令,将参与运算的被标记为污点指针的原始指针的边界信息拷贝到运算后得到的结果指针对应的内存影子空间;
5)对程序中使用污点指针进行写内存的指令进行指针边界检测,根据污点指针的base和bound边界信息确定的内存边界检测出空间内存错误。
2.如权利要求1所述的空间内存错误检测方法,其特征在于,步骤1)中,标记污点指针又包括以下步骤:
1-1)将程序调用的外部库函数返回和修改的数据标记为污点,其中“数据”包括指针类型数据和非指针类型数据;
1-2)对程序进行数据流分析,传播污点标记;
1-3)对程序进行指针别名分析,将与上述污点指针是别名关系的指针标记为污点。
3.如权利要求2所述的空间内存错误检测方法,其特征在于,步骤1-1)中,还包括将程序所接受的用户输入的参数值标记为污点。
4.如权利要求3所述的空间内存错误检测方法,其特征在于,步骤1-1)中所述的外部库函数包括从文件中读取数据的库函数和从网络中接收数据的库函数,所述的用户输入的参数值是指程序的命令行参数。
5.如权利要求2所述的空间内存错误检测方法,其特征在于,步骤1-2)中所述的数据流分析是程序间的数据流分析,步骤1-3)中所述的指针别名分析是指程序间的指针别名分析。
6.如权利要求1所述的空间内存错误检测方法,其特征在于,步骤2)中所述的内存影子空间是通过分析中间代码找到main函数,在main函数的第一条指令之前,插入调用mmap()库函数的指令,在虚拟内存中创建的一块内存区域,操作系统会为该内存区域按需分配实际的物理内存。
7.如权利要求1所述的空间内存错误检测方法,其特征在于,步骤3)中所述的指针的base和bound边界信息,是指指针指向的内存对象的地址边界,包括base地址和bound地址,所述base地址表示访问一个内存对象所允许使用的最低地址,所述bound地址表示访问一个内存对象所允许使用的最高地址。
8.如权利要求1所述的空间内存错误检测方法,其特征在于,步骤5)中所述的进行指针边界检测,是将指针和指针访问的内存大小与指针的base和bound边界信息进行比较,如果用ptr表示该指针,size表示指针访问的内存大小,如果ptr<base或者ptr+size>bound,那么就说明该指针访问内存时出现错误。
9.如权利要求1所述的空间内存错误检测方法,其特征在于,步骤5)中当检测到空间内存错误时,通过开启程序的可用性功能,在程序中插入代码,忽略会导致内存错误的指令,继续执行下一条指令,提高程序的可用性;通过关闭程序的可用性功能,在程序中插入代码,终止程序的执行。
10.如权利要求1所述的空间内存错误检测方法,其特征在于,步骤5)中所述的输出指针越界的相关信息,是指在检测到指针访问内存出现错误时,向用户输出指针值,指针指向的内存对象的边界信息。
CN201410005315.5A 2014-01-06 2014-01-06 一种高效且高可用的空间内存错误检测方法 Expired - Fee Related CN103745755B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410005315.5A CN103745755B (zh) 2014-01-06 2014-01-06 一种高效且高可用的空间内存错误检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410005315.5A CN103745755B (zh) 2014-01-06 2014-01-06 一种高效且高可用的空间内存错误检测方法

Publications (2)

Publication Number Publication Date
CN103745755A true CN103745755A (zh) 2014-04-23
CN103745755B CN103745755B (zh) 2017-01-11

Family

ID=50502768

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410005315.5A Expired - Fee Related CN103745755B (zh) 2014-01-06 2014-01-06 一种高效且高可用的空间内存错误检测方法

Country Status (1)

Country Link
CN (1) CN103745755B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104133733A (zh) * 2014-07-29 2014-11-05 北京航空航天大学 一种内存错误检测方法
WO2016123908A1 (zh) * 2015-02-06 2016-08-11 中兴通讯股份有限公司 一种内存越界的检测方法及装置
CN107239410A (zh) * 2017-05-31 2017-10-10 上海交通大学 基于动态插桩的大块内存分配系统及方法
CN108351935A (zh) * 2015-11-12 2018-07-31 Arm有限公司 用于控制有界指针的使用的设备及方法
CN110162967A (zh) * 2019-05-15 2019-08-23 武汉大学 一种基于mpx的内存时间错误防护方法
CN111062031A (zh) * 2019-10-31 2020-04-24 国家电网有限公司 基于数据流分析的缓冲区溢出分析方法及装置
CN112860574A (zh) * 2021-03-15 2021-05-28 北京车和家信息技术有限公司 Linux内核的内存泄漏检测方法和装置、介质、设备
US11275840B2 (en) 2019-07-29 2022-03-15 Sap Se Management of taint information attached to strings
WO2024113786A1 (zh) * 2022-11-30 2024-06-06 华为技术有限公司 一种提升内存安全的方法、装置及计算设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6185673B1 (en) * 1998-06-30 2001-02-06 Sun Microsystems, Inc. Apparatus and method for array bounds checking with a shadow register file
CN1905076A (zh) * 2006-06-30 2007-01-31 浙江大学 嵌入式系统动态存储错误静态检测的实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6185673B1 (en) * 1998-06-30 2001-02-06 Sun Microsystems, Inc. Apparatus and method for array bounds checking with a shadow register file
CN1905076A (zh) * 2006-06-30 2007-01-31 浙江大学 嵌入式系统动态存储错误静态检测的实现方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104133733A (zh) * 2014-07-29 2014-11-05 北京航空航天大学 一种内存错误检测方法
WO2016123908A1 (zh) * 2015-02-06 2016-08-11 中兴通讯股份有限公司 一种内存越界的检测方法及装置
CN108351935B (zh) * 2015-11-12 2023-07-14 Arm有限公司 用于控制有界指针的使用的设备及方法
CN108351935A (zh) * 2015-11-12 2018-07-31 Arm有限公司 用于控制有界指针的使用的设备及方法
CN107239410B (zh) * 2017-05-31 2020-06-09 上海交通大学 基于动态插桩的大块内存分配系统及方法
CN107239410A (zh) * 2017-05-31 2017-10-10 上海交通大学 基于动态插桩的大块内存分配系统及方法
CN110162967A (zh) * 2019-05-15 2019-08-23 武汉大学 一种基于mpx的内存时间错误防护方法
CN110162967B (zh) * 2019-05-15 2023-02-24 武汉大学 一种基于mpx的内存时间错误防护方法
US11275840B2 (en) 2019-07-29 2022-03-15 Sap Se Management of taint information attached to strings
CN111062031A (zh) * 2019-10-31 2020-04-24 国家电网有限公司 基于数据流分析的缓冲区溢出分析方法及装置
CN112860574A (zh) * 2021-03-15 2021-05-28 北京车和家信息技术有限公司 Linux内核的内存泄漏检测方法和装置、介质、设备
CN112860574B (zh) * 2021-03-15 2024-02-20 北京车和家信息技术有限公司 Linux内核的内存泄漏检测方法和装置、介质、设备
WO2024113786A1 (zh) * 2022-11-30 2024-06-06 华为技术有限公司 一种提升内存安全的方法、装置及计算设备

Also Published As

Publication number Publication date
CN103745755B (zh) 2017-01-11

Similar Documents

Publication Publication Date Title
CN103745755A (zh) 一种高效且高可用的空间内存错误检测方法
Zhang et al. Precise and accurate patch presence test for binaries
US20230057419A1 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
CN109918903B (zh) 一种基于llvm编译器的程序非控制数据攻击防护方法
CN106940654B (zh) 源代码中内存错误的自动检测和定位方法
Lattner Macroscopic data structure analysis and optimization
US20030093780A1 (en) Annotations to executable images for improved dynamic optimization of functions
CN104408366B (zh) 基于插装技术的安卓应用程序权限使用行为跟踪方法
US8677322B2 (en) Debugging in a multiple address space environment
US20080052693A1 (en) Method of simd-ization through data reshaping, padding, and alignment
Hawkins et al. Optimizing binary translation of dynamically generated code
CN104636256A (zh) 一种内存访问异常的检测方法及装置
US9626170B2 (en) Method and computer program product for disassembling a mixed machine code
US8881123B2 (en) Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols
Hück et al. Compiler-aided type tracking for correctness checking of MPI applications
Polishchuk et al. Dynamic heap type inference for program understanding and debugging
JP2013105256A (ja) 情報処理装置、プロファイル対象決定プログラム及び方法
Brauße et al. ESBMC-CHERI: towards verification of C programs for CHERI platforms with ESBMC
WO2014162250A2 (en) Method for enabling independent compilation of program and a system therefor
CN103942082A (zh) 一种消除冗余的内存访问操作的编译优化方法
CN117785540A (zh) 内存错误检测方法、装置、设备及介质
US9189297B2 (en) Managing shared memory
CN108664238A (zh) 一种解释型脚本语言c-sub的执行方法及装置
CN114282227B (zh) 一种Fabric区块链系统智能合约的安全分析检测方法
CN107368742B (zh) 基于gcc的细粒度虚函数表劫持攻击防御方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170111

Termination date: 20210106

CF01 Termination of patent right due to non-payment of annual fee