57 lines
1.5 KiB
C
Raw Normal View History

2024-03-29 15:24:31 +08:00
/**
veh_hook Vectored Exception Handler hooking library
Version: 24-March-2008
**/
#ifndef LIST_T_H_INCLUDED
#define LIST_T_H_INCLUDED
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
2024-04-02 15:36:52 +08:00
#include <functional>
2024-03-29 15:24:31 +08:00
// VEH Hooking types
#define VEH_HK_INT3 0
#define VEH_HK_MEM 1
#define VEH_HK_HW 2
// -
#define OPCODE_INT3 "\xCC"
2024-04-02 15:36:52 +08:00
// typedef void (*pfvoid)();
// typedef void (*newFuncType)(PCONTEXT);
using newFuncType = void (*)(PCONTEXT); // std::function<void(PCONTEXT)>;
2024-03-29 15:24:31 +08:00
typedef struct veh_node
{
2024-04-02 15:36:52 +08:00
void *origFunc;
2024-03-29 15:24:31 +08:00
newFuncType newFunc;
2024-04-02 15:36:52 +08:00
void *handle;
2024-03-29 15:24:31 +08:00
DWORD hooktype;
2024-04-02 15:36:52 +08:00
void *baseAddr; // Address of the page in which origFunc resides.
2024-03-29 15:24:31 +08:00
BYTE origBaseByte;
DWORD OldProtect;
2024-04-02 15:36:52 +08:00
struct veh_node *next;
2024-03-29 15:24:31 +08:00
} veh_node_t;
typedef struct
{
2024-04-02 15:36:52 +08:00
veh_node_t *head;
veh_node_t *tail;
2024-03-29 15:24:31 +08:00
} veh_list_t;
// VEH hook interface functions for creating and removing hooks.
2024-04-02 15:36:52 +08:00
bool add_veh_hook(void *origFunc, newFuncType newFunc, DWORD hook_type);
bool remove_veh_hook(void *origFunc);
2024-03-29 15:24:31 +08:00
// The VEH dispathing function is called by Windows every time an exception is encountered.
// the function dispatches calls to the correct inctercept function.
LONG CALLBACK veh_dispatch(PEXCEPTION_POINTERS ExceptionInfo);
// Functions used internally by the library.
2024-04-02 15:36:52 +08:00
veh_list_t *new_veh_list();
veh_node_t *insert_veh_node(veh_list_t *list, void *origFunc, newFuncType newFunc, void *handle, DWORD hook_type);
bool remove_veh_node(veh_list_t *list, void *origFunc);
veh_node_t *get_veh_node(veh_list_t *list, void *origFunc, int range = 0);
2024-03-29 15:24:31 +08:00
#endif // LIST_T_H_INCLUDED