Visual Studio内联汇编直接跳转

时间:2013-05-27 23:27:47

标签: visual-studio assembly inline-assembly

我想在visual studio中使用内联汇编来跳转到特定地址。我试过这个:

_asm {
    jmp 0x12345678
}

但是编译器说:“操作码不使用这种类型的操作数。”

如何直接跳转?

2 个答案:

答案 0 :(得分:1)

据我了解,MASM不支持这种类型的跳转。您有几个选择:

mov eax, 12345678h
jmp eax

push 12345678h 
ret

第一个使用寄存器,第二个会导致性能损失,因为它会扰乱CPU中的CALL / RET配对优化。我认为你也可以使用一个类型化的常量或局部变量 - 这也消耗了一些额外的字节。我认为没有任何其他方式,也没有任何直接的单线方式在MASM中执行这样的直接跳转。

警告:这假设您使用的是x86代码。您的OP建议从jmp参数的大小开始,但如果这是x64那么答案显然会有所不同。

答案 1 :(得分:0)

尝试将var设置为地址:

unsigned int var = 0x12345678;
_asm {
    jmp [var]
}