相关疑难解决方法(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万
查看次数

如何在 gcc 中使用 lzcnt

我正在查看一些汇编代码,我看到了 tzcntl。对该指令的搜索重定向到 lzcnt。这些是相同的指令吗?是否可以将 lzcnt 与 gcc 一起使用?

我见过这个例子: Intrinsic __lzcnt64 返回不同的值,具有不同的编译选项

尽管我对是否需要使用 __lzcnt64 或是否有 32 位版本感到困惑。

所以总结一下:

  1. 如果有的话,tzcntl 和 lzcnt 之间有什么区别?
  2. 如何在 gcc 中正确使用 lzcnt(代码、包含和编译)
  3. 我可以选择 32 位或 64 位版本吗?

c gcc

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

标签 统计

assembly ×1

c ×1

gcc ×1

x86 ×1