C ++ __asm生成不同的字节

时间:2013-07-28 11:12:14

标签: c++ assembly mov

在我的功能中,我使用

__asm
{
  mov     ecx,dword ptr [0x28F1431]
  mov     ecx,ds:[0x28F14131]
}

应生成以下字节:0x8B0Dmov ecx, dword ptr [])。但是,第一条指令产生0xB9mov ecx,0x28F14131),第二条指令产生0x3E:8B0D

所以我的问题是,我应该使用什么指令在C ++ __asm中获得所需的结果?

1 个答案:

答案 0 :(得分:3)

如果您知道100%确定内联汇编的字节序列是什么,则可以始终显式使用这些字节。确切的语法让我感到厌烦,但是如果你使用的是GCC,你可以尝试....

__asm {
    .byte 0x##
    .byte 0x##
    ...
}

只有在100%确定知道整个指令的字节序列是什么的情况下,此方法才有效。如果你打算这样做,一定要妥善评论。

(对于它的价值,我不得不在过去使用这种方法来解决编译器错误,无论它在哪一方面使用错误的字节序列来执行其中一条指令。)