为什么AMD处理器使用sub指令而不是xor来验证堆栈金丝雀?

问题描述 投票:0回答:1

所以我一直在探索 picoCTF 入门 中的第 12 章,突然发现我的程序汇编和主函数末尾的 picoCTF 的差异,其中正在检查堆栈金丝雀。 他们的是

xor    rdx,QWORD PTR fs:0x28
,我的是
sub    rdx,QWORD PTR fs:0x28

我有 AMD 处理器,我的程序集使用 sub 指令来检查相等性,但在他们的程序集中有异或。我明白,它做同样的事情,但为什么会这样呢?异或运算不是更高效吗?甚至是因为处理器的原因?

assembly xor amd-processor
1个回答
0
投票

xor
而不是
sub
是一个错过的优化,在我报告后在 GCC10 中修复。 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90568

英特尔 Sandybridge 系列可以将

sub/jcc
宏融合到单个微指令中,但不能用于
xor

在其他 CPU 上,

sub
xor
的性能相同。

AMD Zen 3 及更高版本可以融合

sub
xor

© www.soinside.com 2019 - 2024. All rights reserved.