gpt4 book ai didi

assembly - `rep ret`是什么意思?

转载 作者:行者123 更新时间:2023-12-01 18:24:35 42 4
gpt4 key购买 nike

我在 Visual Studio 2008 上测试一些代码并注意到 security_cookie。我能理解它的意思,但我不明白这个指令的目的是什么。

    rep ret /* REP to avoid AMD branch prediction penalty */

我当然可以理解这个评论:)但是这个前缀 exaclty 在 ret 的上下文中做了什么,如果 ecx 是 != 0 会发生什么?显然,当我调试它时,ecx 的循环计数被忽略,这是预期的。

我发现这个的代码在这里(为了安全起见,由编译器注入(inject)):

void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie)
{
/* x86 version written in asm to preserve all regs */
__asm {
cmp ecx, __security_cookie
jne failure
rep ret /* REP to avoid AMD branch prediction penalty */
failure:
jmp __report_gsfailure
}
}

最佳答案

有一个完整的博客以这条指令命名。第一篇文章描述了其背后的原因:http://repzret.org/p/repzret/

基本上,当单字节 ret 立即跟随条件跳转(如您引用的代码(以及其他一些情况)中所示)时,AMD 的分支预测器存在问题,解决方法是添加 rep 前缀,该前缀会被 CPU 忽略,但会修复预测器惩罚。

关于assembly - `rep ret`是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20526361/

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