我正在学习调试程序并偶然发现了一个我不理解的领域。为什么这个区域,如下图所示,充满了不同地址的跳转指令?
我正在学习钩子,并希望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 指令?
我希望它是有道理的,并感谢您的阅读。