/** veh_hook Vectored Exception Handler hooking library Version: 24-March-2008 **/ #ifndef LIST_T_H_INCLUDED #define LIST_T_H_INCLUDED #include #include #include #include // VEH Hooking types #define VEH_HK_INT3 0 #define VEH_HK_MEM 1 #define VEH_HK_HW 2 // - #define OPCODE_INT3 "\xCC" //typedef void (*pfvoid)(); //typedef void (*newFuncType)(PCONTEXT); using newFuncType = std::function; typedef struct veh_node { struct veh_node* last; struct veh_node* next; void* origFunc; newFuncType newFunc; void* handle; DWORD hooktype; void* baseAddr; // Address of the page in which origFunc resides. BYTE origBaseByte; DWORD OldProtect; } veh_node_t; typedef struct { veh_node_t* head; veh_node_t* tail; } veh_list_t; // VEH hook interface functions for creating and removing hooks. bool add_veh_hook(void* origFunc, newFuncType newFunc, DWORD hook_type=VEH_HK_INT3); bool remove_veh_hook(void* origFunc); // 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. veh_list_t* new_veh_list(); veh_node_t* create_veh_node(void* origFunc, newFuncType newFunc, void* handle, DWORD hook_type); void insert_veh_node(veh_list_t* list, veh_node_t*); 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); #endif // LIST_T_H_INCLUDED