【技术实现步骤摘要】
【国外来华专利技术】利用所应用的存储器区域生命期的比特精确跟踪分析
技术介绍
常见的编程错误类别包括导致线程执行超出所分配存储器的存储器读取和/或写入操作(即,越界存储器访问)的错误。例如,一类编程错误是由存储器分配函数保留的存储器使用不当引起的。很多编程语言和/或库提供使得进程能够请求指定大小的存储器块的分配(例如,从可用存储器池,诸如堆)的一个或多个存储器分配函数调用(例如,C标准库中的malloc())、以及用于稍后重新分配该存储器的一个或多个存储器重新分配函数调用(例如,C标准库中的free())。通常,存储器分配函数从存储器池中定位和保留指定大小的连续的可用存储器块,并且在该块的开始返回指向存储器地址的指针。然后,线程可以基于距该指针的整数偏移来访问该保留的存储器块中的存储器位置。但是,很多编程语言可能很少或根本没有提供保护以防止线程实际访问保留块之外的存储器地址。如果线程向其保留块之外的存储器写入,则存在可能会不适当地覆盖有效的存储器值(例如,作为不同数据结构的部分和/或由另一线程使用的值)的风险。如果线程从其保留块之外的存储器中读取数据,则存在以下风险:可能读取意外数据(例如,来自不同数据结构和/或由另一线程写入的数据),读取未定义数据(例如,尚未被写入的存储器位置),或通过尝试访问不可访问存储器而导致访问冲突。另一类常见的编程错误涉及导致线程在其有效性状态已经转变之后从存储器位置不适当地访问存储器的错误。例如,在很多计算机架构中,每个执行线程与称为“堆栈”的存储器区域相关联,该存储器区域在线程执行时存储临时本地信息。通常,每次函数被调用时,新 ...
【技术保护点】
1.一种计算机系统,包括:/n一个或多个处理器;以及/n一个或多个计算机可读介质,其上存储有计算机可执行指令,所述计算机可执行指令由所述一个或多个处理器可执行以基于应用的执行的可重放跟踪来检测在所述应用的先前执行期间的非故障存储器访问,所述计算机可执行指令可执行以引起所述计算机系统至少执行以下各项:/n从应用的执行的可重放跟踪重放所述应用的先前执行的一个或多个部分,同时跟踪由所述应用使用的存储器区域的生命期;/n基于跟踪所述存储器区域的生命期,检测在所述应用的先前执行期间由所述应用进行的一个或多个非故障存储器访问,包括以下一项或多项:/n由所述应用进行的、超出请求大小的所分配存储器的存储器访问;/n在至少以下各项的有序序列之后,由所述应用从第一堆栈位置的第一读取:(i)在所述第一堆栈位置有效的同时对所述第一堆栈位置的写入,(ii)使所述第一堆栈位置无效,以及(iii)使所述第一堆栈位置有效,并且其中在使所述第一堆栈位置有效与所述第一读取之间,所述第一堆栈位置未被写入;/n在至少以下各项的有序序列之后,由所述应用从第二堆栈位置的第二读取:(i)使所述第二堆栈位置有效,(ii)使所述第二堆 ...
【技术特征摘要】
【国外来华专利技术】20180109 US 15/865,6991.一种计算机系统,包括:
一个或多个处理器;以及
一个或多个计算机可读介质,其上存储有计算机可执行指令,所述计算机可执行指令由所述一个或多个处理器可执行以基于应用的执行的可重放跟踪来检测在所述应用的先前执行期间的非故障存储器访问,所述计算机可执行指令可执行以引起所述计算机系统至少执行以下各项:
从应用的执行的可重放跟踪重放所述应用的先前执行的一个或多个部分,同时跟踪由所述应用使用的存储器区域的生命期;
基于跟踪所述存储器区域的生命期,检测在所述应用的先前执行期间由所述应用进行的一个或多个非故障存储器访问,包括以下一项或多项:
由所述应用进行的、超出请求大小的所分配存储器的存储器访问;
在至少以下各项的有序序列之后,由所述应用从第一堆栈位置的第一读取:(i)在所述第一堆栈位置有效的同时对所述第一堆栈位置的写入,(ii)使所述第一堆栈位置无效,以及(iii)使所述第一堆栈位置有效,并且其中在使所述第一堆栈位置有效与所述第一读取之间,所述第一堆栈位置未被写入;
在至少以下各项的有序序列之后,由所述应用从第二堆栈位置的第二读取:(i)使所述第二堆栈位置有效,(ii)使所述第二堆栈位置无效,以及(iii)在所述第二堆栈位置无效的同时对所述第二堆栈位置写入,并且其中在当所述第二堆栈位置无效的同时对所述第二堆栈位置写入与所述第二读取之间,在所述第二堆栈位置为有效堆栈位置的同时所述第二堆栈位置未被写入;或者
在至少以下各项的有序序列之后,由所述应用对第三堆栈位置的第一写入:(i)使所述第三堆栈位置有效,以及(ii)使所述第三堆栈位置无效,并且其中所述第三堆栈位置在所述第一写入时无效;以及
提供所述一个或多个非故障存储器访问的通知。
2.根据权利要求1所述的计算机系统,其中所述非故障存储器访问包括由所述应用进行的所述第一读取、由所述应用进行的所述第一读取或由所述应用进行的所述第一写入中的至少一项,并且其中使所述第一堆栈位置无效、使所述第二堆栈位置无效以及所述使所述第三堆栈位置无效中的每一项包括第一堆栈框架从所述应用的堆栈的移除,并且其中使所述第一堆栈位置有效、使所述第二堆栈位置有效以及使所述第三堆栈位置有效中的每一项包括第二堆栈框架向所述应用的堆栈的添加。
3.根据权利要求1所述的计算机系统,其中所述非故障存储器访问包括由所述应用进行的所述第一读取。
4.根据权利要求1所述的计算机系统,其中所述非故障存储器访问包括由所述应用进行的所述第二读取,在使所述第二堆栈位置有效与使所述第二堆栈位置无效之间,所述第二堆栈位置已经被写入。
5.根据权利要求1所述的计算机系统,其中所述非故障存储器访问包括由所述应用进行的所述第一读取、由所述应用进行的所述第二读取或由所述应用进行的所述第一写入中的至少一项,并且其中所述第一堆栈位置、所述第二堆栈位置和所述第三堆栈位置包括函数局部变量。
6.根据权利要求1所述的计算机系统,其中所述非故障存储器访问包括由所述应用进行的、超出请求大小的所分配存储器的存储器访问,并且其中所述非故障存储器访问包括对被分配为存储器对准填充的存储器位置的读取或写入。
7.根据权利要求1所述的计算机系统,其中所述非故障存储器访问包括由所述应用...
【专利技术属性】
技术研发人员:H·加布里杰尔斯基,J·莫拉,
申请(专利权)人:微软技术许可有限责任公司,
类型:发明
国别省市:美国;US
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。