在我的功能中,我使用
__asm
{
mov ecx,dword ptr [0x28F1431]
mov ecx,ds:[0x28F14131]
}
应生成以下字节:0x8B0D
(mov ecx, dword ptr []
)。但是,第一条指令产生0xB9
(mov ecx,0x28F14131
),第二条指令产生0x3E
:8B0D
所以我的问题是,我应该使用什么指令在C ++ __asm
中获得所需的结果?
答案 0 :(得分:3)
如果您知道100%确定内联汇编的字节序列是什么,则可以始终显式使用这些字节。确切的语法让我感到厌烦,但是如果你使用的是GCC,你可以尝试....
__asm {
.byte 0x##
.byte 0x##
...
}
只有在100%确定知道整个指令的字节序列是什么的情况下,此方法才有效。如果你打算这样做,一定要妥善评论。
(对于它的价值,我不得不在过去使用这种方法来解决编译器错误,无论它在哪一方面使用错误的字节序列来执行其中一条指令。)