一、前言
Hook翻译过来为‘挂钩’‘钩子’,是一种非常形象的叫法,它的原理并不难懂:在合适的地点挂上一个钩子,等待目标进入。
将其比喻为现实中的例子,可以想象有一条河流,河流自上而下流动可以看作程序的执行过程,而Hook就是在河流的某个地方布上一张大网。
河流想要流下去,那就必须要通过这张网,而我们在其通过的这一瞬间,就能完成一系列巧妙的事情,比如修改其原本的运行流程、变量的值等等。
但Hook远比河流中的一张网更加强大!
二、简单介绍
一个简单的C++程序就能演示这一过程:
#include<iostream>
using namespace std;
void fun(int t) {
cout << t << endl;
}
int main()
{
int a = 10;
fun(a);
}
上面的程序就演示了一个最基本的运行逻辑,代码从main
函数开始,向fun
函数传入变量a
,然后进入函数中打印这个a
的值。
此时,如果有一张网,也就是Hook代码,插在了函数调用前,去修改了a的值:
int a=10;
{ //假设有一段hook代码插入在了这里
a=20;
}
fun(a);