我需要将标记放在 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/