gpt4 book ai didi

assembly - 使用 x86 计算 32 位相对跳转偏移量

转载 作者:行者123 更新时间:2023-12-03 08:05:50 24 4
gpt4 key购买 nike

我想修改 32 位 DLL 的入口点。我已经尝试用...覆盖入口点

mov     eax, OFFSET absolute_immediate
jmp eax

...在此钩子(Hook)模式中编码。

// mov eax, addr; jmp eax
static uchar_t hookPattern[] = { 0xB8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0 };

代码工作正常,但我想要一个相对跳转。
我尝试了这个钩子(Hook)模式:

static uchar_t hookPattern[] = { 0xE9, 0x00, 0x00, 0x00, 0x00 }; // jmp REL32

并像这样覆盖四个相对字节:

DWORD dwModify = (char *)&::myHook - (char *)entryPoint;
memcpy( hookPattern + 1, &dwModify, sizeof dwModify );

如果我调用entryPoint,我会意外地重定向到运行时的一个完全不同的函数,但不会重定向到myHook。
我在计算相对偏移量时遗漏了一些东西吗?

最佳答案

相对分支指令中的偏移量是相对于后续指令的开头的。

所以你需要从偏移量中减去分支指令的大小,如下所示:

DWORD dwModify = (char *)&::myHook - (char *)entryPoint - sizeof hookPattern;

关于assembly - 使用 x86 计算 32 位相对跳转偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72389416/

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