买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】在存储位置之间转移控制的系统和方法_卡巴斯基实验室股份制公司_201610866237.7 

申请/专利权人:卡巴斯基实验室股份制公司

申请日:2016-09-29

公开(公告)日:2021-01-12

公开(公告)号:CN107463513B

主分类号:G06F12/109(20160101)

分类号:G06F12/109(20160101)

优先权:["20160602 RU 2016121876","20160811 US 15/234,431"]

专利状态码:有效-授权

法律状态:2021.01.12#授权;2018.01.05#实质审查的生效;2017.12.12#公开

摘要:本发明涉及在存储位置之间转移控制的系统和方法。公开了用于控制程序执行的系统和方法。示例性方法包括:在虚拟存储地址空间中确定存储扇区,存储扇区用于存储计算机程序的执行指令的至少一部分;在虚拟存储地址空间中确定包含与存储扇区相关联的代码指令和数据的一个或多个页面;创建所述虚拟存储地址空间的副本,所述副本包括所述存储扇区和所述一个或多个页面;标记在所述虚拟存储地址空间及其副本中的所述存储扇区和所述一个或多个页面;在执行存储在所述虚拟存储地址空间或其副本中的指令的同时,接收在不同的存储扇区之间转移所述计算机程序的执行的通知;以及将所述计算机程序的执行转移到接收所述通知的存储位置以外的存储位置。

主权项:1.一种用于控制计算机程序的执行的计算机实现的方法,所述方法包括:通过处理器在虚拟存储地址空间中确定存储扇区,所述存储扇区用于存储所述计算机程序的执行指令的至少一部分;在所述虚拟存储地址空间中确定包含在所述存储扇区中存储的代码指令和数据的一个或多个页面;创建所述虚拟存储地址空间的副本,所述副本包括所述存储扇区和所述一个或多个页面;识别所述一个或多个页面中的包含在所述存储扇区以外的扇区中存储的代码指令和数据的一个或多个存储扇区;将所述一个或多个页面中的每一者识别为如下中的一者:第一类型的页面,所述第一类型的页面包含仅所述存储扇区或仅所述一个或多个存储扇区的代码指令和数据;或者第二类型的页面,所述第二类型的页面包含所述存储扇区和所述一个或多个存储扇区的代码指令和数据;标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中的所述存储扇区和所述一个或多个页面,其中,所述标记包括不同地标记在所述虚拟存储地址空间中的包含仅所述存储扇区的代码指令和数据的页面和包含所述一个或多个存储扇区的代码指令和数据的页面,并且不同地标记在所述虚拟存储地址空间的所述副本中的包含仅所述存储扇区的代码指令和数据的页面和包含所述一个或多个存储扇区的代码指令和数据的页面;在执行存储在所述虚拟存储地址空间或所述虚拟存储地址空间的所述副本中的指令的同时,接收在由不同的标签标记的不同的存储扇区之间转移所述计算机程序的执行的通知;以及将所述计算机程序的执行转移到接收所述通知的第一存储位置以外的第二存储位置,其中,所述执行从第一标签所标记的所述第一存储位置的扇区转移到第二标签所标记的所述第二存储位置的扇区。

