CN111771188A - 带链接分支指令的分支目标变体 - Google Patents
带链接分支指令的分支目标变体 Download PDFInfo
- Publication number
- CN111771188A CN111771188A CN201980015441.XA CN201980015441A CN111771188A CN 111771188 A CN111771188 A CN 111771188A CN 201980015441 A CN201980015441 A CN 201980015441A CN 111771188 A CN111771188 A CN 111771188A
- Authority
- CN
- China
- Prior art keywords
- branch
- instruction
- target
- linked
- address
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 claims abstract description 75
- 230000004044 response Effects 0.000 claims abstract description 50
- 230000001960 triggered effect Effects 0.000 claims abstract description 26
- 230000008859 change Effects 0.000 claims description 30
- 238000000034 method Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 230000006870 function Effects 0.000 description 18
- 230000006399 behavior Effects 0.000 description 13
- 230000001419 dependent effect Effects 0.000 description 7
- 101100108191 Vibrio parahaemolyticus serotype O3:K6 (strain RIMD 2210633) add gene Proteins 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 102100034033 Alpha-adducin Human genes 0.000 description 1
- 101000799076 Homo sapiens Alpha-adducin Proteins 0.000 description 1
- 101000629598 Rattus norvegicus Sterol regulatory element-binding protein 1 Proteins 0.000 description 1
- 101150060298 add2 gene Proteins 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003278 mimic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)
Abstract
一种设备2,包括指令解码器6和处理电路4。指令解码器6支持分支指令,该分支指令用于触发程序流程到目标地址处的指令的非顺序改变,该分支指令包括:带链接分支指令,针对该带链接分支指令设置了用于程序流程的后续返回的返回地址;以及至少一个目标检查类型的分支指令,针对该至少一个目标检查类型的分支指令,在采用分支时,当在目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,触发错误处理响应。对于至少一个目标检查类型的分支指令的至少子集,带链接分支指令的分支目标变体为允许的分支目标指令类型。
Description
技术领域
本技术涉及数据处理领域。
背景技术
分支指令是当从给定程序代码段执行指令时,用于触发程序流程的非顺序改变的指令。一些分支可为静态分支,其目标地址总是固定的或由与当前指令地址的固定偏移量来确定。然而,其他分支为数据相关分支,其中,目标地址(标识了在分支(若采用该分支)之后将执行的指令)取决于从存储器读取的或由先前指令生成的数据。例如,数据相关分支可用于确保某些函数根据程序的先前部分的结果而被有条件地执行。
对处理器的一种攻击形式可能为试图破坏通过数据相关分支指令控制程序流程方向的数据,以便欺骗分支指令而分支到在并非程序代码的作者本意的目标地址处的指令。这样的漏洞可允许攻击者将合法指令(它们是将要执行的正确程序代码的一部分)的一些段以与预期序列不同的顺序串在一起。这样的攻击可能会妨碍程序正确运行、对执行程序的处理器造成其他不期望的影响、或避开某些安全措施(例如密码检查)。
发明内容
至少一些示例提供了一种设备,包括:指令解码器,用以解码指令;以及处理电路,用以响应于由指令解码器解码的指令而执行数据处理;其中:响应于分支指令,指令解码器被配置为:控制处理电路以触发程序流程到目标地址处的指令的非顺序改变;当程序流程的非顺序改变响应于带链接分支(branch-with-link)指令被触发时,指令解码器被配置为:控制处理电路来为程序流程的后续返回设置返回地址;当程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,指令解码器被配置为:当目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,控制处理电路以触发错误处理响应;并且对于至少一个目标检查类型的分支指令的至少子集,至少一个允许的分支目标指令类型包括带链接分支指令的分支目标变体。
至少一些示例提供了一种数据处理的方法,包括:响应于分支指令,而触发程序流程到目标地址处的指令的非顺序改变;当程序流程的非顺序改变响应于带链接分支指令被触发时,为程序流程的后续返回设置返回地址;并且当程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,当目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,触发错误处理响应;其中,对于至少一个目标检查类型的分支指令的至少子集,至少一个允许的分支目标指令类型包括带链接分支指令的分支目标变体。
至少一些示例提供了一种计算机程序,用于控制主机数据处理设备以提供供执行目标程序代码的指令执行的指令执行环境,该计算机程序包括:指令解码程序逻辑,用以解码目标程序代码的指令;以及处理程序逻辑,用以响应于由指令解码程序逻辑解码的指令而执行数据处理;其中:响应于分支指令,指令解码程序逻辑配置为,控制处理程序逻辑以触发程序流程到目标地址处的指令的非顺序改变;当程序流程的非顺序改变响应于带链接分支指令被触发时,指令解码程序逻辑被配置为:控制处理程序逻辑来为程序流程的后续返回设置返回地址;当程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,指令解码程序逻辑被配置为:当目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,控制处理程序逻辑以触发错误处理响应;并且对于至少一个目标检查类型的分支指令的至少子集,至少一个允许的分支目标指令类型包括带链接分支指令的分支目标变体。
可提供一种存储介质以存储上面讨论的计算机程序。存储介质可为非暂态存储介质。
附图说明
本技术的其他方面、特征和优点将从对结合所附附图来解读的示例的以下描述中变得显而易见,附图中:
图1图示出数据处理设备的示例;
图2图示出带链接分支指令的行为;
图3图示出包括带链接分支指令和单独的分支目标指令的指令序列作为对比;
图4示出了使用带链接分支指令的分支目标变体的示例;
图5为示出了处理目标检查分支指令的方法的流程图;
图6为示出了对带链接分支指令的处理的流程图;并且
图7示出了可用于实现本技术的模拟器示例。
具体实施方式
一种防止针对控制数据(该数据控制由分支指令提供的程序流程)的攻击的技术,可提供指令解码器,该指令解码器支持至少一个允许的分支目标指令类型,这些允许的分支目标指令类型可用于标记程序的程序代码的作者意在作为分支的合法目标的安全分支目标点。当程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,处理电路可检查目标地址处的指令是否为至少一个允许的分支目标指令类型。当目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,则可触发错误处理响应。例如,错误处理响应可以是对异常进行的信号告知,或者是对指示已检测到故障的状态信息的存储。以此方式,由于不再可能分支到程序中除了由允许的分支目标指令类型标记的点之外的任意点,该架构可提供用于检测何时存在程序流程的非本意改变的机制,因此可使得上面讨论的攻击形式变得更加困难。
一种分支指令为带链接分支指令。当程序流程的非顺序改变响应于带链接分支指令被触发时,指令解码器可控制处理电路来为程序流程的后续返回设置返回地址。例如,返回地址可被存储到诸如被称为“链接寄存器”之类的特定寄存器。后续返回分支指令可读取返回地址,然后触发程序流程返回到由返回地址表示的地址的改变。对于使用带链接分支指令来调用函数,并且随后一旦该函数完成,则将处理返回到先前执行的程序部分,此功能性是有用的。带链接分支指令的使用可使得相同的函数从程序内的多个不同位置处调用,因为返回地址可用于有效地记住程序中进行调用函数的部分。
对于带链接分支指令,可以通过在带链接分支指令之后包括后续允许的分支目标指令类型,来实现针对上面讨论的攻击形式的保护。然而,在此情况下,程序中的指令数量会增加,并且由于带链接分支指令相对常见,这可能会使整个代码量显著增加。例如,在带链接分支指令的代码平均长度和平均使用量方面,在每个带链接分支指令之后包括分支目标指令,估计可使典型程序中指令的数量增加大约6%。增加给定程序所需的代码大小,会导致缓存使用效率与流水线利用率的降低,从而影响效率。
在上面讨论的技术中,可提供带链接分支指令的分支目标变体,对于至少一个目标检查类型的分支指令的至少子集,该分支目标变体被视为至少一个允许的分支目标指令类型之一。因此,由于带链接分支指令本身可充当允许的分支目标指令类型,使得程序流程返回该带链接分支指令的非顺序改变可被视为是有效的入口点(entry point),因此在带链接分支指令之后不必包括单独的分支目标指令。此设计利用如下事实:由于带链接分支指令的链接和返回行为,带链接分支指令后面的指令几乎总被预期为有效的分支目标点,因此单独指示显式的分支目标指令可能是多余的。相反地,带链接分支指令可隐式地表现为允许的分支目标指令类型本身。这有助于减少总代码量,从而改进指令缓存和指令处理流水线的效率。
响应于带链接分支指令所进行的返回地址的设置,可根据带链接分支指令是否为分支目标变体而不同。响应于非分支目标变体的带链接分支指令,处理电路可将返回地址设置为顺序上接在带链接分支指令后面的下一指令的地址。另一方面,响应于带链接分支指令的分支目标变体,可将返回地址设置为带链接分支指令的分支目标变体本身的地址。这意味着带链接分支指令的分支目标变体可充当分支目标指令,因为后续返回分支将分支回到同一带链接分支指令。虽然此行为意味着,带链接分支指令的分支目标变体和非分支目标变体是以不同的方式来设置返回地址的,但实际上很少有除返回分支本身以外的返回地址被函数内的任何指令引用。这意味着,函数内的返回地址的非确定性定义(地址基于函数是由带链接分支指令的分支目标变体还是由非分支目标变体调用而不同)不太可能导致重大问题(在任何情况下,确实需要在函数体内使用返回地址的确定性定义的代码,可在必要时以其他方式将地址作为附加函数参数进行传递)。实际上,大多数代码可通过允许带链接分支指令的变体,而将返回地址设置为变体自己的地址,使得变体自身充当允许的分支目标地址,从而减少代码量,因而从中获益。
带链接分支指令的分支目标变体的行为可根据程序流程是顺序地还是非顺序地传递到带链接分支指令而不同。当程序流程非顺序地从至少一个目标检查类型的分支指令传递到带链接分支指令的分支目标变体时,则可抑制与带链接分支指令的分支目标变体相关联的程序流程的任何非顺序改变,使得可直接执行顺序地接在带链接分支指令后面的下一指令,而非在带链接分支指令的分支目标变体之后执行的下一指令。这认知到,当程序流程从至少一个目标检查类型的分支指令非顺序地传递到带链接分支指令的分支目标变体时,则这意味着由带链接分支指令表示的分支通常已经被执行,并且现在程序流程正返回到该充当分支目标指令的带链接分支指令。
另一方面,当程序流程顺序地传递到带链接分支指令的分支目标变体时(即,在分支被采用之前第一次出现该带链接分支指令),则可允许程序流程的非顺序改变(若采用分支-注意是否采用分支也可能取决于其他条件信息)。此外,在并非所有分支都被视为目标检查类型的分支指令的情况下,当程序流程从非目标检查类型的分支指令非顺序地传递到分支目标变体或带链接分支指令时,则仍然可允许与带链接分支指令相关联的程序流程的非顺序改变。
换言之,当顺序地传递到带链接分支指令的分支目标变体、或从不需要查看检查目标地址处的指令是否为分支目标指令的分支分支到带链接分支指令的分支目标变体时,带链接分支指令可被视为确实触发程序流程的非顺序改变(若满足任何其他条件要求)的标准带链接分支指令。另一方面,当程序流程非顺序地从确实需要检查目标地址处的指令是否是允许的分支目标指令类型的分支分支传递到带链接分支指令的分支目标变体时,则该指令被视为是可在架构级别上提供无操作行为从而抑制与该指令相关联的任何分支(程序流程的非顺序改变)的分支目标指令。同一指令的此双重行为通过避免为这两个目的提供单独的指令实现了代码量的降低。
在本申请中,术语“分支指令”可指代能触发程序流程的非顺序改变的任何指令。这可包括被显式地定义为分支的某些类型的分支指令,例如,使用指令操作码将指令标记为分支指令。然而,分支指令也可为另一种类型的指令,这种指令具有代表某种其他类型的处理操作的操作码,但指定了提供程序计数器(其控制程序流程在程序中到达的当前点)的寄存器来作为其目的地寄存器。例如,分支指令可为将程序计数器寄存器指定为其目的地寄存器的算术指令、逻辑指令、加载指令、或寄存器移动指令(用于将数据值从一个寄存器移动至另一个寄存器的指令)。
在一些实施方式中,所有分支指令可被视为至少一个目标检查类型的分支指令(针对其执行对分支目标地址处的指令的检查),并且如果目标地址处的指令并非允许的目标指令类型之一时,则触发错误处理响应。然而,在其他示例中,可仅针对某些目标检查类型的分支指令需要进行对分支目标地址处的指令的检查,并且针对其他类型的分支指令,可省略该检查。例如,因为不可能通过修改分支控制数据来破坏总是分支到相同的位置的静态分支(使用固定的绝对目标地址或相对目标地址,该相对目标地址使用并不取决于从程序的先前部分导出的数据的偏移量来相对于分支指令的地址进行定义),这样的分支可不需要检查目标地址处的指令。因此,在某些情况下,可仅对数据相关分支(其目标地址取决于从先前指令导出的数据)执行目标地址处的指令的检查。
在一些实施方式中,带链接分支指令的分支目标变体可被视为针对所有目标检查类型的分支指令的允许的分支目标指令类型。然而,在其他示例中,带链接分支指令的分支目标变体可为针对目标检查类型的分支指令的特定(受限)子集的允许的分支目标指令类型。例如,如果目标地址处的指令为带链接分支指令的分支目标变体,则仅可用于分支到存储在链接寄存器中的返回地址的分支指令可被允许分支到带链接分支指令的分支目标变体,并且不分支到该返回地址的其他分支仍然可触发错误处理响应。
因此,在一些情况下,对于第一目标检查类型的分支指令,带链接分支指令的分支目标变体可为至少一个允许的分支目标指令类型之一,而对于第二目标检查类型的分支指令,带链接分支指令的分支目标变体则不是至少一个允许的分支目标指令类型之一。通过限制目标检查类型的分支指令的子集(针对该部分,带链接分支指令的分支目标变体为允许的分支目标指令类型的有效类型),这减少了攻击者以非生成代码的程序或编译器本意的方式重定向程序流程的范围,从而提高了安全性。
在一些情况下,可定义多于一个带链接分支指令的分支目标变体。带链接分支指令的不同变体可被视为是针对目标检查类型的分支指令的不同子集的允许的分支目标指令类型。例如,带链接分支指令的第一分支目标变体可为针对目标检查类型的分支指令的第一子集的至少一个允许的分支目标指令类型之一,并且带链接分支指令的第二分支目标变体可为针对目标检查类型的分支指令的第二(不同)子集的允许的分支目标指令。
更具体地,通过允许哪种类型的目标检查类型的分支指令分支到带链接分支指令的给定变体,这又将减少攻击者触发不期望行为的范围。例如,目标检查类型的分支指令之一可为专用返回分支指令,该专用返回分支指令总是分支到由先前带链接分支指令建立的链接寄存器中的地址。
一些实施方式可支持这样的带链接分支指令的变体:其仅被视为是针对该专用返回分支指令的允许的分支目标指令类型,但并非为针对其他更常见类型的分支(接受除了返回地址之外的任意目标地址)的允许的分支目标指令类型之一。
另一方面,一些程序代码可使用指定链接寄存器来作为用于其目标地址的源寄存器的一般类型的分支,以便在处理函数之后控制返回分支,并且在此情况下,可能还希望使带链接分支指令的分支目标变体成为针对这样的一般分支的允许的分支目标指令之一。
通过对以下二者进行定义:仅作为针对返回分支的有效分支目标的第一分支目标变体、可被允许为由返回分支与更一般形式的分支中任一者作为目标的第二分支目标变体,这允许编译器或程序员根据所需的安全级别来选择他们希望使用的变体。第一种变体可能更安全,因为不再可能将一般分支用作返回到返回地址的分支,但可能需要更严格的编程要求,而由于在第二种变体的情况下可能意味着不同的一般分支(其实际上不旨在实现返回)可有效地分支到带链接分支指令的位置,则第二种变体可能允许更宽松的编程实践,但这会导致一些额外的漏洞。因此,通过支持不同形式的带链接分支指令(它们支持目标检查类型的分支指令的不同子集)来有效地分支到带链接分支指令,这在权衡安全性与编程的简易性方面为程序员提供了灵活性。
在一些实施方式中,带链接分支指令的分支目标变体可具有与带链接分支指令的另一变体(其不被视为不同类型的分支指令之一)不同的编码。此外,可使用不同的指令编码来定义上面讨论的带链接分支指令的第一/第二分支目标变体。
然而,在其他示例中,带链接分支指令的分支目标变体可具有与带链接分支指令的另一变体(并非允许的分支目标指令类型)相同的编码,或第一/第二分支目标变体可具有相同的编码。在这种情况下,指令解码器或处理电路可基于除给定带链接分支指令的指令编码以外的至少一个参数,来确定给定带链接分支指令的特定变体(例如,是分支目标变体还是另一非分支目标变体、或分支目标变体是第一分支目标变体还是第二分支目标变体)。
例如,该至少一个参数可为存储在配置寄存器中的配置参数。这可更容易地编写可在传统系统和较新机器上都正确操作的代码,其中传统系统不具有支持带链接分支指令的分支目标变体的功能性的架构,而较新机器则被编写为对带链接分支指令的分支目标变体进行响应,该分支目标变体具有如上面讨论的不同返回地址设置行为和关于程序流程非顺序地与顺序地传递到分支目标变体的不同行为。通过对带链接分支指令的分支目标变体与非分支目标变体二者使用完全相同的编码,可在两种装置上执行相同的代码。然而,确实支持(一个或多个)分支目标变体的功能性的设备可具有配置寄存器,该配置寄存器具有指定分支目标变体功能性已被激活的参数。例如,可使用配置寄存器,其在传统系统中具有通过硬连线默认设置为固定值的备用位,使得所有设备默认将所有带链接分支指令视为非分支目标变体。但在较新的装置中,配置寄存器的此位可被设置为不同的值,以指示应该将带链接分支指令视为分支目标变体,使得它们可在不需要单独编码的分支目标指令的情况下,合法地由返回分支作为目标。
可以提供能够确定带有链接分支指令的变体的参数的其他示例。在一个示例中,至少一个参数可包括带链接分支指令的指令地址。例如,程序代码的某些部分处的带链接分支指令可被视为分支目标变体,而在程序代码的其他部分中的带链接分支指令可被视为非分支目标变体。这可允许代码的某些部分具有比其他部分更受限的允许的分支目标指令集,这取决于特定代码部分所需的安全级别。
此外,控制带链接分支指令的行为的参数可以是给定目标检查类型的分支指令的指令地址,该类型的分支指令导致程序流程非顺序地传递到给定带分支链接指令。即,导致程序流程传回给定带链接分支指令的返回分支的地址能够确定该带链接分支指令的变体,例如,将该指令视为第一分支目标变体(可由分支类型的第一子集有效地作为目标)还是第二分支目标变体(可以由分支类型的第二子集有效地作为目标)。例如,这在较旧的代码存储在第一地址范围并且较新的代码存储在第二地址范围的情况下可能是有用的。较旧的代码可能对返回分支使用更广泛的分支指令类型集合,使得从较旧代码的地址范围中的分支指令所分支到的带链接分支指令可优选为这样的变体:该变体允许更宽的分支类型子集有效地以该带链接分支指令为目标。另一方面,较新的代码被编译为使用更受限的分支类型子集来执行返回分支;对于这样较新的代码,通过将带链接分支指令解释为另一变体(该变体对于更受限的分支类型子集充当有效分支目标指令),则可改进安全性。因此,通过基于分支(该分支分支到带链接分支指令)的地址来选择变体,这可允许在与传统代码的兼容性与针对较新代码提升的安全性之间进行更好的平衡。
通过该方法,如果在出现给定目标检查类型的分支指令之后,但在处理给定带链接分支指令之前才获得了异常,则可记录信息以帮助确定给定带链接分支指令的变体。例如,该信息可以作为在获得异常时捕获的状态的一部分进行记录,或通过修改异常返回地址的一个或更多个位(例如,地址的最高有效或最低有效部分中的未使用位)进行记录。这意味着当从异常返回时,不会丢失在异常之前触发的分支指令的相关属性,因此可在异常之后的继续处理中确定带链接分支指令的适当行为。
图1示意性地图示出数据处理设备2的示例。应理解,这仅为设备的组件的子集的高级表示,并且设备可包括未图示出的许多其他组件。设备2包括处理电路4,用于响应于由指令解码器6解码的指令而执行数据处理。指令解码器6对从指令缓存8取出的指令进行解码,以生成用于控制处理电路4以执行由指令表示的相应处理操作的控制信号10。处理电路4可包括一个或多个执行单元,用于对存储在寄存器14中的值执行操作,以生成要写回寄存器的结果值。例如,执行单元可包括用于执行算术运算或逻辑运算的计算/逻辑单元(ALU)、用于使用浮点操作数执行运算的浮点单元、和/或用于对包括多个独立数据元素的操作数执行向量运算的向量处理单元。处理电路还包括存储器访问单元(或加载/存储单元)15,用于控制寄存器14与存储器系统之间的数据传输。在该示例中,存储器系统包括指令缓存8、第1级数据缓存16、在数据与指令之间共享的第2级缓存17、以及主存储器18。应理解,其他缓存层级也是可行的-这仅仅是一个示例。存储器管理单元(MMU)20被提供用于提供地址转换功能性以支持由加载/存储单元15触发的存储器访问。MMU具有转换后备缓冲器(TLB)22,用于缓存来自存储在存储器系统16、17、18中的页表的条目的子集。每个页表条目可为对应的地址页面提供地址转换映射,并且还可指定访问控制参数,例如指定页面是只读区域还是可读取并可写入的访问权限,或指定哪个特权级别可访问该页面的访问权限。
图2示出了对带链接分支指令的处理的示例。在图2中,带链接分支指令为寄存器指定(register-specifying)形式的指令,该寄存器指定形式的指令指定了源寄存器Xn,源寄存器Xn指示了指令(在采用该分支时程序流程将要指向该指令)的目标地址。应理解,在其他示例中,目标地址可由在带链接分支指令的指令编码中(而非在寄存器中)指定的立即值来定义。立即值或寄存器值可将目标地址标识为绝对地址、或相对值(该相对值用于相对于带链接分支指令的地址计算出目标地址)。因此,可提供编码目标地址的一系列方式。在图2的示例和随后的示例中,带链接分支指令为无条件分支,该无条件分支无条件地触发程序流程在目标地址处的指令处的非顺序改变。然而,本技术也可应用于条件分支,其中处理电路根据寄存器14中表示的源操作数或条件状态代码(可取决于先前指令的结果)来确定是否采用分支。
与其他类型的分支不同的是,对于带链接分支指令,除了程序流程的改变之外,当采用分支时,寄存器14内提供的链接寄存器还用根据带链接分支指令的地址所确定的返回地址来更新。对于图2所示的带链接分支指令的非分支目标变体,链接寄存器中的返回地址被设置为顺序地接在带链接分支指令后面的下一指令的地址。例如,如果连续指令的地址之间的偏移量为4,则链接寄存器的返回地址被设置为#add1+4,其中#add1为带链接分支指令的地址。当执行带链接分支指令时,则该执行带链接分支指令分支到在目标地址(在此示例中为#add2)处的某一函数代码。当遇到后续的返回分支指令(RET)时,则此触发返回分支到具有被指示为链接寄存器中的返回地址(在此示例中,该返回地址使得处理指向在带链接分支指令BLR后面的添加指令ADD(地址#add1+4处))的地址的指令。尽管图2示出了专用类型的返回分支指令RET,也可以使用用以分支到链接寄存器中的地址(通过将链接寄存器指定为定义分支的目标地址的源寄存器)的更一般形式的分支指令。
图3图示出使用分支目标指令(BTI)来防止旨在破坏返回地址的攻击。例如,当进行嵌套函数调用时,由带链接分支指令设置的返回地址可放置在堆栈上。当返回地址在堆栈上时,攻击者可能会破坏堆栈上的数据,将返回地址更改为与带链接分支指令最初预期的值不同的值,以试图欺骗处理器分支到程序的不同部分(该部分并非编写正在执行的代码的程序员或编译器的本意)。一些分支可以是目标检查分支指令,处理器针对这些目标检查分支指令检查分支的目标地址处的指令是否为分支目标指令(BTI)。这可允许程序员/编译器利用分支目标指令来标记安全分支目标点,因此可将到其他潜在不安全位置的分支检测为错误,从而触发错误处理响应,例如对故障或异常进行信号告知。请注意,带链接分支指令本身和返回分支指令均可被视为目标检查指令,使得在带链接分支指令的目标地址处执行的函数代码的第一个指令和带链接分支指令后面的下一指令(作为用于返回分支的目标指令)二者需为分支目标指令(BTI),以避免错误的处理响应。
此技术可用于防范安全漏洞。然而,如果每个带链接分支指令后面必须跟随分支目标指令,则这将增加程序代码中的指令总数,从而对存储器、缓存和流水线利用率施加更高的要求。
图4图示出使用带链接分支指令(BLRTI)的分支目标变体来帮助降低代码密度。应理解,可通过具有不同的指令编码(例如,不同的指令操作码、或指定特定变体的指令编码的另一参数)来将BLRTI指令与图2的BLR指令区分开,或者可通过一些其他信息片段进行区分,例如存储在配置寄存器中的配置参数、或基于带链接分支指令本身的地址或基于分支到带链接分支指令的分支地址。
带链接分支指令的分支目标变体具有双重功能性。对于控制流程到带链接分支指令的顺序改变,或控制流程从不需要检查目标地址处的指令是否为分支目标指令的分支到带链接分支指令的非顺序改变,带链接分支指令的分支目标变体表现为常规的带链接分支指令,使得如果要采用分支则会触发将控制流程到分支地址处的指令的改变并触发对返回地址的设置。与图2和图3中示出的非分支目标变体不同,返回地址被设置为带链接分支指令的地址#add1,而非后续指令的地址#add1+4。这确保了当采用分支且函数代码完成时,返回分支将分支回带链接分支指令本身而非分支到下一指令。
对于这样的返回分支(它是由数据相关分支或其他分支(针对该分支需要检查目标地址处的指令是否为分支目标指令)触发的、控制流程向带链接分支指令的分支目标变体的非顺序改变),带链接分支指令的分支目标变体被视为分支目标指令BTI。因此,与带链接分支指令相关联的分支被抑制,并且因此处理继续移到带链接分支指令后面的下一顺序指令。因此,通过允许同一指令既充当带链接分支指令又充当标记有效分支点的分支目标指令,这避免了对在带链接分支后面设置显式BTI指令的需要。由于带链接分支指令在程序代码中非常常见,因此该技术在消除大量指令时非常有用——例如,对于某些常见的处理工作负载,预计可消除6%的指令。
图5是示出了由处理器进行的对目标检查分支指令的处理的流程图。在步骤40,目标检查分支指令(并非带链接分支指令)由指令解码器6解码。对带链接分支指令的处理将在下面描述的图6中单独讨论。在一些情况下,所有分支指令可被认为是目标检查类型的分支指令。替代地,只有某些类型的分支可被认为是目标检查分支指令。例如,指令解码器6在分支指令为数据相关分支(其目标地址取决于先前指令指定的数据)的情况下可确定分支指令为目标检查分支。
在步骤42,处理电路4确定或预测是否应该采用分支。通常处理器提配备有分支预测器,用于在实际知晓分支的结果之前预测是否可能采用预测分支,使得在分支的结果被解析之前可取出、解码并执行后续指令。如果分支预测结果不正确,则处理可回溯到分支点,随后以正确的分支结果重新开始。如果确定或预测不采用分支,则在步骤44处理下一顺序指令而不采用分支。另一方面,如果预测或确定采用分支,则在步骤46,指令解码器6控制处理电路4以确定该分支的目标地址处的指令,是否为允许的分支目标指令类型。哪种类型的分支目标指令是允许的可取决于正在执行的特定类型的分支,或可取决于其他参数,例如配置寄存器中可配置处理器的特定行为的配置值。如果该分支的目标地址处的指令并非允许的分支目标指令类型之一,则在步骤48,触发错误处理响应。错误处理响应可对故障或异常进行信号告知,这可触发异常处理程序来处理故障并例如将其报告给用户。另一方面,如果在该分支的目标地址处的指令为允许的分支目标指令类型,则在步骤50处理电路4可允许在该分支之后继续处理而不触发错误处理响应。此方法确保分支只能分支到代码中的某些预定位置,以限制攻击者破坏分支控制数据的范围来以非预期的方式将代码段串在一起。
图6是图示出对带链接分支指令的处理的流程图。在步骤60,指令解码器解码带链接分支指令。在步骤62,指令解码器6确定带链接分支指令是否为分支目标变体。带链接分支指令的变体可根据指令编码来确定,例如,根据指令操作码或编码的另一字段(其指定指示带链接分支指令的特定变体的值)来确定。替代地,指令解码器6可根据存储在寄存器库14中的配置寄存器中的配置值来确定变体。此外,带链接分支指令的变体可取决于带链接分支指令的地址,或取决于分支到带链接分支指令的前一分支的地址。在另一示例中,如果自执行前一分支以来刚发生了异常,则可根据以下项来确定定义前一分支的属性(该属性确定带链接分支指令的变体)的数据:在获得异常时所保存的异常状态信息、或异常返回地址的某些位(指示在异常处理之后处理开始继续的地址)(这些位在获得异常时,基于前一分支的确定后带链接分支指令的变体的属性被修改)。
如果带链接分支指令并非分支目标变体,则在步骤64确定或预测是否要采用分支。如果否,则处理在步骤66进行到顺序地接在带链接分支指令后面的下一指令,而不采用分支。如果采用分支,则在步骤68,指令解码器6控制处理电路4将链接寄存器中的返回地址设置为顺序地接在带链接分支指令后面的下一指令的地址。在步骤70,程序流程被控制以分支到在带链接分支指令的目标地址处的指令。分支目标地址可根据由带链接分支指令指定的寄存器值或根据立即值来确定,并且可被定义为以下二者之一:绝对地址、相对于程序计数器定义的相对地址。
在步骤72,指令解码器确定带链接分支指令是否为目标检查类型的分支指令。如果不是,则在步骤74,简单地允许在分支之后继续进行处理。然而,如果带链接分支指令为目标检查类型的分支指令,则在步骤76,指令解码器6控制处理电路4,以确定该分支的目标地址处的指令是否为允许的分支目标指令类型。如果否,则在步骤78,以与图5的步骤48相同的方式触发错误处理响应,但如果目标地址处的指令为允许的分支目标指令类型,则在步骤74在分支之后继续进行处理。哪些类型的指令被视为带链接分支指令的允许的分支目标指令类型,可能因实施方式的不同而不同。在一些情况下,一般分支目标指令BTI可被视为针对任何分支类型的允许分支目标指令。在其他情况下,可提供可仅被某些类型的分支有效地作为目标的某些分支类型特定的分支目标指令。
如果在步骤62,带链接分支指令为指令的分支目标变体,则在步骤80,确定作为来自目标检查类型的分支指令的分支的结果,控制流程是否已经非顺序地传递到该带链接分支指令。如果不是,则在步骤81,确定或预测是否采用分支。如果不是,则处理在步骤66进行到顺序地接在带链接分支指令后面的指令,而不采用分支。如果采用分支,则在步骤82,将后续返回分支的返回地址设置为等于带链接分支指令本身的地址,并且随后处理进行到步骤70,在此以与上面讨论相同的方式执行步骤70到78。因此,在程序流程到带链接分支指令的分支目标变体的顺序改变,或程序流程从并非目标检查类型的分支到分支目标变体的非顺序改变时,带链接分支行为被调用,但是并非如步骤68那样将返回地址重置为下一指令的地址,而是该返回地址被设置为等于带链接分支指令的地址,以便后续返回分支将处理返回到带链接分支指令,使得该带链接分支指令随后可用作分支目标指令。
如果在步骤80,已确定控制流程从目标检查类型的分支指令(例如数据相关分支,其可包括返回分支指令RET或一般形式的分支指令(其指定作为其定义目标地址的源寄存器的链接寄存器))非顺序地传递到带链接分支指令,则该方法前进到步骤84。在步骤84,指令解码器6或处理电路4确定带链接分支指令的分支目标变体是否为导致控制流程传递到带链接分支指令的分支的允许的分支目标指令类型。如果不是,则在步骤86触发类似于在步骤78触发的错误处理响应。然而,如果带链接分支指令为相关分支的允许的分支目标指令类型,则在步骤88抑制错误处理响应。与带链接分支指令相关联的分支也被抑制,因为该分支已被执行一次,并且相反地,在返回分支之后,处理应当接着带链接分支指令顺序地继续。从而允许顺序地接在带链接分支指令后面的指令的继续处理。在步骤84,可根据导致处理被重新定向到带链接分支指令的特定类型的分支,来确定带链接分支指令是否为允许的分支目标指令类型。例如,带链接分支指令的一种类型的分支目标变体可仅为针对专用返回分支指令RET有效的分支目标指令,而带链接分支指令的另一变体可为针对更一般分支的允许的分支目标指令类型。
图7示意性地图示出可以使用的模拟器实现。虽然先前所描述的实施例是从用于操作支持相关技术的特定处理硬件的装置和方法的方面实施本发明,但也可能提供根据本文中所描述的实施例的指令执行环境,该指令执行环境是通过使用计算机程序来实施的。这样的计算机程序通常称为模拟器,只要它们提供硬件架构的基于软件的实现。模拟器计算机程序的变型包括仿真器、虚拟机器、模型、以及二进制转换器(包括动态二进制转换器)。一般而言,模拟器实现可以运行在支持模拟器程序110的主机处理器130(可选地运行主机操作系统120)上。在一些布置中,可能在硬件与所提供的指令执行环境之间存在着多层模拟,并且/或者存在着提供在相同主机处理器上的多个相异的指令执行环境。历史上,已经需要强力的处理器来提供以合理的速度执行的模拟器实现,但这样的方法在某些情况下可以是有理的,例如在基于相容性或重复使用的理由而有需要运行相对于另一个处理器而言是原生的代码时。例如,模拟器实现可以提供具有未受主机处理器硬件所支持的额外功能性的指令执行环境,或提供一般与不同的硬件架构相关联的指令执行环境。模拟的概述在Robert Bedichek在1990年冬季的USENIX会议第53-63页所发表的“Some EfficientArchitecture Simulation Techniques(一些高效的架构模拟技术)”中给出。
在先前已经针对特定硬件构造或特征描述实施例的情况下,在模拟的实施例中,可以由合适的软件构造或特征提供等效的功能性。例如,可以在模拟的实施例中将特定的电路实施为计算机程序逻辑。类似地,可以在模拟的实施例中将存储器硬件(例如寄存器或缓存)实施为软件数据结构。在先前所描述的实施例中所引用的硬件元件中的一者或更多者存在于主机硬件(例如主机处理器130)上的布置中,一些模拟的实施例可以在合适时利用主机硬件。
模拟器程序110可以被存储在计算机可读存储介质(其可以是非暂态介质)上,且提供对目标代码100(其可以包括应用程序、操作系统、以及超管理器)的程序界面(指令执行环境),该程序界面与正被模拟器程序110建模的硬件架构的应用程序界面相同。因此,可以使用模拟器程序110从指令执行环境内执行目标代码100的程序指令(包括上文所描述的带链接分支指令的分支目标变体),使得实际上不具有上文所讨论的图2的装置的硬件特征的主机计算机130可以模仿这些特征。模拟器程序110可以例如包括指令解码程序逻辑114(例如,一系列的“if-then”语句,用于调用根据在目标代码100中出现的指令的编码而选择的特定处理功能),以及对应于执行由指令解码程序逻辑114选择的功能的模拟器程序110的代码的处理程序逻辑116。因此,处理程序逻辑116可以包括用于提供如上所讨论的带链接分支指令的分支目标变体的功能性的逻辑。
在本申请中,用词“被配置为…”用来意指装置的元件具有能够实现所定义的操作的配置。在此背景脉络下,“配置”意指硬件或软件互连的布置或方式。例如,该装置可以具有提供所定义的操作的专用硬件,或者可以将处理器或其他的处理设备编程为执行功能。“被配置为”并不暗示需要以任何方式改变装置元件以提供所定义的操作。
虽然已经在本文中参考附图详细描述本发明的说明性实施例,但应了解,本发明不限于这些精确的实施例,并且可以在不脱离如由所附权利要求所限定的本发明的范围和精神的情况下由本领域技术人员在这些实施例中进行各种改变和修改。
Claims (16)
1.一种设备,包括:
指令解码器,用以解码指令;以及
处理电路,用以响应于由所述指令解码器解码的指令而执行数据处理;其中:
响应于分支指令,所述指令解码器被配置为:控制所述处理电路以触发程序流程到目标地址处的指令的非顺序改变;
当所述程序流程的非顺序改变响应于带链接分支指令被触发时,所述指令解码器被配置为:控制所述处理电路来为程序流程的后续返回设置返回地址;
当所述程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,所述指令解码器被配置为:当所述目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,控制所述处理电路以触发错误处理响应;并且
对于所述至少一个目标检查类型的分支指令的至少子集,所述至少一个允许的分支目标指令类型包括所述带链接分支指令的分支目标变体。
2.根据权利要求1所述的设备,其中:
响应于非所述分支目标变体的带链接分支指令,所述处理电路被配置为:将所述返回地址设置为顺序地接在所述带链接分支指令后面的下一指令的地址。
3.根据前述任一权利要求所述的设备,其中:
响应于所述带链接分支指令的所述分支目标变体,所述处理电路被配置为:将所述返回地址设置为所述带链接分支指令的所述分支目标变体的地址。
4.根据前述任一权利要求所述的设备,其中:
所述处理电路被配置为:当所述程序流程从所述至少一个目标检查类型的分支指令非顺序地传递到所述带链接分支指令的所述分支目标变体时,抑制与所述带链接分支指令的所述分支目标变体相关联的程序流程的非顺序改变。
5.根据前述任一权利要求所述的设备,其中:
对于第一目标检查类型的分支指令,所述带链接分支指令的所述分支目标变体为所述至少一个允许的分支目标指令类型之一;并且
对于第二目标检查类型的分支指令,所述带链接分支指令的所述分支目标变体并非所述至少一个允许的分支目标指令类型之一。
6.根据前述任一权利要求所述的设备,其中:
对于一个或多个目标检查类型的分支指令的第一子集,所述带链接分支指令的第一分支目标变体为所述至少一个允许的分支目标指令类型之一;并且
对于一个或多个目标检查类型的分支指令的不同于所述第一子集的第二子集,所述带链接分支指令的第二分支目标变体为所述至少一个允许的分支目标指令类型之一。
7.根据前述任一权利要求所述的设备,其中,所述带链接分支指令的所述分支目标变体具有与所述带链接分支指令的另一变体不同的编码,所述另一变体并非所述至少一个允许的分支目标指令类型之一。
8.据权利要求1-6中任一项所述的设备,其中,所述带链接分支指令的所述分支目标变体具有与所述带链接分支指令的另一变体相同的编码,所述另一变体并非所述至少一个允许的分支目标指令类型之一。
9.根据权利要求1-6和8中任一项所述的设备,其中,所述指令解码器和所述处理电路中的至少一者被配置为:基于除给定带链接分支指令的指令编码之外的至少一个参数,来确定所述给定带链接分支指令的变体。
10.根据权利要求9所述的设备,其中,所述至少一个参数包括存储在配置寄存器中的配置参数。
11.根据权利要求9和10中任一项所述的设备,其中,至少所述一个参数包括所述给定带链接分支指令的指令地址。
12.根据权利要求9-11中任一项所述的设备,其中,当程序流程从给定目标检查类型的分支指令非顺序地传递到给定带链接分支指令时,所述至少一个参数包括所述给定目标检查类型的分支指令的指令地址。
13.根据权利要求12所述的设备,其中,响应于所述给定目标检查类型的分支指令与所述给定带链接分支指令之间获得的异常,所述处理电路被配置为记录信息,所述信息用于确定所述给定带链接分支指令的变体。
14.一种数据处理方法,包括:
响应于分支指令,而触发程序流程到目标地址处的指令的非顺序改变;
当所述程序流程的非顺序改变响应于带链接分支指令被触发时,为程序流程的后续返回设置返回地址;并且
当所述程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,当所述目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,触发错误处理响应;
其中,对于所述至少一个目标检查类型的分支指令的至少子集,所述至少一个允许的分支目标指令类型包括所述带链接分支指令的分支目标变体。
15.一种计算机程序,用于控制主机数据处理设备以提供供目标程序代码的指令执行的指令执行环境,所述计算机程序包括:
指令解码程序逻辑,用以解码所述目标程序代码的指令;以及
处理程序逻辑,用以响应于由所述指令解码程序逻辑解码的指令,而执行数据处理;其中:
响应于分支指令,所述指令解码程序逻辑被配置为:控制所述处理程序逻辑以触发程序流程到目标地址处的指令的非顺序改变;
当所述程序流程的非顺序改变响应于带链接分支指令被触发时,所述指令解码程序逻辑被配置为:控制所述处理程序逻辑来为程序流程的后续返回设置返回地址;
当所述程序流程的非顺序改变响应于至少一个目标检查类型的分支指令被触发时,所述指令解码程序逻辑配置为:当所述目标地址处的指令并非至少一个允许的分支目标指令类型的指令时,控制所述处理程序逻辑以触发错误处理响应;并且
对于所述至少一个目标检查类型的分支指令的至少子集,所述至少一个允许的分支目标指令类型包括所述带链接分支指令的分支目标变体。
16.一种存储有根据权利要求15所述的计算机程序的存储介质。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1804231.7 | 2018-03-16 | ||
GB1804231.7A GB2571996B (en) | 2018-03-16 | 2018-03-16 | Branch target variant of branch-with-link instruction |
PCT/GB2019/050379 WO2019175530A1 (en) | 2018-03-16 | 2019-02-13 | Branch target variant of branch-with-link instruction |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111771188A true CN111771188A (zh) | 2020-10-13 |
Family
ID=62017690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980015441.XA Pending CN111771188A (zh) | 2018-03-16 | 2019-02-13 | 带链接分支指令的分支目标变体 |
Country Status (9)
Country | Link |
---|---|
US (1) | US11307856B2 (zh) |
EP (1) | EP3765957B1 (zh) |
JP (1) | JP7377807B2 (zh) |
KR (1) | KR20200128720A (zh) |
CN (1) | CN111771188A (zh) |
GB (1) | GB2571996B (zh) |
IL (1) | IL276809B2 (zh) |
TW (1) | TWI801505B (zh) |
WO (1) | WO2019175530A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112363779A (zh) * | 2020-11-25 | 2021-02-12 | 王志平 | 一种动态链接程序的安全控制方法 |
CN114528025A (zh) * | 2022-02-25 | 2022-05-24 | 深圳市航顺芯片技术研发有限公司 | 指令处理方法、装置、微控制器及可读存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230418608A1 (en) * | 2022-06-23 | 2023-12-28 | Intel Corporation | Implicit memory corruption detection for conditional data types |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050149781A1 (en) * | 2003-12-01 | 2005-07-07 | Oded Lempel | System and method for soft error handling |
CN103593164A (zh) * | 2012-08-15 | 2014-02-19 | 辉达公司 | 用于指令代码转译的定制链接存根 |
CN105144084A (zh) * | 2013-03-15 | 2015-12-09 | 高通股份有限公司 | 提高处理器中返回分支指令的执行速度的方法 |
GB2541714A (en) * | 2015-08-27 | 2017-03-01 | Advanced Risc Mach Ltd | An apparatus and method for controlling instruction execution behaviour |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0729097A1 (en) * | 1995-02-07 | 1996-08-28 | Sun Microsystems, Inc. | Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program |
JP2002259118A (ja) | 2000-12-28 | 2002-09-13 | Matsushita Electric Ind Co Ltd | マイクロプロセッサ及び命令列変換装置 |
US6874081B2 (en) * | 2001-05-17 | 2005-03-29 | Broadcom Corporation | Selection of link and fall-through address using a bit in a branch address for the selection |
US9176737B2 (en) * | 2011-02-07 | 2015-11-03 | Arm Limited | Controlling the execution of adjacent instructions that are dependent upon a same data condition |
US9798873B2 (en) * | 2011-08-04 | 2017-10-24 | Elwha Llc | Processor operable to ensure code integrity |
US20130024676A1 (en) * | 2011-07-19 | 2013-01-24 | Glew Andrew F | Control flow integrity |
US9448796B2 (en) * | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
GB2535514B (en) * | 2015-02-19 | 2021-09-22 | Advanced Risc Mach Ltd | Processor exception handling |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
US10423777B2 (en) * | 2016-04-14 | 2019-09-24 | Endgame, Inc. | Preventing execution of malicious instructions based on address specified in a branch instruction |
-
2018
- 2018-03-16 GB GB1804231.7A patent/GB2571996B/en active Active
-
2019
- 2019-02-13 EP EP19707065.9A patent/EP3765957B1/en active Active
- 2019-02-13 CN CN201980015441.XA patent/CN111771188A/zh active Pending
- 2019-02-13 WO PCT/GB2019/050379 patent/WO2019175530A1/en active Application Filing
- 2019-02-13 US US16/971,755 patent/US11307856B2/en active Active
- 2019-02-13 JP JP2020546090A patent/JP7377807B2/ja active Active
- 2019-02-13 KR KR1020207028590A patent/KR20200128720A/ko not_active Application Discontinuation
- 2019-02-13 IL IL276809A patent/IL276809B2/en unknown
- 2019-02-21 TW TW108105733A patent/TWI801505B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050149781A1 (en) * | 2003-12-01 | 2005-07-07 | Oded Lempel | System and method for soft error handling |
CN103593164A (zh) * | 2012-08-15 | 2014-02-19 | 辉达公司 | 用于指令代码转译的定制链接存根 |
CN105144084A (zh) * | 2013-03-15 | 2015-12-09 | 高通股份有限公司 | 提高处理器中返回分支指令的执行速度的方法 |
GB2541714A (en) * | 2015-08-27 | 2017-03-01 | Advanced Risc Mach Ltd | An apparatus and method for controlling instruction execution behaviour |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112363779A (zh) * | 2020-11-25 | 2021-02-12 | 王志平 | 一种动态链接程序的安全控制方法 |
CN114528025A (zh) * | 2022-02-25 | 2022-05-24 | 深圳市航顺芯片技术研发有限公司 | 指令处理方法、装置、微控制器及可读存储介质 |
CN114528025B (zh) * | 2022-02-25 | 2022-11-15 | 深圳市航顺芯片技术研发有限公司 | 指令处理方法、装置、微控制器及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP7377807B2 (ja) | 2023-11-10 |
EP3765957B1 (en) | 2024-05-08 |
US11307856B2 (en) | 2022-04-19 |
GB201804231D0 (en) | 2018-05-02 |
JP2021517293A (ja) | 2021-07-15 |
GB2571996A (en) | 2019-09-18 |
TW201939272A (zh) | 2019-10-01 |
KR20200128720A (ko) | 2020-11-16 |
EP3765957A1 (en) | 2021-01-20 |
US20210109755A1 (en) | 2021-04-15 |
GB2571996B (en) | 2020-09-09 |
TWI801505B (zh) | 2023-05-11 |
IL276809B2 (en) | 2024-03-01 |
IL276809A (en) | 2020-10-29 |
WO2019175530A1 (en) | 2019-09-19 |
IL276809B1 (en) | 2023-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7377211B2 (ja) | 投機的サイド・チャネル・ヒント命令 | |
JP7128206B2 (ja) | 機能の使用を管理するための装置および方法 | |
EP3765957B1 (en) | Branch target variant of branch-with-link instruction | |
JP7291149B2 (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
GB2577947A (en) | Verifying stack pointer | |
JP2023038361A (ja) | 命令セット内の変更を制御する装置及び方法 | |
JP2023505149A (ja) | ドメイン遷移無効化構成パラメータ | |
JP7349437B2 (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
JP7269942B2 (ja) | 複数ガード・タグ設定命令 | |
KR20230101826A (ko) | 캐퍼빌리티들을 사용하여 메모리에 대한 액세스를 제약하기 위한 기술 | |
JP7369720B2 (ja) | アクションをトリガするための装置及び方法 | |
US20230010863A1 (en) | Intermodal calling branch instruction | |
WO2024028565A1 (en) | No-operation-compatible instruction | |
CN117222990A (zh) | 用于使用能力约束对存储器的访问的技术 | |
TW202319913A (zh) | 用於使用能力限制對記憶體存取之技術 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |