gpt4 book ai didi

assembly - 旧CPU如何执行新的ENDBR64和ENDBR32指令?

转载 作者:行者123 更新时间:2023-12-02 22:02:13 25 4
gpt4 key购买 nike

在某个时候,英特尔将开始发售支持 CET(C控制流E执行T技术)的 CPU,这会增加两个指令 ENDBR64ENDBR32

这两个将被编码为

F3 0F 1E FA   for ENDBR64 and 
F3 0F 1E FB for ENDBR32 respectively.

这些将如何在较旧的 x86 CPU 上执行?
例如,Core i5 甚至老式 Pentium II?

更新:

F3 0F = prefix indicating newer instructions
1E = ENDBR
FA = ENDBR64

最佳答案

旧版 GDB 将 F3 0F 1E FA ENDBR64 解码为 repz nop edx

在 64 位模式下在 Core 2 (Merom) 上单步执行不会产生架构状态变化,也不会出现故障/异常。 (在旧的 Ubuntu 15.10 安装上在 GDB 7.10 中测试)。

<小时/>

根据https://gist.github.com/Quasilyte/b60c94b9cb608d5b1a359d54f1be8aca ,
0f 1e/r 是一个 2 字节操作码,采用 ModRMNOP r/m32、r32,与标准多指令相同字节0f 1f NOP that Intel documents .

它说它是随 Pentium Pro 添加的,因此任何 PII/PIII 或更高版本都可以。

https://github.com/NationalSecurityAgency/ghidra/issues/197#issuecomment-472906147表示 AMD 记录了这些额外的 NOP 操作码;英特尔将它们列为“保留”。

rep 前缀对于不适用的操作码通常会被默默地忽略。 这使 Intel/AMD 能够灵活地使用 REP 作为 future 强制前缀的一部分创建在旧 CPU 上不会出错的编码的指令。

<小时/>

早于 PPro 的 CPU,例如原来的 Pentium,可能会出错。 就像 0f 1f 长 NOP 一样。

<小时/>

顺便说一句,你尝试解码它是没有意义的。 0f 是 2 字节操作码的“转义”字节,因此 1e Push ds 与解码方式无关。这就是 1e 自行解码的方式,无需 0f 转义字节。 (除非在 64 位模式下无效。)

关于assembly - 旧CPU如何执行新的ENDBR64和ENDBR32指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56120231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com