第二阶段:在优化下Hook数据返回值得JMP指令示例:
在上面的示例中,我们将函数的开头替换成了一条 JMP 指令,指向一个新函数。这样做的缺点是,新函数必须与原函数在同一个模块内,否则 JMP 指令无法跳转到新函数。如果希望跳转到不同模块的函数,可以使用一种技术叫做 Trampoline,即在原函数和新函数之间构造一个跳板,用来转发调用。这样就可以解决 JMP 指令无法跨模块跳转的问题。这里是一个使用 Trampoline 的示例,假设有一个函数 int get_secret_value(),我们希望通过 HOOK 来修改这个函数的返回值,使得在调用这个函数时始终返回一个固定值。首先需要使用一些内存修改相关的函数,比如 VirtualProtect 来修改函数内存的保护属性,使得我们能够修改这个函数的代码。然后,我们需要在内存中分配一段空间,构造 Trampoline。Trampoline 的结构如下:[*]一条 JMP 指令,指向新函数
[*]原函数剩余的代码
具体实现方法如下:以下为主题内容:
**** Hidden Message *****
感谢分享! 继续学习 学习学习 谢谢分享! 代码不全啊 可以可以的 学习一下,多谢分享 怎么代码看不全呢 感谢分享!