器125。此踪迹生成器125,尽管被示为是核110A外 部的,但是,在某些实施例中,是核110A内部的。硬件踪迹生成器可W生成处理器踪迹,例 如,如此处所讨论的。在一个实施例中,硬件踪迹生成器包括输出执行的指令的被抑制的地 址踪迹的踪迹抑制器。踪迹抑制器可W是抑制处理器(例如,地址)踪迹的(例如,硬件) 逻辑。如此处所使用的,处理器踪迹(例如,地址踪迹)可W是指生成的或输出的踪迹数据 分组,例如,DV和/或DLA分组。踪迹抑制器可W是抑制处理器踪迹的软件代码。在一个实 施例中,踪迹抑制器压缩处理器踪迹的地址数据(例如,每一操作数的地址)。踪迹抑制可 W用于,例如,缩小传输踪迹所需的带宽和/或存储踪迹所需的存储。另选地或另外地,踪 迹抑制器删除在处理器踪迹操作过程中生成的数据(例如,在被输出到用户和/或到分析 程序之前),W便在输出的数据踪迹中没有为特定操作和/或指令生成的输出,例如,如下 面参考图5A-5B进一步描述的。踪迹生成器(例如,踪迹抑制器)可W是硬件、软件、固件, 或其任何组合。例如,踪迹生成器可包括生成如此处所讨论的被抑制的踪迹的软件,诸如作 为踪迹生成器例程140A存储的。在一个实施例中,踪迹生成器包括生成如此处所讨论的被 抑制的踪迹的存储在存储器中的踪迹抑制器软件。踪迹生成器例程140A可W与被踪迹生 成器跟踪的任何软件分开。被抑制的数据踪迹一般是指来自处理器踪迹的大小比未抑制的 数据踪迹较小的一组数据,例如,通过删除某些地址数据,如此处所公开的。在某些实施例 中,抑制包括对于可抑制的,执行的指令,没有输出(例如,没有分组被输出)。尽管在其他 实施例中,抑制包括输出相对于未抑制的分组较小的分组,例如,被抑制的输出是没有有效 负载的头部字节,或指出此存储器地址被抑制但是不包括地址本身的不同的(非头部)分 组。
[0041] 图2示出了被抑制的地址踪迹200(例如,在处理器内)的流程图的实施例。如所 描绘的,例如,由硬件指令获取单元获取201指令。然后,例如,由硬件指令解码单元来解码 202已获取的指令。然后,例如,由硬件执行单元来执行203已解码的,已获取的指令。然 后,例如,当返回的结果例如由硬件隐退单元隐退时,回写204执行的指令。如果存在任何 可抑制的地址(205),例如,如果存在任何(i)相对地址,诸如访问引用(例如,有或者没有 指定的偏移)地址寄存器(例如,包含地址的寄存器)的地址的指令,或访问不变的(例如, 自从在处理器踪迹中前一次输出地址W来不变)寄存器的指令,或(ii)访问绝对地址(例 如,全局变量、局部变量,或常量)的指令,那么,该地址(一个或多个)可W被抑制。抑制 (206)可包括生成对不变的寄存器(例如,从地址踪迹中删除寄存器中所包含的地址,W便 没有对应的输出)或相对地址(例如,从地址踪迹中删除相对地址,W便没有对应的输出) 没有输出的被抑制的地址踪迹,和/或输出寄存器暗示分组。在一个实施例中,寄存器暗示 分组包括至少一个比特,其中,其低值(例如,0)表示在该执行的指令中访问的寄存器是不 变(例如,自从在处理器踪迹中前一次输出地址W来不变)的寄存器。可另选地,寄存器暗 示分组可包括至少一个比特,其中,其高位值(例如,1)表示在该执行的指令中访问的寄存 器是不变(例如,自从在处理器踪迹中前一次输出地址W来不变)的寄存器。在某些实施 例中,系统或用户将认识到,寄存器暗示比特被设置(例如,设置为0或1,如上文指出的), W指出不变的寄存器,系统或用户可W从其W前的输出(例如,从未抑制的地址踪迹分组 或部分)确定该不变的寄存器中的地址。
[0042] 抑制(206)可包括生成被抑制的地址踪迹分组,包括(例如,仅)被执行的指令访 问的虚拟地址和被设置为指出执行的指令访问的寄存器的标志(例如,一个或多个比特)。 下面包括了运种情况的示例。然后,访问相同的不变的寄存器的随后执行的指令可W只输 出寄存器暗示分组,例如,如此处所描述的。抑制(206)可包括生成被抑制的地址踪迹分 组,包括被执行的指令访问的虚拟地址和被设置为指出执行的指令访问的寄存器的标志 (例如,一个或多个比特)。被抑制的地址踪迹分组可包括段基(segmentbase),例如,如果 使用Intel教x86指令集架构的存储器分段。抑制(206)可包括生成被抑制的地址踪迹分 组,包括(例如,仅)被执行的指令访问的线性地址(例如,等于虚拟地址加段基)和被设 置为指出执行的指令访问的寄存器的标志(例如,一个或多个比特)。
[0043] 在一个实施例中,当最初(例如,在代码的一部分)访问寄存器时,寄存器中的地 址不被抑制,但是,在使用该寄存器的随后的访问中,地址被抑制。例如,在运样的实施例 中,解码器可W从地址确定寄存器值,而并非输出寄存器暗示分组。
[0044] 在另一个实施例中,寄存器暗示分组是存储在地址寄存器中的地址。在再一个实 施例中,寄存器暗示分组是被预定为引用该寄存器的压缩的分组(例如,一个字节(8比特) 分组,而不是16, 32,64比特或更大的地址分组),例如,输出(例如,一个字节分组,指示) 寄存器名称,诸如RAX化4比特的存储)、EAX(32比特的存储),或AX(16比特的存储)。输 出的寄存器名称可W是预定的地址(例如,比特数比寄存器中所包含的地址较少),W便系 统或用户将地址识别为指示指令访问了特定寄存器,但不输出该特定寄存器的内容。目P,输 出可W是寄存器的名称,而不是寄存器的内容。抑制可包括没有绝对地址的输出的被抑制 的地址踪迹(例如,从地址踪迹中删除绝对地址,诸如变量名称或常量名称(或其虚拟地 址),W便没有对应的输出)。
[0045] 虽然对任何地址是否是可抑制的205的检查被描绘成在回写204之后,但是,本发 明不受限制。例如,检查205可W在执行203之后进行。然后,可W输出数据踪迹207,例 如,被抑制的地址踪迹。数据踪迹可W只包括被抑制的地址踪迹,无数据值踪迹。
[0046] 图3示出了被抑制的地址踪迹300(例如,在处理器内)的流程图的实施例。如所 描绘的,例如,由硬件指令获取单元获取301指令。然后,例如,由硬件指令解码单元来解码 302已获取的指令。然后,例如,由硬件执行单元来执行303已解码的,已获取的指令。然 后,例如,当返回的结果,例如,由硬件隐退单元隐退时,回写304执行的指令。如果存在任 何绝对地址,诸如访问绝对存储器地址(例如,全局变量、局部变量,或常量)305的执行的 指令,那么,可W抑制该一个或多个地址。抑制可包括没有绝对地址的输出的被抑制的地址 踪迹,例如,从地址踪迹中删除绝对地址,诸如变量名称或常量名称,W便没有对应的输出。
[0047] 虽然对任何地址是否是绝对305的检查被描绘成在回写304之后进行,但是,本发 明不受限制。例如,检查305可W在执行303之后进行。然后,可W输出数据踪迹307,例 如,包括被抑制的地址踪迹。
[004引图4示出了被抑制的地址踪迹400 (例如,在处理器内)的流程图的实施例。如所 描绘的,例如,由硬件指令获取单元获取401指令。然后,例如,由硬件指令解码单元来解码 402已获取的指令。然后,例如,由硬件执行单元来执行403已解码的、所获取的指令。然后, 例如,当返回的结果,例如,由硬件隐退单元隐退时,回写404执行的指令。如果存在被重复 使用的任何寄存器,诸如执行的指令访问不变(例如,自从在处理器踪迹中输出内容(例 如,地址)W来不变)的寄存器405,那么,可W抑制寄存器中的一个或多个地址。抑制可包 括没有不变的寄存器的输出的被抑制的地址踪迹(例如,从地址踪迹中删除寄存器中所包 含的地址,W便没有对应的输出)和/或输出寄存器暗示分组。抑制可包括例如,作为寄存 器暗示分组,发送数据线性地址值LA)分组(例如,与非抑制的DLA分组,相同比特数),但 将地址(例如,未包括实际DLA)替换为设置为(例如,1)W指示基于寄存器重复使用的抑 制的单一比特(例如,被抑制的地址)。目P,抑制可包括输出DLA分组,有效负载是被设置为 指出抑制的单一或多个比特,不包括地址。寄存器暗示分组可W被输出,而不输出寄存器中 的地址和/或而不输出引用(例如,从中读取)寄存器的相对地址。在一个实施例中,寄存 器暗示分组是存储在地址寄存器中的地址(例如,值)。在另一个实施例中,寄存器暗示分 组是被预定引用该寄存器的压缩的分组(例如,一个字节分组),例如,输出指示不变的寄 存器被访问的一个或多个比特(例如,W便系统或用户可W从其先前输出,例如,从未抑制 的地址踪迹分组或一部分中确定该不变的寄存器中的地址)和/或输出寄存器名称,诸如 RAX(64比特的存储)、EAX(32比特的存储),或AX(16比特的存储)。输出的寄存器名称可 W是预定的地址,W便系统或用户将地址识别为指示指令访问了特定寄存器,但不输出该 特定寄存器的内容。目P,引用寄存器的名称,而不引用寄存器的内容。
[0049] 虽然对任何寄存器是否重复使用405的检查被描绘成在回写404之后,但是,本发 明不限于此。例如,检查405可W在执行403之后进行。然后,可W输出数据踪迹407,例 如,包括被抑制的地址踪迹。
[0050] 设备,例如,处理器可包括实现此处的本发明中的任何一项的逻辑。处理器可W使 用执行此处所讨论的方法中的任何单一、组合,或所有方法的逻辑,例如,执行图2,3,和/ 或4中的流程图的逻辑。
[0051] 图5(A)-度)示出了代码的示例子集(例如,指令的流)501-525的被抑制的地址 踪迹的示例性执行。此示例性代码部分使用基于寄存器的访问和几个编码到指令中的全局 变量地址的混合(例如,访问地址寄存器)。图5(A)-度)分别示出了用(1)、(2),W及(3) 标记的Ξ个单独的地址踪迹:其中,(1)是不抑制地址踪迹,(2)是绝对地址的地址踪迹中 的抑制,W及(3)是输出地址踪迹中的重复使用的寄存器的基于寄存器的暗示,W及绝对 地址的地址踪迹中的抑制。运些踪迹被进一步简化,W只考虑数据线性地址值LA),忽略数 据值值V)跟踪。(注意:下面假设踪迹未能实现每一条件跳转,我们不考虑跟踪指令本身 的分组大小)。运里考虑的未抑制的分组是1字节头部分组,W及8字节的完全线性地址, 运意味着,每一分组都将是9字节。在一个实施例中,当满足某些条件时,例如,如在图2, 3,和/或4中,被抑制的地址踪迹包括仅输出头部分组(例如,对于可抑制的地址),而不 输出完全线性(例如,虚拟)地址。在一个实施例中,头部分组(例如,被输出到该执行的 指令的地址踪迹中的唯一分组)包括被访问的虚拟地址W及被设置为指示执行的指令访 问了寄存器(例如,其内容W前未输出到地址踪迹中的寄存器)的标志(例如,一个或多个 比特)。在一个实施例中,头部分组(例如,被输出到该执行的指令的地址踪迹中的唯一分 组)包括被访问的虚拟地址W及被设置为指示执行的指令访问了寄存器(例如,其内容W 前未被输出到地址踪迹中的寄存器)的标志(例如,一个或多个比特)。在一个实施例中, 头部分组被抑制W不包括前导零(例如,如果地址只是4字节,那么,只发出线性地址的4 字节,而不是大于4字节的全地址)。在运样的实施例中,输出的被抑制的地址踪迹可包括 线性地址的未抑制的大小(例如,作为头部分组的一部分)。
[0052] 运里,对于所有指令,注意,引用字符(1)表示没有抑制的地址踪迹,W使得被访 问的任何地址都被完全输出到地址踪迹中。运里可W假设零的段基,虽然本发明不限于此。 转向5(A)-5度)中的示例23指令踪迹的行501中的移动指令("mov"),首先注意,"qword ptr"是指向在通过将方括号内的RCX和1她的地址寄存器内容相加给出的相对地址处指 示的地址(例如,开始)的四倍长字(即,64比特)(运里,h是指,18是十六进制数)。运 里,地址寄存器RCX包含(例如,存储)地址0X7F0000,如此,要被移到畑X中的qword是, 哪一个被存储在存储器中的从0X7F0000加1化开始的位置,即,在存储器位置0X7F0018。 作为另一个示例,行502处的移动指令的未抑制的地址踪迹(1)输出地址0X7F0000,因为该 指令访问存储在存储器中的从0x7f0000开始的位置处的qword。那些精通本技术的普通人 员将理解,上面的描述类似地适用于其余指令。
[0053] 在行501,考虑寄存器RCX中所包含的地址W前没有被输出(例如,地址踪迹从行 /指令501开始)。对于被抑制的地址踪迹(2),即,绝对地址的地址踪迹中的抑制,在此指 令中没有绝对地址,如此,无对地址踪迹的抑制,W使得踪迹(1)和(2)相同,即,0X7F0018, 运是被指令访问的相对地址。对于被抑制的地址踪迹(3),即,在重复使用的寄存器的基于 寄存器的暗示(诸如存储在地址寄存器中的地址)的地址踪迹中输出,W及在绝对地址的 地址踪迹中抑制,寄存器RCX中所包含的地址0X7F0000作为寄存器暗示分组输出(例如, 作为向用户和/或代码的该指令中的相对地址引用(例如,使用)该地址寄存器的暗示), 因为地址0X7F0000没有被预先输出到此踪迹中。指令可W按顺序或无序运行,例如,如此 处所讨论的。
[0054] 移动指令502也访问由存储在寄存器RCX中的地址正在指向的qword,W将该 qword移动到寄存器RAX中。对于被抑制的地址踪迹(2),在此指令中没有绝对地址,如此, 无对地址踪迹的抑制,W便踪迹(1)和(2)相同,即,0X7F0000,运是被指令访问的寄存器 RCX中的地址。对于被抑制的地址踪迹(3),无数据(例如,无分组)被输出到寄存器RCX 中所包含的地址0X7F0000的数据踪迹(即,存在抑制),好像它被预先输出到指令501的 (3)中的地址踪迹,即,因为RCX中的地址0X7F0000预先输出到此踪迹,且寄存器RCX中的 值相对于指令501中的RCX的值没有变化(例如,值在当前指令中,与在先前指令501的执 行的末尾处相同)。
[00巧]异或狂OR)指令503不访问地址,它仅仅X0R寄存器ESI的内容与其本身,并将结 果存储回到ESI中,如此,没有地址踪迹(1)-(3)被生成。
[0056] 减法指令504访问正在被存储在寄存器畑X中的0X7F60000加21B化的地址指向 的qword,即,0巧F621B0,运是被指令访问的相对地址。从RAX中的值中减去qword,将结果 存储到RAX中。对于被抑制的地址踪迹(2),在此指令中没有绝对地址,如此,无对地址踪迹 的抑制,W便踪迹(1)和(2)相同,即,0X7F621B0,运是从将21B化与寄存器RDX中的值相 加的相对地址。对于被抑制的地址踪迹(3),寄存器RD