我想在visual studio中使用内联汇编来跳转到特定地址。我试过这个:
_asm {
jmp 0x12345678
}
但是编译器说:“操作码不使用这种类型的操作数。”
如何直接跳转?
答案 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]
}