80 lines
1.3 KiB
C
80 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <Windows.h>
|
|
#include "misc.h"
|
|
#include "hook.h"
|
|
|
|
#if 0
|
|
Check whether trampoline works correctly
|
|
start:
|
|
je lbl1
|
|
jmp lbl1
|
|
lbl1:
|
|
|
|
---
|
|
hook() == LOOPS_INTO_OVERWRITTEN_CODE
|
|
start:
|
|
mov eax, 3
|
|
l:
|
|
dec eax
|
|
test eax, eax
|
|
je l
|
|
|
|
|
|
#endif
|
|
|
|
|
|
static int test(int a, int b);
|
|
static void normal(int a, int b, int c, int d, int e);
|
|
static void normal2(int a, int b, int c, int d, int e);
|
|
typedef void(*FUNCTYPE)(int a, int b, int c, int d, int e);
|
|
|
|
static void hooked(int a, int b, int c, int d, int e);
|
|
static FUNCTYPE original;
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
int r = 0;
|
|
|
|
if((r = hook(normal2, 0, hooked, &original)) < 0)
|
|
{
|
|
printf("CAn't hook: %d\n", r);
|
|
return 1;
|
|
}
|
|
|
|
|
|
printf("---\nDisass. trampoline/original\n");
|
|
disassemble_func(original, 10);
|
|
original(3, 1, 1, 1, 1);
|
|
//original(5, 1, 1, 1, 1);
|
|
|
|
VirtualFree(original, 0, MEM_RELEASE);
|
|
|
|
(void)getc(stdin);
|
|
}
|
|
|
|
static int test(int a, int b)
|
|
{
|
|
if(a == 0)
|
|
return 5;
|
|
else if(a == 1)
|
|
return b;
|
|
return a;
|
|
}
|
|
|
|
static void normal(int a, int b, int c, int d, int e)
|
|
{
|
|
printf("Result: %d\n", a*b*c*d*e);
|
|
}
|
|
|
|
static void normal2(int a, int b, int c, int d, int e)
|
|
{
|
|
if(a == 3)
|
|
return;
|
|
printf("Result: %d\n", a*b*c*d*e);
|
|
}
|
|
|
|
static void hooked(int a, int b, int c, int d, int e)
|
|
{
|
|
original(1, b, c, d, e);
|
|
}
|