1

我正在学习调试程序并偶然发现了一个我不理解的领域。为什么这个区域,如下图所示,充满了不同地址的跳转指令?

在此处输入图像描述

我正在学习钩子,并希望hookingFunction通过 x32dbg 查看我的钩子函数 ()。它具有原型,LoadLibraryA因为那是我要挂钩的功能。

在此处输入图像描述

这是LoadLibrary原型:

typedef HMODULE(__stdcall* LoadLibraryType) (LPCSTR filename);

static LoadLibraryType loadlib;

HMODULE __stdcall hookingFunction(LPCSTR filename) {

    std::cout << "hello from hookingFunction" << std::endl;

    return loadlib(filename);
}

打印基地址时,hookingFunction我得到以下地址:

std::cout << std::hex << "hookingFunction, base address: " << hookingFunction << std::endl; 
// Output: "hookingFunction, base address: 7C061410"

按照 x32dbg 中的地址,我在这里登陆:

在此处输入图像描述

当遵循相对于 7C061410 的“jmp 713B”时,我首先到达了我想要到达的实际功能

在此处输入图像描述

但是为什么我们首先需要访问地址7C061410呢?为什么这个区域充满了 jmp 指令?

我希望它是有道理的,并感谢您的阅读。

4

0 回答 0