visual-c++ - 如何将汇编标记放入 C++ 代码 (x64)

标签 visual-c++ assembly visual-studio-2005 64-bit marker

我需要将标记放在 C++ 代码中,这些标记应该在汇编或二进制文件中可见。使用内联汇编为 32 做这件事似乎很简单:

__asm {
    NOP
    NOP
    NOP
}

或使用数据库汇编语句:

__asm {
     DB  0x00, 0xFF, 0x10
}

但 VisualStudio 2005 及更高版本不支持 x64 的内联汇编。有什么办法吗?也许我可以在单独的程序集模块中创建一个函数,但我如何确定链接器会在那里放置一个实际的程序集而不是 CALL?

最佳答案

在某处定义一个全局 volatile 变量,比如 volatile __int64 blah = 0;。然后,无论您想要什么标记,都可以使用 _InterlockedCompareExchange64(&blah, SOME_UNIQUE_CONSTANT1, SOME_UNIQUE_CONSTANT2);。您一定会找到使用 SOME_UNIQUE_CONSTANT1 加载 ECX:EBX 和使用 SOME_UNIQUE_CONSTANT2 加载 EDX:EAX 的指令,然后是LOCK CMPXCHG8B(0xF0、0x0F、0xC7 等——请参阅指令编码详细信息)。

关于visual-c++ - 如何将汇编标记放入 C++ 代码 (x64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925213/

相关文章:

assembly - MASM 组件 '$' 和 '-'

windows - Windows 上的 ARM 汇编语言 IDE

编译错误: cannot allocate an array of constant size 0. 为什么会出现这个?

c++ - visual c++ 复制文本框内容

c - 普通代码的意外编译错误

c++ - 获得适用于 C++ 的正确编译器

c++ - 使用 Windows API 创建鼠标 Hook 的问题

assembly - 如何在 x86(32 位)程序集中将无符号整数转换为 float ?

visual-studio-2008 - 如何摆脱强类型的表适配器和数据表

c++ - 在 c++ vs140 (Visual Studio 2015) 下编译的 Visual Studio 项目中使用在 vs80 (Visual Studio 2005) 下编译 C++ 的静态库