gpt4 book ai didi

visual-c++ - Visual C 内联汇编器中的立即调用/jmp

转载 作者:行者123 更新时间:2023-12-05 00:06:00 25 4
gpt4 key购买 nike

当我尝试立即调用或跳转到 VC++ 2010 内联汇编器时

_asm 
{
call 00405B90h;
jmp 00405B90h;
jmp far 00405B90h;
}

它产生一个错误
C2415: improper operand type

它是可能的,如何做到这一点?

到目前为止,我有一个解决方法:
_asm 
{
push 00405B90h; // This is a jump work around
call 00405B90h;
}

最佳答案

根据您要调用的内容,将 var 设置为地址并执行以下操作:

DWORD var = 0xDEADBEEF;
__asm jmp [var]

或者,我做什么:
__asm
{
mov eax,ModuleBase
add eax,RVA
call eax ;obviously call can be jmp
}

您可以轻松地对其进行宏处理(添加寄存器参数可能是个好主意):
#define JMP_IMM(x) __asm mov eax,x \
__asm jmp eax

不幸的是,MASM 不支持对绝对地址的相对调用,其他汇编器(如 NASM)也不能对 COFF 目标文件执行此操作。因此,工具链限制迫使您通过间接调用或 jmp 使用这种效率较低的机器代码。
  • How to write an absolute target for a near direct relative call/jmp in MASM
  • Error when calling function in user32.dll directly
  • 关于visual-c++ - Visual C 内联汇编器中的立即调用/jmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3933143/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com