批量劫持
#include<stdio.h>
#include<stdlib.h>#include"detours.h"
#include<Windows.h>
#pragma comment(lib,"detours.lib")
static int num1(int a, int b)
{
return a + b;
}
static int num2(int a, int b)
{
return a - b;
}
static int num3(int a, int b)
{
return a*b;
}
static int num4(int a, int b)
{
return a / b;
}
int newnum1(int a, int b)
{
printf("\n%d+%d=%d",a,b,a+b);
return a + b;
}
int newnum2(int a, int b)
{
printf("\n%d-%d=%d", a, b, a -b);
return a -b;
}
int newnum3(int a, int b)
{
printf("\n%d*%d=%d", a, b, a *b);
return a * b;
}
int newnum4(int a, int b)
{
printf("\n%d/%d=%d", a, b, a/b);
return a / b;
}
static int(*pold[4])(int a, int b) = { num1, num2, num3, num4 };
int(*pnew[4])(int a, int b) = { newnum1, newnum2, newnum3, newnum4 };
void Hook()
{
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread);
for (int i = 0; i < 4; i++)
{
DetourAttach((void**)&pold[i], &pnew[i]);
}
DetourTransactionCommit();
}
void UnHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread);
for (int i = 0; i < 4; i++)
{
DetourDeAttach((void**)&pold[i], &pnew[i]);
}
DetourTransactionCommit();
}
int main()
{
for (int i = 0; i < 4; i++)
{
printf("\n%d",pold[i](10,2));
}
printf("\n%d", num1(10, 2));
printf("\n%d", num2(10, 2));
printf("\n%d", num3(10, 2));
printf("\n%d", num4(10, 2));
Hook();
printf("\n%d", num1(10,2));
printf("\n%d", num2(10, 2));
printf("\n%d", num3(10, 2));
printf("\n%d", num4(10, 2));
}