CN113485777A - 用于二进制文件转换系统的影子堆栈操纵的技术 - Google Patents
用于二进制文件转换系统的影子堆栈操纵的技术 Download PDFInfo
- Publication number
- CN113485777A CN113485777A CN202110941960.8A CN202110941960A CN113485777A CN 113485777 A CN113485777 A CN 113485777A CN 202110941960 A CN202110941960 A CN 202110941960A CN 113485777 A CN113485777 A CN 113485777A
- Authority
- CN
- China
- Prior art keywords
- translated
- computing device
- local
- return address
- response
- 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
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000013519 translation Methods 0.000 title claims description 19
- 230000004044 response Effects 0.000 claims description 99
- 238000013507 mapping Methods 0.000 claims description 13
- 238000006243 chemical reaction Methods 0.000 claims description 11
- 230000009191 jumping Effects 0.000 claims description 6
- 238000004891 communication Methods 0.000 description 9
- 238000007726 management method Methods 0.000 description 9
- 238000010200 validation analysis Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003068 static effect Effects 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/451—Stack data
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
用于影子堆栈管理的技术,包括计算设备,其在执行已转换二进制文件中的已转换调用例程时,将本地返回地址推入到计算设备的本地堆栈,将恒定偏移量加到计算设备的堆栈指针,对已转换调用目标执行本地调用指令,以及在执行本地调用指令之后,从堆栈指针中减去恒定偏移量。执行本地调用指令将已转换返回地址推入到计算设备的影子堆栈。计算设备可以将影子堆栈的两个或更多个虚拟存储器页映射到单个物理存储器页。计算设备可以执行已转换返回例程,其从本地堆栈弹出本地返回地址,将恒定偏移量加到堆栈指针,以及执行本地返回指令。描述并要求保护其他实施例。
Description
本申请是2016年5月24日提交的申请号为201680030120.3的同名专利申请的分案申请。
相关申请的交叉引用
本申请要求享有于2015年6月24日提交的、题为“TECHNOLOGIES FOR SHADOWSTACK MANIPULATION FOR BINARY TRANSLATION SYSTEMS”的美国实用新型专利申请序列号14/748,363的优先权。
背景技术
典型的计算设备支持执行包括针对特定指令集架构(ISA)的指令的二进制代码。二进制文件转换系统基于原始或本地二进制文件来生成已转换二进制文件。二进制文件转换可以用于在支持不同ISA的计算设备上执行针对特定ISA的二进制文件,而无需重新编译原始二进制文件。另外或可替代地,可以使用二进制文件转换来利用受到特定计算设备支持但未包括在原始二进制文件中的新指令或其他特征,以通过动态优化来提高性能,以便强制执行安全策略或用于其它目的。
大多数处理器支持本地调用和返回指令,其用于执行子例程调用和返回,并且在编译后的二进制文件中非常常见。许多处理器包括用于优化调用和返回的专用硬件,例如,基于堆栈的返回预测硬件(例如,返回堆栈缓冲器)。许多二进制文件转换系统不能直接使用本地调用和返回指令而不破坏兼容性,并且因此模仿具有跳转指令的调用和返回指令。然而,使用跳转指令可能不会利用处理器的经优化的调用/返回硬件。为了允许使用本地调用和返回指令,一些二进制文件转换系统在存储器中维护影子堆栈。然而,典型的影子堆栈实现方式需要若干昂贵的存储器加载和/或存储指令,以在本地堆栈与影子堆栈之间进行切换。例如,已转换调用例程的典型实现方式可以执行四个加载/存储操作:将堆栈指针的值存储到本地堆栈保存区域,从影子堆栈保存区域加载堆栈指针的值,执行调用指令,将堆栈指针的新值存储到影子堆栈保存区域,以及从本地堆栈保存区域加载堆栈指针的值。
附图说明
在附图中通过示例的方式而非通过限制的方式示出了本文描述的概念。为了简单且清楚地进行说明,图中所示的元素不一定按比例绘制。在认为适当处,附图标记在图中重复,以指示对应的或类似的元素。
图1是用于影子堆栈操纵的计算设备的至少一个实施例的简化框图;
图2是可以由图1的计算设备建立的环境的至少一个实施例的简化框图;
图3是可以由图1和图2的计算设备执行的用于影子堆栈操纵的方法的至少一个实施例的简化流程图;
图4是示出可以由图1和图2的计算设备建立的存储器管理布局的示意图;以及
图5是可以由图1和图2的计算设备执行的用于已转换返回地址验证的方法的至少一个实施例的简化流程图。
具体实施方式
虽然本公开的概念易受各种修改和替代形式的影响,但是其特定实施例已经通过示例的方式在附图中示出,并且将在本文中进行详细描述。然而,应该理解,并不旨在将本公开的概念限制为所公开的特定形式,而是相反,意图在于覆盖与本公开和所附权利要求一致的所有修改、等同内容以及替代方案。
说明书中提及“一个实施例”、“实施例”、“说明性实施例”等指示所描述的实施例可以包括特定特征、结构、或特性,但是每个实施例可以必须或可以不一定包括该特定特征、结构、或特性。此外,这种短语不一定指相同的实施例。此外,当结合实施例描述特定特征、结构、或特性时,无论是否明确地描述,实施例在本领域技术人员知道结合其他实施例来实现这样的特征、结构、或特性的情况下提交。另外,应该理解,包括在以“A、B以及C中的至少一个”形式的列表中的项可以表示(A);(B);(C);(A和B);(A和C);(B和C);或(A、B以及C)。类似地,以“A、B、或C中的至少一个”的形式列出的项可以表示(A);(B);(C);(A和B);(A和C);(B和C);或(A、B以及C)。
在一些情况下,所公开的实施例可以以硬件、固件、软件、或其任何组合来实现。所公开的实施例还可以实现为指令,该指令由一种或多种暂时性或非暂时性机器可读(例如,计算机可读)存储介质携带或存储在其上,指令可以由一个或多个处理器读取并执行。机器可读存储介质可以体现为任何存储设备、机制、或用于存储或传输机器可读形式的信息的其他物理结构(例如,易失性或非易失性存储器、介质盘、或其他介质设备)。
在附图中,可以以特定的布置和/或次序来示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或次序。相反,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或次序来布置。另外,在特定附图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征,或者这些特征可以与其他特征组合。
现在参考图1,在说明性实施例中,用于影子堆栈操纵的计算设备100包括二进制文件转换系统。在使用中,如下面更详细描述的,计算设备100基于本地二进制文件来生成并执行已转换二进制文件。本地二进制文件包括一个或多个调用和/或返回指令,并且已转换二进制文件分别包括对应的已转换调用例程和已转换返回例程。计算设备100使用在虚拟存储器中引用影子堆栈的本地调用和返回指令来执行已转换调用和返回。影子堆栈位于虚拟存储器中,离计算设备100的本地堆栈恒定偏移量处。在一些实施例中,计算设备100可以将影子堆栈的虚拟存储器页映射到减少数量的物理页。计算设备100可以通过避免执行若干存储器加载和存储指令来改进二进制文件转换系统中的调用和返回例程的性能。另外,计算设备100可以通过将影子堆栈映射到减少数量的物理存储器页来减少存储器消耗。将影子堆栈映射到减少数量的物理页还可以通过改进影子堆栈存储器引用的高速缓存命中率来改进二进制文件转换性能。
计算设备100可以体现为能够执行本文描述的功能的任何类型的计算或计算机设备,包括但不限于计算机、台式计算机、工作站、膝上型计算机、笔记本计算机、平板计算机、移动计算设备、可穿戴计算设备、网络装置、web装置、分布式计算系统、基于处理器的系统、和/或消费者电子设备。如图1所示,计算设备100说明性地包括处理器120、输入/输出子系统122、存储器124、数据存储设备126以及通信电路128。当然,在其他实施例中,计算设备100可以包括其他或附加的组件,例如,通常在台式计算机中找到的那些组件(例如,各种输入/输出设备)。另外,在一些实施例中,说明性组件中的一个或多个可以并入另一组件或以其他方式形成另一组件的一部分。例如,在一些实施例中,存储器124或其部分可以并入处理器120中。
处理器120可以体现为能够执行本文描述的功能的任何类型的处理器。处理器120可以体现为(多个)单核或多核处理器、数字信号处理器、微控制器、或者其他处理器或处理/控制电路。类似地,存储器124可以体现为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储装置。在操作中,存储器124可以存储在计算设备100的操作期间使用的各种数据和软件,例如,操作系统、应用、程序、库以及驱动程序。存储器124经由I/O子系统122可通信地耦合到处理器120,该I/O子系统122可以体现为用于促进关于处理器120、存储器124以及计算设备100的其他组件的输入/输出操作的电路和/或组件。例如,I/O子系统122可以体现为或以其他方式包括存储器控制器中心、输入/输出控制中心、固件设备、通信链路(即,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等),和/或用于促进输入/输出操作的其他组件和子系统。在一些实施例中,I/O子系统122可以形成片上系统(SoC)的一部分,并且与处理器120、存储器124以及计算设备100的其他组件一起被并入单个集成电路芯片。
数据存储设备126可以体现为被配置用于数据的短期或长期存储的任何类型的设备或多个设备,例如,存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器、或其他数据存储设备。数据存储设备126可以存储二进制可执行文件、本地二进制文件、或用于对计算机程序进行编码的其他二进制数据。
计算设备100的通信电路128可以体现为能够通过网络实现计算设备100与其他远程设备之间的通信的任何通信电路、设备、或其集合。通信电路128可以被配置为使用任何一种或多种通信技术(例如,有线或无线通信)和相关联的协议(例如,以太网、WiMAX等)来实现这种通信。
在一些实施例中,计算设备100还可以包括一个或多个外围设备130。外围设备130可以包括任何数量的附加输入/输出设备、接口设备、和/或其他外围设备。例如,外围设备130可以包括典型的输入/输出设备,例如,显示器、键盘、鼠标、触摸屏、和/或其他外围设备。
现在参考图2,在说明性实施例中,计算设备100在操作期间建立环境200。说明性环境200包括二进制文件转换模块202、调用模块204、返回模块206以及存储器管理模块208。环境200的各种模块可以体现为硬件、固件、软件、或其组合。例如,环境200的各种模块、逻辑以及其他组件可以形成处理器120或计算设备100的其他硬件组件的一部分,或以其他方式由处理器120或计算设备100的其他硬件组件来建立。因此,在一些实施例中,环境200的模块中的任何一个或多个模块可以体现为电子设备的电路或集合(例如,二进制文件转换电路、调用电路等)。
二进制文件转换模块202被配置为处理本地二进制文件210,并且基于本地二进制文件210来生成并执行已转换二进制文件212。已转换二进制文件212可以包括一个或多个已转换调用例程和已转换返回例程,其分别对应于本地二进制文件210的本地调用指令和本地返回指令。每个已转换调用例程与已转换二进制文件212内的已转换调用目标相关联,并且每个已转换调用目标与对应的本地调用指令的本地调用目标相对应。在一些实施例中,如下面进一步描述的,二进制文件转换模块202可以被配置为检查计算设备100的堆栈指针是否超出与影子堆栈相关联的预先分配的虚拟地址范围。
调用模块204被配置为执行已转换二进制文件212的调用例程。特别地,调用模块204被配置为将本地返回地址推入到计算设备100的本地堆栈,响应于将本地返回地址推入到本地堆栈而将恒定偏移量加到计算设备100的堆栈指针,以及响应于将恒定偏移量加到堆栈指针而对已转换调用目标执行本地调用指令。堆栈指针可以体现为处理器120的架构地定义的寄存器,例如,RSP或ESP。执行本地调用指令使得处理器120将已转换返回地址推入到计算设备100的影子堆栈。调用模块204还被配置为响应于本地调用指令的执行而从堆栈指针中减去恒定偏移量。
返回模块206被配置为执行已转换二进制文件212的返回例程。特别地,返回模块206被配置为从本地堆栈弹出本地返回地址,响应于从本地堆栈弹出本地返回地址而将恒定偏移量加到堆栈指针,以及响应于将恒定偏移量加到堆栈指针而执行本地返回指令。执行本地返回指令使得处理器120从影子堆栈弹出已转换返回地址并跳转到该已转换返回地址。返回模块206还被配置为响应于本地返回指令的执行而从堆栈指针中减去恒定偏移量。另外,在一些实施例中,返回模块206可以被配置为响应于本地返回指令的执行而对已转换返回地址进行确认。对已转换返回地址进行确认验证已转换返回地址与先前从本地堆栈弹出的本地返回地址相对应。
存储器管理模块208被配置为将影子堆栈的多个虚拟存储器页映射到较少数量的物理存储器页。例如,影子堆栈的所有虚拟存储器页都可以映射到单个物理存储器页。可以通过如上面描述的对已转换返回地址进行确认来对影子堆栈条目之间的冲突进行检测和校正。
现在参考图3,在使用中,计算设备100可以执行用于影子堆栈操纵的方法300。方法300从框302开始,在框302中,计算设备100可以将影子堆栈的一系列多个虚拟存储器页映射到减少数量的物理页。例如,计算设备100可以将与影子堆栈相关联的所有虚拟页映射到单个物理页。通过将多个虚拟页映射到单个物理页,计算设备100可以减少存储影子堆栈所需的物理存储器124的量。当然,将多个虚拟页映射到单个物理页会引入冲突的风险;也即,影子堆栈中的多个条目将占用相同的物理存储器位置的风险。然而,影子堆栈通常被数据稀疏地填充,并且冲突风险可能较低。可以通过下面结合图5的框326描述的返回地址确认过程来检测和/或校正冲突。另外,虽然被描述为映射虚拟存储器页作为方法300的一部分,但是应当理解,计算设备100可以在另一时间或者作为另一过程的一部分来映射虚拟存储器页。例如,可以由计算设备100的操作系统响应于页错误或者在任何其他适当的时间来映射虚拟存储器页。计算设备100可以在将任何数据存储在影子堆栈中之前映射虚拟存储器页,以防止潜在的数据丢失。
在框304中,计算设备100执行来自已转换二进制文件212的已转换代码。如上面描述的,计算设备100可以将本地二进制文件210的部分或全部转换成已转换二进制文件212,并且然后执行来自已转换二进制文件212的代码。已转换代码可以包括适合于在处理器120上执行的二进制代码,例如,适用于处理器120的特定处理器架构的二进制代码,或者使用专用处理器指令或受到处理器120支持的其他特征的二进制代码。
在框306中,计算设备100确定已转换调用操作是否正在被执行。计算设备100可以使用任何方法来确定调用操作是否正在执行。例如,在一些实施例中,计算设备100可以在转换时间确定调用操作应当被执行,并且然后在调用操作的位置处将调用例程或其他指令包括在已转换二进制文件212中。在一些实施例中,计算设备100可以动态地检测调用例程。如果调用操作未被执行,则方法300向前跳到框316,在下面进行描述。如果调用操作正在被执行,则方法300前进到框308。
在框308中,计算设备100将用于已转换调用操作的本地返回地址推入到计算设备100的本地堆栈。本地返回地址是将通过本地二进制文件210的对应调用指令推入到本地堆栈的返回地址。例如,返回地址可以是本地二进制文件210中的调用指令之后的下一指令的地址(例如,处理器120的指令指针寄存器的下一顺序值)。计算设备100可以在转换时间确定本地返回地址。计算设备100可以通过在由处理器120的堆栈指针寄存器标识的存储器位置处将本地返回地址的值写入到存储器中来将本地返回地址推入到本地堆栈,例如,通过利用处理器120执行PUSH指令。
在框310中,计算设备100将恒定偏移量加到处理器120的堆栈指针寄存器(例如,RSP或ESP)。在加上恒定偏移量之后,堆栈指针寄存器指向存储器中的对应于影子堆栈的位置。恒定偏移量可以体现为表示本地堆栈与虚拟存储器中的影子堆栈之间的距离的任何恒定整数值,并且可以基于计算设备100的操作系统、应用、或其他可执行代码所使用的虚拟存储器布局来进行选择。计算设备100可以使用算术指令将恒定偏移量加到堆栈指针,而不需要进行附加的存储器加载或存储(例如,通过使用包括恒定偏移量作为立即值的ADD指令)。在一些实施例中,计算设备100可以执行堆栈界限检查操作,以确保堆栈指针的新值不超出影子堆栈的预先分配的虚拟地址范围。
在框312中,计算设备100对已转换调用目标的地址执行本地调用指令。因为处理器120的堆栈指针寄存器已经更新为指向影子堆栈,所以执行本地调用指令使得处理器120将已转换返回地址推入到影子堆栈。已转换返回地址与已转换二进制文件212中的在本地调用指令之后的下一指令(例如,处理器120的指令指针寄存器的下一顺序值)相对应。
在执行调用指令之后,处理器120在框314中从已转换调用目标继续执行方法300,在框314中计算设备100从堆栈指针寄存器(例如,RSP或ESP)减去恒定偏移量。因此,在减去恒定偏移量之后,堆栈指针寄存器指向计算设备100的本地堆栈。计算设备100可以使用算术指令从堆栈指针中减去恒定偏移量,而不需要进行附加的存储器加载或存储(例如,通过使用包括恒定偏移量作为立即值的SUB指令)。在恢复本地堆栈之后,方法300进行到框316,在框316中计算设备100可以继续执行已转换二进制文件212,如下面进一步描述的。
现在参考图4,示意图400示出了可以由计算设备100建立的存储器管理布局的一个潜在实施例。如所示出的,计算设备100建立虚拟存储器空间402和物理存储器空间404。虚拟存储器空间402包括本地堆栈406。如所示出的,本地堆栈406包括若干虚拟页408。在使用中,处理器120的堆栈指针寄存器可以包括本地堆栈406的顶部的地址410。
计算设备100维护一组页映射412,以在虚拟存储器空间402与物理存储器空间404之间映射存储器页。页映射412可以体现为例如由计算设备100的操作系统维护的页表中的页表条目。如所示出的,本地堆栈406的虚拟页408中的每个虚拟页映射到物理存储器空间404中的物理页414。本地堆栈406可以在虚拟存储器空间402和物理存储器空间404二者中占用相同的存储器的量。
如图4所示,虚拟存储器空间402还包括影子堆栈416。影子堆栈位于虚拟存储器空间402中,离本地堆栈406恒定偏移量418处。因此,将恒定偏移量418加到本地堆栈406的顶部的地址410会得到影子堆栈416的顶部的地址420。因此,影子堆栈416可以占用与本地堆栈406相同的虚拟存储器空间的量。图示地,影子堆栈416的虚拟页408中的每个虚拟页映射到物理存储器空间404中的单个物理页414。因此,与虚拟存储器空间402相比,影子堆栈416在物理存储器空间404中占用更少的存储器。
再次参考图3,在框316中,计算设备100确定已转换返回操作是否正在被执行。计算设备100可以使用任何方法来确定返回操作是否正在执行。例如,在一些实施例中,计算设备100可以在转换时间确定返回操作应当被执行,并且然后在返回操作的位置处将返回例程或其他指令包括在已转换二进制文件212中。在一些实施例中,计算设备100可以动态地检测返回例程。如果返回操作未被执行,则方法300循环回到框304,以继续执行已转换二进制文件212。如果返回操作正在被执行,则方法300前进到框318。
在框318中,计算设备100将本地返回地址从本地堆栈弹出到处理器120的暂存寄存器中。如上面结合框306所描述的,先前可能已经通过已转换调用例程将本地返回地址推入到本地堆栈。计算设备100可以通过在由处理器120的堆栈指针寄存器标识的存储器位置处从存储器读取本地返回地址的值(例如,通过利用处理器120执行POP指令),来从本地堆栈弹出本地返回地址。暂存寄存器可以体现为可由处理器120访问的任何暂时存储位置。为了改进性能,暂存寄存器内容可以是可访问的,而不执行附加的存储器加载和/或存储。
在框320中,计算设备100将恒定偏移量加到处理器120的堆栈指针寄存器(例如,RSP或ESP)。计算设备100加上与上面结合框308描述的相同的偏移量。因此,在加上恒定偏移量之后,堆栈指针指向存储器中的对应于影子堆栈的位置。计算设备100可以使用算术指令将恒定偏移量加到堆栈指针,而不需要进行附加的存储器加载或存储(例如,通过使用包括恒定偏移量作为立即值的ADD指令)。
在框322中,计算设备100执行本地返回指令。因为处理器120的堆栈指针寄存器已经更新为指向影子堆栈,所以执行本地返回指令使得处理器120从影子堆栈弹出已转换返回地址。在弹出已转换返回地址之后,执行本地返回指令使得处理器120跳转到已转换返回地址。
在执行本地返回指令之后,处理器120在框324中继续执行方法300,在框324中计算设备100从堆栈指针寄存器(例如,RSP或ESP)减去恒定偏移量。因此,在减去恒定偏移量之后,堆栈指针寄存器指向计算设备100的本地堆栈。计算设备100可以使用算术指令从堆栈指针中减去恒定偏移量,而不需要进行附加的存储器加载或存储(例如,通过使用包括恒定偏移量作为立即值的SUB指令)。
在框326中,计算设备100对已转换返回地址进行确认。如上面描述的,在一些实施例中,将影子堆栈的多个虚拟页映射到单个物理页可能导致影子堆栈条目之间的冲突。如果存在冲突,则执行本地返回指令可能使得计算设备100跳转到不正确的已转换返回地址。对已转换返回地址进行确认确定已转换返回地址是否与如上面结合框318所描述的从本地堆栈弹出并存储在暂存寄存器中的本地返回地址相匹配。如果已转换返回地址不匹配,则计算设备100跳转到正确的已转换返回地址。计算设备100可以使用由二进制文件转换系统提供的任何适当的返回目标确认机制。下面结合图5描述了用于返回目标确认的方法的一个潜在实施例。作为另一示例,计算设备100可以使用在国际专利申请公开号WO 2014/189510 A1中描述的转换时间分支目标确认技术。在对已转换返回地址进行确认之后,方法300循环回到框304,以继续执行已转换二进制文件212。
现在参考图5,在使用中,计算设备100可以执行用于已转换返回地址确认的方法500。方法500从框502开始,在框502中计算设备100确定与当前已转换返回地址相关联的临时本地返回地址。当前已转换返回地址与如上面结合图3的框324所描述的从影子堆栈弹出的返回地址相对应。例如,可以基于处理器120的指令指针寄存器的内容来确定当前已转换返回地址。临时本地返回地址是本地二进制文件210内的与已转换返回地址相对应的地址。已转换返回地址与本地返回地址之间的关系可以由计算设备100在转换时间确定。
在框504中,计算设备100将临时本地返回地址与暂存寄存器的内容进行比较。如上面结合图3的框318所描述的,在已转换调用操作开始时,暂存寄存器存储从本地堆栈弹出的数据。在框506中,计算设备100确定临时本地返回地址是否与暂存寄存器的内容相匹配。如果是,则已转换返回地址已经被成功确认,并且方法500完成。如上面结合图3所描述的,计算设备100可以从已转换返回地址开始继续执行已转换二进制文件212。如果临时本地返回地址与暂存寄存器的内容不匹配,则方法500前进到框508。
在框508中,计算设备100基于暂存寄存器的内容来查找或创建已转换返回地址。计算设备100使用二进制文件转换系统在已转换二进制文件212中查找与存储在暂存寄存器中的本地返回地址相对应的已转换返回地址。如果不存在这样的已转换返回地址,则计算设备100可以在已转换二进制文件212中生成适当的已转换代码。在框510中,计算设备100跳转到如上面结合框508所描述地确定的经校正的已转换返回地址。在跳转到已转换返回地址之后,已转换返回地址已经被成功确认,并且方法500完成。如上面结合图3所描述的,计算设备100可以从经校正的已转换返回地址开始继续执行已转换二进制文件212。
示例
下面提供本文公开的技术的说明性示例。技术的实施例可以包括下面描述的示例中的任何一个或多个以及其任何组合。
示例1包括一种用于影子堆栈管理的计算设备,该计算设备包括:调用模块,其用于:将本地返回地址推入到计算设备的本地堆栈;响应于本地返回地址推入到本地堆栈,而将恒定偏移量加到计算设备的堆栈指针;响应于恒定偏移量加到堆栈指针,而对已转换调用目标执行本地调用指令;以及响响应于本地调用指令的执行,而从堆栈指针中减去恒定偏移量;以及处理器,其用于响应于本地调用指令的执行而将已转换返回地址推入到计算设备的影子堆栈。
示例2包括示例1的主题,并且还包括存储器管理模块,其用于:将影子堆栈的多个虚拟存储器页映射到第一物理存储器。
示例3包括示例1和2中任一项的主题,并且还包括:二进制文件转换模块,用于执行已转换二进制文件的已转换调用例程,其中,已转换调用例程与本地二进制文件的本地调用指令相对应,并且已转换调用目标与本地调用指令的本地调用目标相对应;其中,推入本地返回地址包括响应于已转换调用例程的执行而推入本地返回地址。
示例4包括示例1-3中任一项的主题,并且其中,二进制文件转换模块还用于:根据本地二进制文件来生成已转换二进制文件,其中,已转换二进制文件包括已转换调用例程;以及执行已转换二进制文件;其中,执行已转换调用例程包括响应于已转换二进制文件的执行而执行已转换调用例程。
示例5包括示例1-4中任一项的主题,并且还包括二进制文件转换模块,其用于响应于恒定偏移量加到堆栈指针而检查堆栈指针是否超出与影子堆栈相关联的预先分配的虚拟地址范围。
示例6包括示例1-5中任一项的主题,并且还包括:返回模块,其用于:响应于从堆栈指针中减去恒定偏移量,而从计算设备的本地堆栈弹出本地返回地址;响应于本地返回地址从本地堆栈弹出,而将恒定偏移量加到堆栈指针;响应于恒定偏移量加到堆栈指针而执行本地返回指令,恒定偏移量加到堆栈指针是响应于本地返回地址从本地堆栈弹出的;以及响应于本地返回指令的执行,而从堆栈指针中减去恒定偏移量;其中,处理器还用于响应于本地返回指令的执行而从影子堆栈弹出已转换返回地址。
示例7包括示例1-6中任一项的主题,并且还包括:存储器管理模块用于将影子堆栈的多个虚拟存储器页映射到第一物理存储器页;其中,返回模块还用于响应于本地返回指令的执行而对已转换返回地址进行确认。
示例8包括示例1-7中任一项的主题,并且其中,从本地堆栈弹出本地返回地址包括:将本地返回地址弹出到计算设备的第一寄存器中;并且对已转换返回地址进行确认包括:确定与已转换返回地址相关联的临时本地返回地址;确定临时本地返回地址是否与计算设备的第一寄存器相匹配;响应于临时本地返回地址与第一寄存器不匹配的确定,而基于第一寄存器的内容来确定经校正的已转换返回地址;以及响应于经校正的已转换返回地址的确定,而跳转到经校正的已转换返回地址。
示例9包括示例1-8中任一项的主题,并且其中,确定经校正的已转换返回地址包括:确定已转换二进制文件是否包括由暂存寄存器的内容表示的本地返回地址的已转换返回地址;以及响应于已转换二进制文件不包括由暂存寄存器的内容表示的本地返回地址的已转换返回地址的确定,而根据本地二进制文件来生成包括已转换返回地址的已转换二进制文件。
示例10包括示例1-9中任一项的主题,并且还包括:二进制文件转换模块用于执行已转换二进制文件的已转换返回例程,其中,已转换返回例程与本地二进制文件的本地返回指令相对应;其中,弹出本地返回地址包括响应于已转换返回例程的执行而弹出本地返回地址。
示例11包括示例1-10中任一项的主题,并且还包括:二进制文件转换模块用于:(i)根据本地二进制文件来生成已转换二进制文件,其中,已转换二进制文件包括已转换返回例程,以及(ii)执行已转换二进制文件;其中,执行已转换返回例程包括响应于已转换二进制文件的执行而执行已转换返回例程。
示例12包括一种用于影子堆栈管理的方法,该方法包括:由计算设备将本地返回地址推入到计算设备的本地堆栈;由计算设备响应于将本地返回地址推入到本地堆栈而将恒定偏移量加到计算设备的堆栈指针;由计算设备响应于将恒定偏移量加到堆栈指针而对已转换调用目标执行本地调用指令,其中,执行本地调用指令包括将已转换返回地址推入到计算设备的影子堆栈;以及由计算设备响应于执行本地调用指令而从堆栈指针中减去恒定偏移量。
示例13包括示例12的主题,并且还包括:由计算设备将影子堆栈的多个虚拟存储器页映射到第一物理存储器页。
示例14包括示例12和13中任一项的主题,并且还包括:由计算设备执行已转换二进制文件的已转换调用例程,其中,已转换调用例程与本地二进制文件的本地调用指令相对应,并且已转换调用目标与本地调用指令的本地调用目标相对应;其中,推入本地返回地址包括响应于执行已转换调用例程而推入本地返回地址。
示例15包括示例12-14中任一项的主题,并且还包括:由计算设备根据本地二进制文件来生成已转换二进制文件,其中,已转换二进制文件包括已转换调用例程;以及由计算设备执行已转换二进制文件;其中,执行已转换调用例程包括响应于执行已转换二进制文件而执行已转换调用例程。
示例16包括示例12-15中任一项的主题,并且还包括:由计算设备响应于将恒定偏移量加到堆栈指针而检查堆栈指针是否超出与影子堆栈相关联的预先分配的虚拟地址范围。
示例17包括示例12-16中任一项的主题,并且还包括:由计算设备响应于从堆栈指针中减去恒定偏移量而从计算设备的本地堆栈弹出本地返回地址;由计算设备响应于从本地堆栈弹出本地返回地址而将恒定偏移量加到堆栈指针;由计算设备响应于将恒定偏移量加到堆栈指针而执行本地返回指令,将恒定偏移量加到堆栈指针是响应于从本地堆栈弹出本地返回地址的,其中,执行本地返回指令包括从影子堆栈弹出已转换返回地址;以及由计算设备响应于执行本地返回指令而从堆栈指针中减去恒定偏移量。
示例18包括示例12-17中任一项的主题,并且还包括:由计算设备将影子堆栈的多个虚拟存储器页映射到第一物理存储器页;以及由计算设备响应于执行本地返回指令而对已转换返回地址进行确认。
示例19包括示例12-18中任一项的主题,并且其中,从本地堆栈弹出本地返回地址包括:将本地返回地址弹出到计算设备的第一寄存器中;并且对已转换返回地址进行确认包括:确定与已转换返回地址相关联的临时本地返回地址;确定临时本地返回地址是否与计算设备的第一寄存器相匹配;响应于确定临时本地返回地址与第一寄存器不匹配,而基于第一寄存器的内容来确定经校正的已转换返回地址;以及响应于确定经校正的已转换返回地址,而跳转到经校正的已转换返回地址。
示例20包括示例12-19中任一项的主题,并且其中,确定经校正的已转换返回地址包括:确定已转换二进制文件是否包括由暂存寄存器的内容表示的本地返回地址的已转换返回地址;以及响应于确定已转换二进制文件不包括由暂存寄存器的内容表示的本地返回地址的已转换返回地址,而根据本地二进制文件来生成包括已转换返回地址的已转换二进制文件。
示例21包括示例12-20中任一项的主题,并且还包括:由计算设备执行已转换二进制文件的已转换返回例程,其中,已转换返回例程与本地二进制文件的本地返回指令相对应;其中,弹出本地返回地址包括响应于执行已转换返回例程而弹出本地返回地址。
示例22包括示例12-21中任一项的主题,并且还包括:由计算设备根据本地二进制文件来生成已转换二进制文件,其中,已转换二进制文件包括已转换返回例程;以及由计算设备执行已转换二进制文件;其中,执行已转换返回例程包括响应于执行已转换二进制文件而执行已转换返回例程。
示例23包括一种计算设备,包括:处理器;以及其中存储有多个指令的存储器,该指令在由处理器执行时使得计算设备执行示例12-22中任一项的方法。
示例24包括一种或多种机器可读存储介质,其包括存储在其上的多个指令,该多个指令响应于被执行而使得计算设备执行示例12-22中任一项的方法。
示例25包括一种计算设备,其包括用于执行示例12-22中任一项的方法的模块。
示例26包括一种用于影子堆栈管理的计算设备,该计算设备包括:用于将本地返回地址推入到计算设备的本地堆栈的模块;用于响应于将本地返回地址推入到本地堆栈而将恒定偏移量加到计算设备的堆栈指针的模块;用于响应于将恒定偏移量加到堆栈指针而对已转换调用目标执行本地调用指令的模块,其中,执行本地调用指令包括将已转换返回地址推入到计算设备的影子堆栈;以及用于响应于执行本地调用指令而从堆栈指针中减去恒定偏移量的模块。
示例27包括示例26的主题,并且还包括:用于将影子堆栈的多个虚拟存储器页映射到第一物理存储器页的模块。
示例28包括示例26和27中任一项的主题,并且还包括:用于执行已转换二进制文件的已转换调用例程的模块,其中,已转换调用例程与本地二进制文件的本地调用指令相对应,并且已转换调用目标与本地调用指令的本地调用目标相对应;其中,用于推入本地返回地址的模块包括用于响应于执行已转换调用例程而推入本地返回地址的模块。
示例29包括示例26-28中任一项的主题,并且还包括:用于根据本地二进制文件来生成已转换二进制文件的模块,其中,已转换二进制文件包括已转换调用例程;以及用于执行已转换二进制文件的模块;其中。用于执行已转换调用例程的模块包括用于响应于执行已转换二进制文件而执行已转换调用例程的模块。
示例30包括示例26-29中任一项的主题,并且还包括:用于响应于将恒定偏移量加到堆栈指针而检查堆栈指针是否超出与影子堆栈相关联的预先分配的虚拟地址范围的模块。
示例31包括示例26-30中任一项的主题,并且还包括:用于响应于从堆栈指针中减去恒定偏移量而从计算设备的本地堆栈弹出本地返回地址的模块;用于响应于从本地堆栈弹出本地返回地址而将恒定偏移量加到堆栈指针的模块;用于响应于将恒定偏移量加到堆栈指针而执行本地返回指令的模块,将恒定偏移量加到堆栈指针是响应于从本地堆栈弹出本地返回地址的,其中,执行本地返回指令包括从影子堆栈弹出已转换返回地址;以及用于响应于执行本地返回指令而从堆栈中指针减去恒定偏移量的模块。
示例32示例26-31中任一项的主题,并且还包括:用于将影子堆栈的多个虚拟存储器页映射到第一物理存储器页的模块;以及用于响应于执行本地返回指令而对已转换返回地址进行确认的模块。
示例33包括示例26-32中任一项的主题,并且其中,用于从本地堆栈弹出本地返回地址的模块包括用于将本地返回地址弹出到计算设备的第一寄存器中的模块;并且用于对已转换返回地址进行确认的模块包括:用于确定与已转换返回地址相关联的临时本地返回地址的模块;用于确定临时本地返回地址是否与计算设备的第一寄存器相匹配的模块;用于响应于确定临时本地返回地址与第一寄存器不匹配而基于第一寄存器的内容来确定经校正的已转换返回地址的模块;以及用于响应于确定经校正的已转换返回地址而跳转到经校正的已转换返回地址的模块。
示例34包括示例26-33中任一项的主题,并且其中,用于确定经校正的已转换返回地址的模块包括:用于确定已转换二进制文件是否包括由暂存寄存器的内容表示的本地返回地址的已转换返回地址的模块;以及用于响应于确定已转换二进制文件不包括由暂存寄存器的内容表示的本地返回地址的已转换返回地址而根据本地二进制文件来生成包括已转换返回地址的已转换二进制文件的模块。
示例35包括示例26-34中任一项的主题,并且还包括:用于执行已转换二进制文件的已转换返回例程的模块,其中,已转换返回例程与本地二进制文件的本地返回指令相对应;其中,用于弹出本地返回地址的模块包括用于响应于执行已转换返回例程而弹出本地返回地址的模块。
示例36包括示例26-35中任一项的主题,并且还包括:用于根据本地二进制文件来生成已转换二进制文件的模块,其中,已转换二进制文件包括已转换返回例程;以及用于执行已转换二进制文件的模块;其中,用于执行已转换返回例程的模块包括用于响应于执行已转换二进制文件而执行已转换返回例程的模块。
Claims (25)
1.一种用于影子堆栈管理的计算设备,所述计算设备包括:
调用模块,其用于:
将本地返回地址推入到所述计算设备的本地堆栈;
响应于所述本地返回地址推入到所述本地堆栈,而将恒定偏移量加到所述计算设备的堆栈指针;
响应于所述恒定偏移量加到所述堆栈指针,而对已转换调用目标执行本地调用指令;以及
响应于所述本地调用指令的执行,而从所述堆栈指针中减去所述恒定偏移量;以及
处理器,其用于响应于所述本地调用指令的执行而将已转换返回地址推入到所述计算设备的影子堆栈。
2.根据权利要求1所述的计算设备,还包括存储器管理模块,其用于:
将所述影子堆栈的多个虚拟存储器页映射到第一物理存储器页。
3.根据权利要求1所述的计算设备,还包括:
二进制文件转换模块,其用于执行已转换二进制文件的已转换调用例程,其中,所述已转换调用例程与本地二进制文件的本地调用指令相对应,并且所述已转换调用目标与所述本地调用指令的本地调用目标相对应;
其中,推入所述本地返回地址包括响应于所述已转换调用例程的执行而推入所述本地返回地址。
4.根据权利要求3所述的计算设备,其中,所述二进制文件转换模块还用于:
根据所述本地二进制文件来生成所述已转换二进制文件,其中,所述已转换二进制文件包括所述已转换调用例程;以及
执行所述已转换二进制文件;
其中,执行所述已转换调用例程包括响应于所述已转换二进制文件的执行而执行所述已转换调用例程。
5.根据权利要求1所述的计算设备,还包括二进制文件转换模块,其用于响应于所述恒定偏移量加到所述堆栈指针而检查所述堆栈指针是否超出与所述影子堆栈相关联的预先分配的虚拟地址范围。
6.根据权利要求1-5中任一项所述的计算设备,还包括:
返回模块,其用于:
响应于从所述堆栈指针中减去所述恒定偏移量,而从所述计算设备的所述本地堆栈弹出所述本地返回地址;
响应于所述本地返回地址从所述本地堆栈弹出,而将所述恒定偏移量加到所述堆栈指针;
响应于所述恒定偏移量加到所述堆栈指针而执行本地返回指令,所述恒定偏移量加到所述堆栈指针是响应于所述本地返回地址从所述本地堆栈弹出的;以及
响应于所述本地返回指令的执行,而从所述堆栈指针中减去所述恒定偏移量;
其中,所述处理器还用于响应于所述本地返回指令的执行而从所述影子堆栈弹出所述已转换返回地址。
7.根据权利要求6所述的计算设备,还包括:
存储器管理模块用于将所述影子堆栈的多个虚拟存储器页映射到第一物理存储器页;
其中,所述返回模块还用于响应于所述本地返回指令的执行而对所述已转换返回地址进行确认。
8.根据权利要求7所述的计算设备,其中:
从所述本地堆栈弹出所述本地返回地址包括:将所述本地返回地址弹出到所述计算设备的第一寄存器中;并且
对所述已转换返回地址进行确认包括:
确定与所述已转换返回地址相关联的临时本地返回地址;
确定所述临时本地返回地址是否与所述计算设备的所述第一寄存器相匹配;
响应于所述临时本地返回地址与所述第一寄存器不匹配的确定,而基于所述第一寄存器的内容来确定经校正的已转换返回地址;以及
响应于所述经校正的已转换返回地址的确定,而跳转到所述经校正的已转换返回地址。
9.根据权利要求8所述的计算设备,其中,确定所述经校正的已转换返回地址包括:
确定已转换二进制文件是否包括由暂存寄存器的内容表示的所述本地返回地址的已转换返回地址;以及
响应于所述已转换二进制文件不包括由所述暂存寄存器的内容表示的所述本地返回地址的所述已转换返回地址的确定,而根据本地二进制文件来生成包括所述已转换返回地址的所述已转换二进制文件。
10.根据权利要求6所述的计算设备,还包括:
二进制文件转换模块用于执行已转换二进制文件的已转换返回例程,其中,所述已转换返回例程与本地二进制文件的本地返回指令相对应;
其中,弹出所述本地返回地址包括响应于所述已转换返回例程的执行而弹出所述本地返回地址。
11.根据权利要求10所述的计算设备,还包括:
二进制文件转换模块用于:(i)根据所述本地二进制文件来生成所述已转换二进制文件,其中,所述已转换二进制文件包括所述已转换返回例程,以及(ii)执行所述已转换二进制文件;
其中,执行所述已转换返回例程包括响应于所述已转换二进制文件的执行而执行所述已转换返回例程。
12.一种用于影子堆栈管理的方法,所述方法包括:
由计算设备将本地返回地址推入到所述计算设备的本地堆栈;
由所述计算设备响应于将所述本地返回地址推入到所述本地堆栈而将恒定偏移量加到所述计算设备的堆栈指针;
由所述计算设备响应于将所述恒定偏移量加到所述堆栈指针而对已转换调用目标执行本地调用指令,其中,执行所述本地调用指令包括将已转换返回地址推入到所述计算设备的影子堆栈;以及
由所述计算设备响应于执行所述本地调用指令而从所述堆栈指针中减去所述恒定偏移量。
13.根据权利要求12所述的方法,还包括:
由所述计算设备将所述影子堆栈的多个虚拟存储器页映射到第一物理存储器页。
14.根据权利要求12所述的方法,还包括:
由所述计算设备执行已转换二进制文件的已转换调用例程,其中,所述已转换调用例程与本地二进制文件的本地调用指令相对应,并且所述已转换调用目标与所述本地调用指令的本地调用目标相对应;
其中,推入所述本地返回地址包括响应于执行所述已转换调用例程而推入所述本地返回地址。
15.根据权利要求14所述的方法,还包括:
由所述计算设备根据所述本地二进制文件来生成所述已转换二进制文件,其中,所述已转换二进制文件包括所述已转换调用例程;以及
由所述计算设备执行所述已转换二进制文件;
其中,执行所述已转换调用例程包括响应于执行所述已转换二进制文件而执行所述已转换调用例程。
16.根据权利要求12所述的方法,还包括:由所述计算设备响应于将所述恒定偏移量加到所述堆栈指针而检查所述堆栈指针是否超出与所述影子堆栈相关联的预先分配的虚拟地址范围。
17.根据权利要求12所述的方法,还包括:
由所述计算设备响应于从所述堆栈指针中减去所述恒定偏移量而从所述计算设备的所述本地堆栈弹出所述本地返回地址;
由所述计算设备响应于从所述本地堆栈弹出所述本地返回地址而将所述恒定偏移量加到所述堆栈指针;
由所述计算设备响应于将所述恒定偏移量加到所述堆栈指针而执行本地返回指令,将所述恒定偏移量加到所述堆栈指针是响应于从所述本地堆栈弹出所述本地返回地址的,其中,执行所述本地返回指令包括从所述影子堆栈弹出所述已转换返回地址;以及
由所述计算设备响应于执行所述本地返回指令而从所述堆栈指针中减去所述恒定偏移量。
18.根据权利要求17所述的方法,还包括:
由所述计算设备将所述影子堆栈的多个虚拟存储器页映射到第一物理存储器页;以及
由所述计算设备响应于执行所述本地返回指令而对所述已转换返回地址进行确认。
19.根据权利要求18所述的方法,其中:
从所述本地堆栈弹出所述本地返回地址包括将所述本地返回地址弹出到所述计算设备的第一寄存器中;并且
对所述已转换返回地址进行确认包括:
确定与所述已转换返回地址相关联的临时本地返回地址;
确定所述临时本地返回地址是否与所述计算设备的所述第一寄存器相匹配;
响应于确定所述临时本地返回地址与所述第一寄存器不匹配,而基于所述第一寄存器的内容来确定经校正的已转换返回地址;以及
响应于确定所述经校正的已转换返回地址,而跳转到所述经校正的已转换返回地址。
20.根据权利要求19所述的方法,其中,确定经校正的已转换返回地址包括:
确定已转换二进制文件是否包括由暂存寄存器的内容表示的所述本地返回地址的已转换返回地址;以及
响应于确定所述已转换二进制文件不包括由所述暂存寄存器的内容表示的所述本地返回地址的所述已转换返回地址,而根据本地二进制文件来生成包括所述已转换返回地址的所述已转换二进制文件。
21.根据权利要求17所述的方法,还包括:
由所述计算设备执行已转换二进制文件的已转换返回例程,其中,所述已转换返回例程与本地二进制文件的本地返回指令相对应;
其中,弹出所述本地返回地址包括响应于执行所述已转换返回例程而弹出所述本地返回地址。
22.根据权利要求21所述的方法,还包括:
由所述计算设备根据所述本地二进制文件来生成所述已转换二进制文件,其中,所述已转换二进制文件包括所述已转换返回例程;以及
由所述计算设备执行所述已转换二进制文件;
其中,执行所述已转换返回例程包括响应于执行所述已转换二进制文件而执行所述已转换返回例程。
23.一种计算设备,包括:
处理器;以及
其中存储有多个指令的存储器,所述指令在由所述处理器执行时使得所述计算设备执行根据权利要求12-22中任一项所述的方法。
24.一种或多种机器可读存储介质,包括存储在其上的多个指令,所述多个指令响应于被执行而使得计算设备执行根据权利要求12-22中任一项所述的方法。
25.一种计算设备,包括用于执行根据权利要求12-22中任一项所述的方法的模块。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/748,363 US9477453B1 (en) | 2015-06-24 | 2015-06-24 | Technologies for shadow stack manipulation for binary translation systems |
US14/748,363 | 2015-06-24 | ||
CN201680030120.3A CN107710151B (zh) | 2015-06-24 | 2016-05-24 | 用于二进制文件转换系统的影子堆栈操纵的技术 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680030120.3A Division CN107710151B (zh) | 2015-06-24 | 2016-05-24 | 用于二进制文件转换系统的影子堆栈操纵的技术 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113485777A true CN113485777A (zh) | 2021-10-08 |
Family
ID=57137631
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680030120.3A Active CN107710151B (zh) | 2015-06-24 | 2016-05-24 | 用于二进制文件转换系统的影子堆栈操纵的技术 |
CN202110941960.8A Pending CN113485777A (zh) | 2015-06-24 | 2016-05-24 | 用于二进制文件转换系统的影子堆栈操纵的技术 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680030120.3A Active CN107710151B (zh) | 2015-06-24 | 2016-05-24 | 用于二进制文件转换系统的影子堆栈操纵的技术 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9477453B1 (zh) |
EP (1) | EP3314396B1 (zh) |
CN (2) | CN107710151B (zh) |
WO (1) | WO2016209472A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012103359A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
EP2972798B1 (en) * | 2013-03-15 | 2020-06-17 | Intel Corporation | Method and apparatus for guest return address stack emulation supporting speculation |
WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
US20160381050A1 (en) | 2015-06-26 | 2016-12-29 | Intel Corporation | Processors, methods, systems, and instructions to protect shadow stacks |
US10394556B2 (en) | 2015-12-20 | 2019-08-27 | Intel Corporation | Hardware apparatuses and methods to switch shadow stack pointers |
US10430580B2 (en) | 2016-02-04 | 2019-10-01 | Intel Corporation | Processor extensions to protect stacks during ring transitions |
CN108345479A (zh) * | 2017-01-22 | 2018-07-31 | 北京优朋普乐科技有限公司 | 一种页面返回及标识入栈的方法及系统 |
US20190108112A1 (en) * | 2017-10-05 | 2019-04-11 | Hcl Technologies Limited | System and method for generating a log analysis report from a set of data sources |
CN112181491A (zh) * | 2019-07-01 | 2021-01-05 | 华为技术有限公司 | 处理器及返回地址的处理方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US20020129225A1 (en) * | 1997-10-02 | 2002-09-12 | U.S. Philips Corporation | Processing device for executing virtual machine instructions |
US6711672B1 (en) * | 2000-09-22 | 2004-03-23 | Vmware, Inc. | Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers |
CN1641567A (zh) * | 2004-01-16 | 2005-07-20 | 智权第一公司 | 自堆栈快取存储器进行快速推测性弹出操作方法及装置 |
GB0812663D0 (en) * | 2008-07-10 | 2008-08-20 | Cambridge Consultants | Processor with push instruction |
US7581089B1 (en) * | 2006-04-20 | 2009-08-25 | The United States Of America As Represented By The Director Of The National Security Agency | Method of protecting a computer stack |
US20090254701A1 (en) * | 2007-08-08 | 2009-10-08 | Hitachi, Ltd. | Storage system and access count equalization method therefor |
US20090254709A1 (en) * | 2003-09-30 | 2009-10-08 | Vmware, Inc. | Prediction Mechanism for Subroutine Returns in Binary Translation Sub-Systems of Computers |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1103467C (zh) * | 1994-10-13 | 2003-03-19 | 北京南思达科技发展有限公司 | 宏指令集对称式并行体系结构微处理器 |
US5930509A (en) * | 1996-01-29 | 1999-07-27 | Digital Equipment Corporation | Method and apparatus for performing binary translation |
US6535903B2 (en) * | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
US7178100B2 (en) * | 2000-12-15 | 2007-02-13 | Call Charles G | Methods and apparatus for storing and manipulating variable length and fixed length data elements as a sequence of fixed length integers |
CN100342374C (zh) * | 2003-12-24 | 2007-10-10 | 华为技术有限公司 | 一种数据存储方法及装置 |
CN100511119C (zh) * | 2007-08-03 | 2009-07-08 | 东南大学 | 一种实现片上影子堆栈存储器的方法及其电路 |
CN201060485Y (zh) * | 2007-08-03 | 2008-05-14 | 东南大学 | 一种实现片上影子堆栈存储器的电路 |
US8635415B2 (en) * | 2009-09-30 | 2014-01-21 | Intel Corporation | Managing and implementing metadata in central processing unit using register extensions |
JP5792577B2 (ja) * | 2010-11-10 | 2015-10-14 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 動的バイナリ・トランスレータに関するメモリ管理のための装置、方法、およびコンピュータ・プログラム |
US20120236010A1 (en) * | 2011-03-15 | 2012-09-20 | Boris Ginzburg | Page Fault Handling Mechanism |
US8762797B2 (en) * | 2011-04-29 | 2014-06-24 | Google Inc. | Method and apparatus for detecting memory access faults |
US9465674B2 (en) * | 2012-03-30 | 2016-10-11 | Intel Corporation | Direct memory (DMA) based access to a device on a remote machine using stub driver and by synchronizing the DMA buffer |
CN102866982A (zh) * | 2012-09-14 | 2013-01-09 | 复旦大学 | 基于fpga的8位复杂指令集中央处理器 |
CN103077198B (zh) * | 2012-12-26 | 2016-09-21 | 中标软件有限公司 | 一种操作系统及其文件缓存定位方法 |
US9135435B2 (en) * | 2013-02-13 | 2015-09-15 | Intel Corporation | Binary translator driven program state relocation |
US9171159B2 (en) | 2013-02-28 | 2015-10-27 | Intel Corporation | Performing security operations using binary translation |
WO2014189510A1 (en) | 2013-05-23 | 2014-11-27 | Intel Corporation | Techniques for detecting return-oriented programming |
WO2015030748A1 (en) | 2013-08-28 | 2015-03-05 | Intel Corporation | Hardware and software execution profiling |
CN103530171A (zh) * | 2013-10-25 | 2014-01-22 | 大唐微电子技术有限公司 | 一种智能卡虚拟机及其实现方法 |
US9501637B2 (en) * | 2014-09-26 | 2016-11-22 | Intel Corporation | Hardware shadow stack support for legacy guests |
-
2015
- 2015-06-24 US US14/748,363 patent/US9477453B1/en active Active
-
2016
- 2016-05-24 CN CN201680030120.3A patent/CN107710151B/zh active Active
- 2016-05-24 WO PCT/US2016/033936 patent/WO2016209472A1/en unknown
- 2016-05-24 EP EP16814934.2A patent/EP3314396B1/en active Active
- 2016-05-24 CN CN202110941960.8A patent/CN113485777A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US20020129225A1 (en) * | 1997-10-02 | 2002-09-12 | U.S. Philips Corporation | Processing device for executing virtual machine instructions |
US6711672B1 (en) * | 2000-09-22 | 2004-03-23 | Vmware, Inc. | Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers |
US20090254709A1 (en) * | 2003-09-30 | 2009-10-08 | Vmware, Inc. | Prediction Mechanism for Subroutine Returns in Binary Translation Sub-Systems of Computers |
CN1641567A (zh) * | 2004-01-16 | 2005-07-20 | 智权第一公司 | 自堆栈快取存储器进行快速推测性弹出操作方法及装置 |
US7581089B1 (en) * | 2006-04-20 | 2009-08-25 | The United States Of America As Represented By The Director Of The National Security Agency | Method of protecting a computer stack |
US20090254701A1 (en) * | 2007-08-08 | 2009-10-08 | Hitachi, Ltd. | Storage system and access count equalization method therefor |
GB0812663D0 (en) * | 2008-07-10 | 2008-08-20 | Cambridge Consultants | Processor with push instruction |
Non-Patent Citations (4)
Title |
---|
THE KERNEL ADDRESS SANITIZER (KASAN): "内核地址消毒剂(KASAN)", pages 1 - 8, Retrieved from the Internet <URL:《//www.kernel.org/doc/html/v5.15/translations/zh_CN/dev-tools/kasan.html》> * |
THURSTON H.Y. DANG: "The Performance Cost of Shadow Stacks and Stack Canaries", pages 555, Retrieved from the Internet <URL:《https://doi.org/10.1145/2714576.2714635》> * |
明晓杰: "基于NCL逻辑的异步MCU设计", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, pages 135 - 352 * |
杨礼波: "在堆栈缓冲区溢出中程序调用的分析和研究", 《电脑知识与技术》, pages 1 - 3 * |
Also Published As
Publication number | Publication date |
---|---|
EP3314396A1 (en) | 2018-05-02 |
EP3314396A4 (en) | 2019-03-13 |
EP3314396B1 (en) | 2020-04-15 |
US9477453B1 (en) | 2016-10-25 |
CN107710151B (zh) | 2021-09-07 |
WO2016209472A1 (en) | 2016-12-29 |
CN107710151A (zh) | 2018-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107710151B (zh) | 用于二进制文件转换系统的影子堆栈操纵的技术 | |
CN107077337B (zh) | 用于执行根据两个指令集架构编译的应用编码的系统和方法 | |
KR101761498B1 (ko) | 추론을 지원하는 게스트 반환 주소 스택 에뮬레이션을 위한 방법 및 장치 | |
US20150379263A1 (en) | Technologies for preventing hook-skipping attacks using processor virtualization features | |
CN105224476A (zh) | 高速缓存路预测 | |
CN104541242A (zh) | 代码执行的灵活加速 | |
GB2579160A (en) | Predicting table of contents pointer value responsive to branching to subroutine | |
US10229044B2 (en) | Conditional stack frame allocation | |
US10642587B2 (en) | Technologies for indirectly calling vector functions | |
US20130031535A1 (en) | Processing table of content access overflow in an application | |
GB2603444A (en) | Enhancing memory safe programming using page frame tag mechanism | |
US10083125B2 (en) | Method to efficiently implement synchronization using software managed address translation | |
US20220075639A1 (en) | Executing an application with multiple processors | |
US10235165B2 (en) | Creating optimized shortcuts | |
US9864518B2 (en) | Assigning home memory addresses to function call parameters | |
US20130263159A1 (en) | Information processing apparatus, information processing method, and recording medium | |
CN114201729A (zh) | 一种矩阵运算方式的选择方法、装置、设备以及存储介质 | |
CN114781322A (zh) | Cpu芯片仿真加速中针对无mmu环境的内存状态恢复方法 | |
US10789056B2 (en) | Technologies for scalable translation caching for binary translation systems | |
US8683455B1 (en) | Method and system for optimizing an executable program by selectively merging identical program entities | |
CN112488293B (zh) | 运行深度学习网络的方法及装置 | |
US20220253313A1 (en) | Program conversion device, program conversion method, and program conversion program | |
CN117762423A (zh) | Java智能合约的编译方法、装置、存储介质以及电子设备 | |
US10891172B2 (en) | Modifying an operating system |
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 |