全文数据:在存储位置之间转移控制的系统和方法[0001]相关申请的交叉引用[0002]本申请要求在2016年6月2日递交的俄罗斯申请No.2016121876的优先权的权益,该俄罗斯申请的全部内容通过引用并入在本文中。技术领域[0003]本发明总体涉及计算领域,且更具体地涉及在存储位置之间转移控制的系统和方法。背景技术[0004]当前用于在程序执行期间生成API函数调用日志的技术要求介入进程或文件在硬驱动盘上的地址空间的内容中,诸如改变存储器中和磁盘上的操作系统的系统库中的代码。这类改变包括负责API函数调用的记录机制的“代码的引入”。该机制的主要步骤可以如下:[0005]•库管理的拦截例如,通过改变目标函数的代码来拦截API函数);[0006]•在API调用期间过渡到存储器的包含负责处理API函数和记录调用的处理程序代码的区域;[0007]•执行记录系统的处理程序的代码;[0008]•返回对库的控制。[0009]为了捕获对记录系统的控制,还可以使用用于在“中间”库的可执行文件和或布置的引入表中改变来自库的API函数调用的地址的方法,在过渡到来自原始库的原始调用的API函数之前,初始调用指向该“中间”库。[0010]现有的记录系统的一个缺点是,难以在不同操作系统及其版本上实现该记录系统。例如,0S的更新可导致记录系统停止工作且可能需要修改以与更新的0S—起工作。另一缺点是,记录系统的存在可以被恶意程序检测到,不管这些恶意程序的特权,因为几乎任何“侵入”到进程的地址空间中都可以被恶意程序检测到。[0011]因此,需要改善用于记录API函数调用的机制。发明内容[0012]公开了用于通过管理程序执行在不同虚拟存储位置之间的转移来控制程序执行的系统、方法和计算机程序产品的示例性方面。所公开的方面的一个应用为生成API函数的调用日志,该API函数在程序执行期间被调用。所公开的方面的一个技术结果包括:通过指令的执行从一个虚拟存储位置到另一个虚拟存储位置的交替转移和返回,跟踪处理器对嵌入在系统存储器中的程序代码的执行。[0013]一种用于控制计算机程序的执行的示例性计算机实现的方法包括:通过处理器在虚拟存储地址空间中确定存储扇区,所述存储扇区用于存储所述计算机程序的执行指令的至少一部分;在所述虚拟存储地址空间中确定包含与所述存储扇区相关联的代码指令和数据的一个或多个页面;创建所述虚拟存储地址空间的副本,所述副本包括所述存储扇区和所述一个或多个页面;标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中的所述存储扇区和所述一个或多个页面;在执行存储在所述虚拟存储地址空间或所述虚拟存储地址空间的所述副本中的指令的同时,接收在不同的存储扇区之间转移所述计算机程序的执行的通知;以及将所述计算机程序的执行转移到接收所述通知的存储位置以外的存储位置。[0014]在一个示例性方面中,该方法还包括获得存储有所述计算机程序的所述执行指令的所述虚拟存储地址空间。[0015]在一个示例性方面中,该方法还包括识别所述一个或多个页面中的包含与所述存储扇区不相关联的代码指令和数据的一个或多个存储扇区。[0016]在一个示例性方面中,该方法还包括将所述一个或多个页面中的每一者识别为如下中的一者:第一类型的页面,所述第一类型的页面包含仅用于所述存储扇区或仅用于所述一个或多个存储扇区的代码指令和数据;或者第二类型的页面,所述第二类型的页面包含用于所述存储扇区和所述一个或多个存储扇区的代码指令和数据。[0017]在一个示例性方面中,标记包括类似地或不同地标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中彼此对应的所述第一类型的页面和所述第二类型的页面。[0018]在一个示例性方面中,该方法还包括在检测到控制在与不同类型的页面相关联的两个扇区之间转移、或转移到所述第二类型的页面中的一个页面的扇区的标记的代码指令或数据时,在所述虚拟存储地址空间中创建所述通知。[0019]在一个示例性方面中,该方法还包括在检测到控制在具有不同的标签但均与所述第一类型的页面相关联的两个扇区之间转移、或从与所述第二类型的页面中的一个页面相关联的扇区转移到具有不同的标签但与所述第一类型的页面中的一个页面相关联的扇区时,在所述虚拟存储地址空间的所述副本中创建所述通知。[0020]在一个方面中,一种用于控制计算机程序的执行的示例性系统包括:联接到存储器的硬件处理器,所述处理器配置成:在虚拟存储地址空间中确定存储扇区,所述存储扇区用于存储所述计算机程序的执行指令的至少一部分;在所述虚拟存储地址空间中确定包含与所述存储扇区相关联的代码指令和数据的一个或多个页面;创建所述虚拟存储地址空间的副本,所述副本包括所述存储扇区和所述一个或多个页面;标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中的所述存储扇区和所述一个或多个页面;在执行存储在所述虚拟存储地址空间或所述虚拟存储地址空间的所述副本中的指令的同时,接收在不同的存储扇区之间转移所述计算机程序的执行的通知;以及将所述计算机程序的执行转移到接收所述通知的存储位置以外的存储位置。[0021]以上对示例性方面的简要概述用于提供对本发明的基本理解。该概述不是对所有预期方面的广泛综述,并且既不旨在标识所有方面的关键要素或主要要素,也不旨在勾画本发明的任何方面或所有方面的范围。该概述的唯一目的是以简化的形式呈现一个或多个方面,作为随后的对本发明的更详细的描述的前奏。为了实现前述目的,本发明的一个或多个方面包括在权利要求中所描述的且特别指出的特征。附图说明[0022]并入本说明书中并构成本说明书的一部分的附图示出了本发明的一个或多个示例性方面,以及连同详细的描述一起用来阐述这些示例性方面的原理和实现方式。[0023]图1示出根据一个方面的可用于实现所公开的用于控制程序执行的系统和方法的计算机系统的示例;[0024]图2示出根据一个方面的虚拟存储器系统的图;[0025]图3示出根据一个方面的存储器复制的图;[0026]图4示出根据一个方面的虚拟存储器复制的图;[0027]图5示出根据一个方面的用于将程序指令执行的控制从一个虚拟存储位置转移到另一个虚拟存储位置的示例性方法;[0028]图6a、图6b和图6c示出根据一个方面的用于虚拟存储器复制的示例性系统的图;[0029]图7示出根据一个方面的用于记录程序执行的虚拟存储器复制的示例性方法;[0030]图8示出根据一个方面的记录程序执行的示例性方法;[0031]图9a、图9b和图9c示出根据一个方面的准备记录系统的地址空间的图;以及[0032]图10示出根据一个方面的用于将指令执行的控制从一个地址空间转移到另一个地址空间的示例性方法。具体实施方式[0033]本文中在用于通过管理程序执行在不同虚拟存储位置之间的转移来控制程序执行的系统、方法和计算机程序产品的上下文中描述了示例性方面。本领域的普通技术人员将认识到,以下描述仅仅是说明性的,而不旨在以任何方式进行限制。其它方面将容易地将其自身暗示给了解本发明的优点的本领域的技术人员。现在将详细地参考如附图中所示的示例性方面的实现方式。贯穿附图和以下描述将尽可能地使用相同的附图标记来指代相同或类似的项目。[0034]图1示出可用于实现用于控制程序执行的系统和方法的计算机系统(其可以是个人计算机或服务器20的示例。计算机系统20包括中央处理单元21、系统存储器22和连接各种系统部件的系统总线23,各种系统部件包括与中央处理单元21相关联的存储器。系统总线23像从现有技术已知的任何总线结构一样来实现,该任何总线结构接着包括总线存储器或总线存储器控制器、外围总线和本地总线,系统总线23能够与任何其它的总线架构交互。系统存储器包括永久性存储器ROM24和随机存取存储器Random-AccessMemory,RAM25。基本输入输出系统G3asicInputOutputSystem,BI0S26包括确保在计算机20的元件之间的信息传输的基本程序,例如在使用ROM24加载操作系统时的那些基本程序。[0035]计算机20依次包括用于数据的读取和写入的硬盘27、用于在可移动磁盘29上读取和写入的磁盘驱动器28以及用于在可移动光盘31例如CD-R0M、DVD-R0M和其它的光学信息媒介上读取和写入的光盘驱动器30。硬盘27、磁盘驱动器28和光盘驱动器30分别通过硬盘接口32、磁盘接口33和光盘驱动器接口34而连接到系统总线23。驱动器和对应的计算机信息媒介为用于存储计算机20的计算机指令、数据结构、程序模块和其它数据的电源独立的模块。[0036]计算机2〇可以包括一个或多个硬盘驱动27、可移动磁盘29和可移动光盘31,但是应当理解的是,可以采用能够以计算机可读的形式存储数据的其它类型的计算机信息媒介56固态驱动器、闪存卡、数字盘、随机存取存储器_等等),计算机信息媒介56经由控制器55连接到系统总线23。[0037]计算机20具有存储所记录的操作系统35的文件系统36,并且还具有额外的程序应用37、其它程序模块38和程序数据39。用户能够通过使用输入设备键盘40、鼠标42将命令和信息输入到计算机20中。可以使用其它的输入设备未示出):麦克风、操纵杆、游戏控制器、扫描器等等。这些输入设备通常通过串行端口你插入到计算机系统20中,串行端口46转而连接到系统总线,但是这些输入设备可以以其它的方式连接,例如在并行端口、游戏端口或通用串行总线UniversalSerialBus,USB的帮助下得以连接。监控器47或其它类型的显示设备也通过接口(例如视频适配器48连接到系统总线23。除了监控器47,个人计算机还可以装备有其它的外围输出设备未示出),例如扬声器、打印机等等。[0038]计算机20能够使用与一个或多个远程计算机49的网络连接而工作在网络环境中。一个或多个远程计算机49也可以是个人计算机或服务器,其具有在描述计算机20的性质时使用的上述元件中的大多数元件或全部元件。其它的设备也可以存在于计算机网络中,例如路由器、网站、对等设备或其它的网络节点。[0039]网络连接可以形成局域计算机网络Local-AreacomputerNetwork,LAN50和广域计算机网络Wide-AreacomputerNetwork,WAN。这些网络用在企业计算机网络和公司内部网络中,并且这些网络通常有权访问因特网。在LAN或WAN网络中,计算机20通过网络适配器或网络接口51连接到局域网50。当使用网络时,计算机20可以采用调制解调器54或其它的用于提供与广域计算机网络例如因特网)的通信的模块。调制解调器54是内部设备或外部设备,通过串行端口46连接到系统总线23。应当注意的是,网络连接仅仅是示例并且不需要描述网络的准确配置,即实际上具有通过技术通信模块建立一个计算机到另一个计算机的连接的其它方式。[0040]在一个示例性方面中,随机存取存储器25为系统存储器22的一部分,在本发明的上下文中,该系统存储器22也将被称为物理存储器;整个物理存储器被划分为物理页面100,该物理页面100的示例在图2中示出。用于寻址物理存储器的地址集合形成物理地址空间。由于物理存储器的规格受限,因此已经为程序执行创建了虚拟存储器,且用于寻址虚拟存储器的地址集合形成虚拟地址空间。如本文中所使用,术语虚拟存储器包括逻辑页面以及这些页面描述的结构(例如,页面目录指针、页面目录、页面表全体。下文将描述这些结构。如本文中所使用,术语虚拟地址空间和虚拟存储器是相同的且可互换使用。[0041]虚拟地址空间可以被划分为逻辑页面100a。逻辑页面具有其自身的虚拟地址,且可以被映射到任何物理地址上,如图2所示。因此,逻辑页面对应于物理页面,或换言之,逻辑页面被映射到物理页面上。在一个示例性方面中,逻辑页面按任意次序被映射到物理页面上,如图2所示。在另一个示例性方面中,逻辑页面同一地被映射到物理页面上。几个逻辑页面可以被映射到单个物理页面上。[0042]逻辑页面100a为虚拟对象(S卩,不真实存在,不像物理页面100,且在特定实例中,每个这类页面具有两个地址:[0043]•线性地址-逻辑页面通过该线性地址而置于地址空间中;[0044]•物理地址-逻辑页面在物理存储器25中被映射到该物理地址上在一些情况下,这可能不存在)。[0045]虚拟存储器为在本地计算机上且在特定实例中,在本地计算机和远程计算机上)利用系统存储器22的技术。由于存储器的页面组织,因此可以利用处理器层的控制实现虚拟存储器的机制。例如,存储器的逻辑页面可以被交换到硬盘24上;利用其已经来自物理存储器25的内容,实际可用的虚拟存储器的规格大幅增大且现在受可用的硬盘的规格限制;无需使硬盘页面被交换到该硬盘上位于本地计算机上。[0046]图2示出在通常的32位页面寻址分页)的情况下的虚拟存储系统。为了描述页面,可以使用由物理地址(页面被映射到该物理地址上和限定该页面的性质的标志(属性组成的数据结构。关于页面的起点的32位地址的信息位于主要的20位中;这些也被存储在页面描述中。页面描述被分组为页面表。页面描述符为4字节的条目。页面表被分组为页面目录102。页面目录102为4kb规格的文件,其包括4字节的条目或PDE页面目录条目)。每个条目指向页面表101且几乎与PTE在格式上相符。PDE确定页面表的指向存储器的物理页面的地址的位置、以及页面表的属性。为了使处理器能够使用页面转换,需要使页面目录起点103页面目录基础-PDB的地址被指示。该地址被保留在CR3寄存器中。[0047]因此,针对在32位地址空间中寻址,为了指示页面表中的页码,需要10位值(由于该表存储1024个页面描述)。为了精确地指示页面目录中的哪个表将被使用,需要再一个10位值。为了指示页面内的偏移,需要12位值。如果这些值的维度被添加,则证明需要指定用于访问存储器的32位数据结构:10位用于表号,另10位用于表中的页码,以及12位用于页面自身内的偏移。[0048]在使用PAE物理地址扩展技术的情况下,附加的层次级被添加,即页面目录表104,其包含PDPTE页面目录指针表条目)。在该情况下,CR3寄存器将包含对齐的页面目录表104的物理地址105。[0049]在使用IA_32e技术的情况下,附加的层次级被添加到页面表、页面目录和目录表:页面寻址级的表107,其包含PML4E页面映射级条目)。在该情况下,CR3寄存器106将包含指示对齐的页面寻址级的表107的物理地址108的结构。[0050]当启动程序时,操作系统创建进程,在该进程中将执行其流程。程序文件被加载到计算机的物理存储器的特定位置中。在使用虚拟存储器的情况下,文件被加载到虚拟存储器的特定位置中,该系统将物理地址的特定池映射到该特定位置上。然后开始执行该程序,艮P,处理器执行序列中的机器指令,其中这些机器指令被写在程序文件中。由操作系统创建的进程基本上为运行程序代码所需的资源的容器。在多任务操作系统中,每个进程对应于其自身的虚拟地址空间。遵从寻址虚拟地址空间的机制的描述的是,为了得以访问进程的虚拟地址空间,需要访问控制寄存器CR3106。通过控制结构及其元素基于在控制寄存器CR3106中包含的信息访问该结构及其元素),控制进程的虚拟地址空间。在一个特定方面中,利用32位寻址,每个进程具有其自身的页面目录,因此,当在进程之间切换时,重写CR3寄存器106,该CR3寄存器106存储对齐的页面目录的物理地址。该程序丝毫不需要确定所有的页面、表、和目录元素;该程序足以确定实际上仅将被利用的那些页面、表、和目录元素,以及动态地在操作进程中添加或去除新的描述。[0051]图3示出系统存储器22的一部分,其中用于执行的指令已经被写入特定位置301中。在一个示例中,存储位置可以为物理存储器中的位置。在另一个示例中,存储位置可以为系统存储器中的位置逻辑页面被映射到该位置上),即虚拟存储位置。为了在原始存储位置301中的控制下运行程序,确定感兴趣的扇区。存储位置的感兴趣的扇区可以为存储位置的任何给定扇区,对此需要在转移程序指令的控制时创建通知。在一个示例性方面中,感兴趣的扇区为特定存储位置中的特定扇区,该特定扇区基于确定该扇区的内容、其布置及其目的的特定特征而与其它扇区分离。例如,感兴趣的扇区可以为存储位置的包含程序指令的扇区,对于这些程序指令,当转移其控制时,需要核对寄存器的状态以便估计程序指令的执行顺序。感兴趣的扇区还可以使一组指令联合,该组指令设计成执行特定活动访问硬盘、通过网络转移信息等等)。[0052]此后,可以复制原始存储位置的扇区,其中至少复制感兴趣的扇区303。可以采用各种方式来完成存储器的复制。在一个示例性方面中,存在将扇区的指令和数据直接拷贝到另一存储位置301a中(图3。因此,具有相同内容的扇区出现在物理存储器中。在另一个示例性方面中,不存在拷贝数据,但是创建新的目录102和页面表101,其指向物理存储器的那些相同的位置图4。[0053]此后,可以标记原始存储位置301中的存储扇区。在一个示例性方面中,用于感兴趣的扇区303的标签可以不同于原始位置的其它扇区304的标签。在一个示例性方面中,存储扇区的指令字节的修改可以被用作标签。在另一个示例性方面中,决不改变指令本身和数据,但是改变结构中描述这些扇区的属性。例如,感兴趣的扇区的页面被分配不可执行的属性,而其它扇区的页面被分配可执行的属性。还可以使用读写和其它属性。[0054]接下来,可以标记复制的存储位置301a中的扇区。在一个示例性方面中,用于感兴趣的扇区的标签可以不同于复制的存储位置301a的其它扇区的标签。例如,与用于原始扇区303相同的标签可以用于复制的扇区303a。在另一示例中,可以使用不同的标签。例如,在原始存储位置中,感兴趣的扇区303的页面可以被提供“不可执行”的属性,而原始位置的其它扇区304的页面可以被提供“可执行”的属性;具有“不可执行”的属性的扇区保留该属性。对于复制的区域301a,可以使属性反转:感兴趣的扇区的页面可以被提供“可执行”的属性,而其它扇区的页面可以被提供“不可执行”的属性。[0055]接下来,存储位置被选择用于通过处理器在感兴趣的存储扇区和复制的存储扇区之间的执行。然后处理器执行包含在所选存储位置中的程序指令。[0056]在一个示例性方面中,在所选存储位置中的指令被处理器执行,直到接收到将程序执行转移到另一存储扇区的通知为止。在将指令控制从标有一个标签的扇区转移到由不同标签标记的位置的扇区时,可以创建该通知。这类通知可以为中断或异常。中断和异常为指示在系统硬件)中或在正被执行的当前程序或例程内的某处已经出现了要求处理器及时关注的情况的事件。中断和异常通常导致迫使控制从正被执行的当前程序或例程转移到特殊的程序进程或例程,其被称为中断处理程序或异常处理程序。响应于中断或异常的行动为处理该中断或异常。当处理器确定在执行指令的过程中存在错误时,可出现异常。[0057]在一个示例性方面中,接收通知可以导致程序指令的执行转移到与接收通知的存储位置不同的存储位置。例如,如果在原始存储位置301中执行程序,则该执行将被转移到复制的存储位置301a,以及如果在复制的存储位置301a中执行程序,则该执行将被转移到原始存储位置301或另一复制的扇区。可以采用各种方式来完成执行转移,这取决于用于实现原始存储位置的扇区的复制的方式。在一个示例性方面中,改变执行的下一个指令的地址。在另一个示例性方面中,所有地址保持不变,仅改变控制寄存器CR3106的值,如图4所7J\〇[0058]图5示出将指令执行的控制从一个虚拟存储位置转移到另一个虚拟存储位置的示例性方法。在步骤500中,在原始虚拟存储位置中确定包括至少一个逻辑页面的感兴趣的存储扇区。在步骤501中,创建至少一个附加的虚拟存储位置,在一个示例中,该至少一个附加的虚拟存储位置被映射到与原始虚拟存储位置相同的物理页面上。为此,创建页面目录和至少一个页面表。为了创建虚拟存储位置,在一个特定实例中,拷贝原始存储位置的PTE和PDE。[0059]接下来,在步骤502中,标记原始虚拟存储位置中的扇区,用于感兴趣的扇区的标签不同于原始位置的其它扇区的标签;在一个特定实例中,对此使用PTE结构中的位NX:在一个特定实例中,可以针对感兴趣的扇区的页面设置位,且针对其它扇区的页面清空该位;在另一个特定实例中,针对感兴趣的扇区的页面清空位,且针对其它扇区的页面设置该位。在原始位置中设置标签之后,在步骤503中,标记至少一个复制的存储位置中的扇区,用于感兴趣的扇区的标签不同于复制的存储位置的其它扇区的标签。在一个示例性方面中,在该步骤中使用与用于原始扇区相同的设置NX位的机制。在一个示例性方面中,可以采用反转,即,如果在原始存储位置中针对感兴趣的扇区的页面清空NX位,则在原始位置的副本中将针对感兴趣的扇区的页面设置该位。在另一个示例性方面中,PDE和PTE结构的其它位用于扇区的页面的标签,诸如RW位。在又一个示例性方面中,组合多个位,例如,NX位用于原始虚拟位置且RW位用于虚拟位置的副本。[0060]在步骤504中,存储位置被选择用于执行其中包含的程序指令。根据存储位置之间的切换所用于的目标例如,日志记录、调试、抵制漏洞的利用等等),可以选择原始存储位置或复制的存储位置之一。[0061]在步骤505中,通过处理器在所选存储位置中执行指令,直到接收到通知为止。在指令控制从由一个标签标记的扇区转移到该位置的由不同标签标记的扇区时,可以生成该通知。在一个示例性方面中,当使用NX位作为标签时,这类通知将为页面故障异常#PF-页面故障异常)。在控制从存储位置的针对其页面清空NX位的扇区的指令转移到存储位置的针对其页面设置NX位的扇区的指令时,创建该通知。[0062]在最终步骤506中,将指令执行转移到与指令执行在其中创建通知的存储位置不同的存储位置。在一个示例性方面中,控制的转移可以通过重写CR3的内容来完成,重写的内容的类型通过寻址模式分页模式来确定。[0063]上文描述的一个示例性方面中的执行转移的算法可以被用在记录系统中,该记录系统用于形成在程序执行期间所调用的API函数的调用日志。进程具有虚拟地址空间VAS,程序文件的必要部分以及与之相关联的动态DLL库被加载到VAS中。在程序代码的执行期间,API函数的调用从不同的DLL库发生,其还应当被输入API函数的调用日志中。[0064]图6a示出由0S创建的进程的存储器的示例。为清楚起见,进程存储器区分包含模块和库的程序指令的扇区,上述模块和库诸如包含文件的程序指令在该程序指令执行期间创建进程)的“EXE”模块、以及各种动态库(例如,Unknown•dl1、otherknown•dl1、kernel32.dll和Ntdll.dll。还存在“其它存储器”和“进程堆”的扇区,在这些扇区中可以存储任何给定的辅助数据。[0065]应当注意,由于存在巨大量的库(图6a未示出库的全分集),因此针对记录系统将所有的库划分为仅两组:感兴趣的库和不感兴趣的库。在存储位置中感兴趣的库构成感兴趣的存储扇区303和303a,不感兴趣的库连同其它模块一起包括所有其它的存储扇区304和304a。感兴趣的库的示例为库“kernel32.dll”和“Ntdll.dll”。不感兴趣的库的示例为库“Unknown.dll”和“Otherknown.dll”。可以形成感兴趣的动态库的列表,该列表将包含记录所需的库。通常,最受欢迎的且经常被所有进程使用的库的列表可以覆盖所有的其它库的工作。因此,所有的其它库将为不感兴趣的库。[0066]图6b和图6c示出VAS的示例,一个VAS为原始的(图6b,第二个VAS为原始VAS的副本(图6c。在一个示例性方面中,为了形成API函数调用的列表,记录系统在可执行文件的运行期间创建两个新的VAS来代替原始VAS。在另一个示例性方面中,创建两个新的VAS,但是连同这两个新的VAS—起使用原始VAS,此后在0S访问VAS的情况下将两个新的VAS呈现给0S〇[0067]因此,将进程的存储器划分为两部分。在第一原始VAS301中,可以通过上述方法将感兴趣的扇区303标为不可执行,以及将记录库的可输出函数的调用,这些可输出函数的程序指令被包含在感兴趣的扇区的页面中。其它扇区304诸如不感兴趣的EXE模块或DLL库可以被标为可执行的。在VAS的副本301a中,可以实现对立面,感兴趣的扇区303a可以被标为可执行的,且其它扇区304a可以被标为不可执行的。[0068]应当注意,不管VAS,进程存储器的内容总是保持相同(S卩,地址空间的完整性不被中断)。仅改变对应的表页面的属性。该声明仅对于用户模式是准确的,在该用户模式下,存储器的物理分割发生。该分割在于为VAS的每个副本创建页面目录和页面表,以及在一个示例性方面中创建目录表和页面寻址级的表,这些表具有其自身的控制寄存器CR3的值。相同的物理页面可以被映射在两个目录中,但对于需要记录其调用的库而言具有不同的属性。因此,VAS之间的切换可以通过重写控制寄存器CR3改变控制寄存器CR3的内容来完成。[0069]为了使记录系统能够控制VAS在VAS之间切换操作),对于每个VAS中的对应页面,将标志NX位布置在每个页面的属性部分中。NX位为用于确定执行位于给定存储页面上的程序代码、或在试图执行该代码的情况下发生异常页面错误,后文中册0的可能性的特殊标志。通过“#PF”指在试图运行来自存储页面的程序代码其这类执行被禁止时出现的异常。通过设置这些NX位,在API函数调用的时刻切换创建的VAS变为可能的。应当注意,在从原始VAS301切换到复制的VAS301a时将记录调用,而且还在沿反方向切换时,将记录函数的返回值和几个输出参数。该原理使得能够仅执行复制的VAS301a中感兴趣的动态库,以及原始VAS301中所有余下的可执行代码。[0070]可以按如下方式执行本文中公开的使用用于虚拟存储器切换的方法对程序指令执行的记录。记录系统可以包含感兴趣的库的列表,且其还形成一种包含关于指向库的条目的至少一个地址的信息的“库卡”。图7示出根据一个方面的用于记录程序执行的虚拟存储器复制的示例性方法。在步骤700中正执行的文件的启动开始时,记录系统在步骤701中接管控制以及在步骤702中形成两个VAS原始VAS3〇1和复制的VAS3〇la。接着在步骤7〇3中,确定感兴趣的库及其页面。步骤704,在两个VAS的形成期间,在属于感兴趣的库的页面和属于所有余下代码的页面的属性中,在这两个VAS中的每一者中设置NX位。接着步骤705,控制返回到OS。[0071]图8示出记录系统在API函数调用的日志形成期间的操作方法。在步骤801,在正执行文件运行期间调用来自感兴趣的库的特定API函数。例如,这是“CreateFile”函数的调用,该“CreateFile”函数位于动态库“kernel32•dll”中。因此,在步骤802,在指示的用于函数的进一步执行的访问地址处的控制转移跳跃期间,在步骤803,根据先前布置的NX位,异常页面错误#PF发生。该情形与如下事实相关联:执行发生在原始VAS301中,同时如上所述,NX位己经被设置在用于感兴趣的库的页面的属性中,其指示在原始VAS的给定页面中执行代码的不可能性。接着在步骤804,在异常处理程序的帮助下,对#PF异常的上下文进行分析以确定该异常的起因以及确定被调用的API函数的地址。因此,该分析在于从API函数的表该表是先前创建的)寻找由该调用访问的存储地址所对应的API函数。在确定API函数之后,在步骤805,将关于该API函数的信息输入API函数调用的日志中,以及在步骤806,将进行从原始VAS301到复制的VAS301a的切换,此处在步骤807,感兴趣的库的代码的进一步执行更确切地,特定API函数的执行将发生。[0072]在API函数已经执行其任务之后,退出该API函数,即在步骤808,返回跳跃到正被执行的文件的程序代码参照图6,这是从“Logging.dll”模块到“Exe”模块的过渡)。但是由于复制的VAS301a中的该存储区域不可执行的事实,因此在步骤809,#PF异常出现。在步骤810,也分析该#??以确定其发生的起因。在分析期间,例如在关于跳跃地址的信息的帮助下,确定存在来自API函数的返回。在该情况下,在步骤811,存在从复制的VAS301a到原始VAS301的切换,此处在步骤812,程序代码的进一步执行继续。在API函数调用再次出现之后,重复用于切换VAS的所有步骤,直到程序代码被执行。[0073]图9a、图%和图9c示出根据本发明的方面的记录系统在感兴趣的扇区未占据地址空间中的整个页面而仅占据该页面的一部分时的准备。图9a示出了进程的虚拟地址空间VASVAS例如地址空间的特定情况)的特定区域。页面l〇〇a’的一部分可以包括感兴趣的扇区303,且另一部分可以包括不感兴趣的扇区304。当不需要记录来自库的所有的API函数时,扇区的这类布置可以发生。例如,从感兴趣的库,排除了对后续分析不重要的API函数,这些API函数不经常被调用,或者在另一方面,来自库的某个特定的API函数是感兴趣的,但它可以占据存储器中的页面的仅一部分。应当注意,由于具有组成VAS的多个页面,因此图示出了反映VAS页面的全分集的仅三种页面,具体为:页面l〇〇a,其可以包含仅用于感兴趣的扇区303的代码指令和数据;页面100a,其可以包含仅用于不感兴趣的扇区304的代码指令和数据;页面100a’,其可以包含用于感兴趣的扇区303的代码指令和数据以及用于不感兴趣的扇区304的代码指令和数据。因此,两种类型的页面的三个变型是可能的。第一页面类型为类型l〇〇a的页面,其可以包含仅用于感兴趣的扇区303或仅用于不感兴趣的扇区304的代码指令和数据。第二页面类型为类型100a’的页面,其可以包含用于感兴趣的扇区303的代码指令和数据以及用于不感兴趣的扇区304的代码指令和数据。第一类型100a的页面按两个变型被发现,可以包含仅用于感兴趣的扇区303的代码指令和数据的页面,和可以包含仅用于不感兴趣的扇区304的代码指令和数据的页面。第二类型l〇〇a’的页面可以按一个变型发生且可以包含用于感兴趣的扇区303和不感兴趣的扇区304的代码指令和数据。[0074]图%和图%呈现VAS的变型,一个VAS为原始VAS301图%,第二VAS为原始VAS的副本301a图9c。这一个方面中,原始VAS即为进程的VAS图9a。因此,进程的存储器被划分为两部分。[0075]在第一原始VAS301中,位于第一类型100a的页面上的感兴趣的扇区303和不感兴趣的扇区304可以用页面标签来标记在一些示例中,标记扇区的概念和标记包含给定扇区的页面的概念可以是相同的),其中,其上发现用于感兴趣的扇区303的代码指令和数据的第一类型l〇〇a的页面的页面标签可以不同于其上发现用于不感兴趣的扇区3〇4的代码指令和数据的第一类型100a的页面的页面标签。根据一个方面,包含用于感兴趣的扇区303的代码指令和数据的第一类型100a的页面可以被标为不可执行,而包含用于不感兴趣的扇区3〇4的代码指令和数据的第一类型l〇〇a的页面可以被标为可执行。[0076]第二类型100a’的页面可以不同于包含用于感兴趣的扇区303的代码指令和数据的第一类型l〇〇a的页面而被标记,或可以类似于包含用于不感兴趣的扇区3〇4的代码指令和数据的第一类型100a的页面而被标记,或被标记为可执行。当在第二类型100’的页面上发现用于感兴趣的扇区303的代码指令和数据时,感兴趣的扇区的代码指令或数据本身被标记,例如设置字节OxCC,其为族X86INT3的处理器的命令的操作码,该操作码携带程序停止点断点)的功能。命令INT3的执行导致以中断处理程序号3的调用的形式创建通知,这被预留用于调试目的。在其它实例中,可以设置字节OxFl,其为用于族X86INT1的处理器的命令的操作码。[0077]在VAS副本301a中,位于第一类型l〇〇a的页面上的感兴趣的扇区303和不感兴趣的扇区304可以用页面标签来标记,其上发现用于感兴趣的扇区303的代码指令和数据的第一类型100a的页面的标签可以不同于其上发现用于不感兴趣的扇区3〇4的代码指令和数据的第一类型l〇〇a的页面的标签。根据另一方面,标签的反转可以发生,在原始vas中可被标为可巧行的第一类型100a的页面在VAS副本中被标为不可执行,而在原始VAS中可被标为不可执行的第一类型100a的页面在VAS副本中被标为可执行。在VAS副本中,第二类型100a’的页面可以类似于其上发现用于感兴趣的扇区303的代码指令和数据的第一类型l〇〇a的页面而被标记,在特定实例中,所述页面可以被标记为可执行。[0078]原始VAS301和复制的VAS301a之间的切换可以发生在创建通知之后。原始VAS301中的通知可以在如下情况下创建:[0079]•在控制从由一个标签标记的扇区转移到由不同标签标记的原始VAS的扇区时;[00S0]•控制转移到存在于第二类型100a’的页面上的感兴趣的扇区303的标记的代码指令或数据时。[0081]根据本发明的一个方面,原始VAS301中的通知可以在如下情况下创建:[0082]•在控制从存在于第一类型l〇〇a或第二类型100a’的页面上的不感兴趣的存储扇区304转移到存在于第一类型10似的页面上的感兴趣的扇区3〇3的指令时;[0083]•在控制从在第一类型l〇〇a或第二类型100a,的页面上发现的不感兴趣的存储扇区304转移到在第二类型l〇〇a’的页面上发现的感兴趣的扇区3〇3的标记指令时。[0084]VAS副本301a中的通知可以在如下情况下创建:[0085]•在控制从在第一类型l〇〇a的页面上发现的由一个标签标记的扇区转移到VAS副本301a的由不同标签标记的且也在第一类型1〇〇的页面上发现的扇区时;[0086]•在控制从在第二类型100a’的页面上发现的由一个标签标记的扇区转移到VAS副本301a的标有不同标签的且在第一类型100a的页面上发现的扇区时。[0087]根据本发明的又一方面,VAS副本301a中的通知可以在如下情况下创建:[0088]•在控制从感兴趣的存储扇区303转移到在第一类型100a的页面上发现的不感兴趣的扇区304的指令时;[0089]•在控制从在第二类型100a’的页面上发现的不感兴趣的存储扇区3〇4转移到在第一类型l〇〇a的页面上发现的不感兴趣的扇区304的指令时。[0090]图10示出根据本发明的方面的将指令执行的控制从一个地址空间转移到另一个地址空间的准备方法和机制。应当理解,图10的方法可以通过上文结合图1公开的计算机的各种硬件和软件模块来实现。在开端,获得进程的原始地址空间(步骤1000。在步骤1010中,可以在进程的原始地址空间301中确定至少一个感兴趣的存储扇区303,然后在步骤1020中,可以确定进程的原始地址空间301的存储页面100a和存储页面l〇〇a’,其可以包含用于如在步骤1010中确定的感兴趣的扇区303的代码指令和数据。在下一个步骤1030中,可以通过复制进程的原始地址空间301的页面来创建至少一个地址空间301a进程的原始地址空间的副本),其中至少复制如在步骤1020中确定的包含感兴趣的扇区的代码指令和数据的页面。在创建几个地址空间之后,地址空间中的页面可以被标记。在步骤1040中,原始地址空间中的存储页面可以被标记,原始地址空间中的仅包含感兴趣的扇区303的代码指令和数据的页面l〇〇a的标签不同于除了感兴趣的扇区的代码指令和数据外还包含感兴趣的扇区以外的扇区的代码指令和数据的页面l〇〇a’、以及仅包含感兴趣的扇区以外的扇区304的代码指令和数据的页面100a的标签。接着在步骤1050中,在除了感兴趣的存储扇区的代码指令和数据外还包含感兴趣的扇区以外的扇区的代码指令和数据的页面100a’上,可以标记感兴趣的扇区303的代码指令或数据。此后,在步骤1060中,可以在复制的地址空间中标记页面l〇〇a和页面100a’,原始地址空间中的包含感兴趣的扇区303的代码指令和数据的页面l〇〇a和页面100a’的标签不同于仅包含感兴趣的扇区以外的扇区304的代码指令和数据的页面l〇〇a的标签。在所有上文指示的步骤之后,在步骤1070中,在原始地址空间301或复制的地址空间301a中的指令的执行可以发生,直到通知出现,该通知在如下情况下创建:[0091]•在代码指令的控制从由一个标签标记的扇区转移到由不同标签标记的地址空间的扇区时;[0092]•在控制转移到标记的指令时。[0093]在步骤1070中创建通知之后,在后续的步骤1080中,可以将指令的执行转移到与在步骤1070中通过正被执行的指令在其中创建通知的地址空间不同的地址空间。[0094]应当注意,上述技术的特征之一为,系统不改变存储器内容,而仅介入与存储器一起工作的0S的机制中。[0095]在各个方面中,本文所描述的系统和方法可以以硬件、软件、固件或它们的任何组合来实施。如果以软件来实施,则上述方法可以作为一个或多个指令或代码而被存储在永久性计算机可读介质上。计算机可读介质包括数据存储器。以示例性而非限制性的方式,这种计算机可读介质可以包括1^11,1?^3£?1?011丄0-1?01«,闪存或其它类型的电存储介质、磁存储介质或光存储介质,或可用来携带或存储所期望的指令或数据结构形式的程序代码并可以被通用计算机的处理器访问的任何其它介质。[0096]在各个方面中,本发明中所描述的系统和方法可以按照模块来处理。本文所使用的术语“模块”指的是例如现实世界的设备、部件、或使用硬件(例如通过专用集成电路ApplicationSpecificIntegratedCircuit,ASIC或现场可编程门阵列(Field-ProgrammableGateArray,FPGA实现的部件的布置,或者指的是硬件和软件的组合,例如通过微处理器系统和实现模块功能的指令集该指令组在被执行时将微处理器系统转换成专用设备来实现这样的组合。一个模块还可以被实施为两个模块的组合,其中单独地通过硬件促进某些功能,并且通过硬件和软件的组合促进其它功能。在某些实现方式中,模块的至少一部分(以及在一些情况下,模块的全部可以被执行在通用计算机例如上文在图1中更详细描述的通用计算机)的处理器上。因此,每个模块可以以各种适合的配置来实现,而不应受限于本文所列举的任何特定的实现方式。[0097]为了清楚起见,本文没有公开各个方面的所有例程特征。应当领会的是,在本发明的任何实际的实现方式的开发中,必须做出许多特定实现方式的决定,以便实现开发者的特定目标,并且这些特定目标将对于不同的实现方式和不同的开发者变化。应当理解的是,这种开发努力会是复杂的且费时的,但对于了解本发明的优点的本领域的普通技术人员来说仍然是工程的例行任务。[0098]此外,应当理解的是,本文所使用的措辞或术语出于描述而非限制的目的,从而本说明书的术语或措辞应当由本领域技术人员根据本文所提出的教导和指导结合相关领域技术人员的知识来解释。此外,不旨在将本说明书或权利要求中的任何术语归于不常见的或特定的含义,除非明确如此阐述。[°099]本文所公开的各个方面包括本文以说明性方式所引用的己知模块的现在和未来已知的等同物。此外,尽管已经示出并描述了各个方面和应用,但是对于了解本发明的优点的本领域技术人员将显而易见的是,在不脱离本文所公开的发明构思的前提下,相比于上文所提及的内容而言的更多的修改是可行的。

