Assembly MSVC内联asm中的相对近跳转(需要挂钩)

Assembly MSVC内联asm中的相对近跳转(需要挂钩),assembly,x86,hook,Assembly,X86,Hook,作为练习,我将在正在反转的应用程序中挂接一个函数。我正在尝试实现一种与蹦床跳跃非常相似的技术。假设我们要挂接的地址是src: 将src处的5个字节替换为JMP myFunc 在myFunc的最开始复制丢失的覆盖的5个字节的功能 做我自己的事 JMP返回src+5 我在做最后一件事时遇到了麻烦-将控制返回到src+5。在我的例子中,地址src是0x420CAE,这就是我正在做的: //virtual protect stuff *(BYTE*)0x0420CAE = 0xE9; *(DWORD*)

作为练习,我将在正在反转的应用程序中挂接一个函数。我正在尝试实现一种与蹦床跳跃非常相似的技术。假设我们要挂接的地址是src:

将src处的5个字节替换为JMP myFunc 在myFunc的最开始复制丢失的覆盖的5个字节的功能 做我自己的事 JMP返回src+5 我在做最后一件事时遇到了麻烦-将控制返回到src+5。在我的例子中,地址src是0x420CAE,这就是我正在做的:

//virtual protect stuff
*(BYTE*)0x0420CAE = 0xE9;
*(DWORD*)(0x0420CAE + 1) = ((DWORD)Hooked - (DWORD)0x0420CAE - 5);
//restore protect
这很好,控件被传递给我的函数Hooked。这就是它看起来的样子:

至于最后一条指令——我想它应该是这样的:我想跳到0x420CB3,所以我减去当前地址,然后减去JMP的5个大小。然而,MSVC抱怨:

Error   1   error C2425: '-' : non-constant expression in 'first operand'

但是,如果我以相反的顺序执行$-0x420CB3,则没有问题。我真的不明白为什么。

哈哈,原来我把直接字节编辑和实际汇编混淆了。只需编写uu asm JMP 0x420CB3就足够了,汇编程序会处理这个问题

Error   1   error C2425: '-' : non-constant expression in 'first operand'