相关疑难解决方法(0)

"rep ret"是什么意思?

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

    rep ret /* REP to avoid AMD branch prediction penalty */
Run Code Online (Sandbox Code Playgroud)

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

我发现这里的代码在这里(由编译器注入安全性):

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
    }
}
Run Code Online (Sandbox Code Playgroud)

x86 assembly

42
推荐指数
3
解决办法
3万
查看次数

repz ret:为什么所有的麻烦?

的问题repz ret已经在这里盖[ 1 ],以及其他来源[ 2,3 ]相当令人满意.但是,阅读这两个来源,我找到了以下答案:

  1. 与or 进行定量比较时的实际罚分是多少?特别是在后一种情况下 - 解码一个额外的指令(并且那个空的指令!)真正相关,当大多数函数有100多个或者内联时?retnop; ret

  2. 为什么这个从未在AMD K8中得到修复,甚至进入了K10?从什么时候开始记录一个丑陋的变通方法,基于一种行为并且保持无证,优先考虑实际修复问题,何时知道原因的每个细节?

x86 assembly

3
推荐指数
1
解决办法
569
查看次数

标签 统计

assembly ×2

x86 ×2