权利要求:1.一种用于控制计算机程序的执行的计算机实现的方法,所述方法包括:通过处理器在虚拟存储地址空间中确定存储扇区,所述存储扇区用于存储所述计算机程序的执行指令的至少一部分;在所述虚拟存储地址空间中确定包含与所述存储扇区相关联的代码指令和数据的一个或多个页面;创建所述虚拟存储地址空间的副本,所述副本包括所述存储扇区和所述一个或多个页面;4标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中的所述存储扇区和所述一个或多个页面;在执行存储在所述虚拟存储地址空间或所述虚拟存储地址空间的所述副本中的指令的同时,接收在不同的存储扇区之间转移所述计算机程序的执行的通知;以及将所述计算机程序的执行转移到接收所述通知的存储位置以外的存储位置。2.如权利要求1所述的方法,还包括获得存储有所述计算机程序的所述执行指令的所述虚拟存储地址空间。3.如权利要求1所述的方法,还包括识别所述一个或多个页面中的包含与所述存储扇区不相关联的代码指令和数据的一个或多个存储扇区。4.如权利要求3所述的方法,还包括将所述一个或多个页面中的每一者识别为如下中的一者:第一类型的页面,所述第一类型的页面包含仅用于所述存储扇区或仅用于所述一个或多个存储扇区的代码指令和数据;或者第二类型的页面,所述第二类型的页面包含用于所述存储扇区和所述一个或多个存储扇区的代码指令和数据。5.如权利要求4所述的方法,其中,所述标记包括类似地标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中彼此对应的所述第一类型的页面和所述第二类型的页面。6.如权利要求4所述的方法,其中,所述标记包括不同地标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中彼此对应的所述第一类型的页面和所述第二类型的页面。7.如权利要求4所述的方法,还包括:在检测到控制在与不同类型的页面相关联的两个扇区之间转移、或转移到所述第二类型的页面中的一个页面的扇区的标记的代码指令或数据时,在所述虚拟存储地址空间中创建所述通知。8.如权利要求4所述的方法,还包括:在检测到控制在具有不同的标签但均与所述第一类型的页面相关联的两个扇区之间转移、或从与所述第二类型的页面中的一个页面相关联的扇区转移到具有不同的标签但与所述第一类型的页面中的一个页面相关联的扇区时,在所述虚拟存储地址空间的所述副本中创建所述通知。9.一种用于控制计算机程序的执行的系统,所述系统包括:联接到存储器的硬件处理器,所述处理器配置成:在虚拟存储地址空间中确定存储扇区,所述存储扇区用于存储所述计算机程序的执行指令的至少一部分;在所述虚拟存储地址空间中确定包含与所述存储扇区相关联的代码指令和数据的一个或多个页面;创建所述虚拟存储地址空间的副本,所述副本包括所述存储扇区和所述一个或多个页面;标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中的所述存储扇区和所述一个或多个页面;在执行存储在所述虚拟存储地址空间或所述虚拟存储地址空间的所述副本中的指令的同时,接收在不同的存储扇区之间转移所述计算机程序的执行的通知;以及将所述计算机程序的执行转移到接收所述通知的存储位置以外的存储位置。10.如权利要求9所述的系统,其中,所述处理器还配置成识别所述一个或多个页面中的包含与所述存储扇区不相关联的代码指令和数据的一个或多个存储扇区。11.如权利要求9所述的系统,其中,所述处理器还配置成将所述一个或多个页面中的每一者识别为如下中的一者:第一类型的页面,所述第一类型的页面包含仅用于所述存储扇区或仅用于所述一个或多个存储扇区的代码指令和数据;或者第二类型的页面,所述第二类型的页面包含用于所述存储扇区和所述一个或多个存储扇区的代码指令和数据。12.如权利要求11所述的系统,其中,所述处理器配置成类似地标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中彼此对应的所述第一类型的页面和所述第二类型的页面。13.如权利要求11所述的系统,其中,所述处理器配置成不同地标记在所述虚拟存储地址空间和所述虚拟存储地址空间的所述副本中彼此对应的所述第一类型的页面和所述第二类型的页面。14.如权利要求11所述的系统,其中,所述处理器还配置成:在检测到控制在与不同类型的页面相关联的两个扇区之间转移、或转移到所述第二类型的页面中的一个页面的扇区的标记的代码指令或数据时,在所述虚拟存储地址空间中创建所述通知。15.如权利要求11所述的系统,其中,所述处理器还配置成:在检测到控制在具有不同的标签但均与所述第一类型的页面相关联的两个扇区之间转移、或从与所述第二类型的页面中的一个页面相关联的扇区转移到具有不同的标签但与所述第一类型的页面中的一个页面相关联的扇区时,在所述虚拟存储地址空间的所述副本中创建所述通知。

百度查询: 卡巴斯基实验室股份制公司 在存储位置之间转移控制的系统和方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。