This repository has been archived on 2024-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
cathook/include/hooks.hpp
2018-03-29 19:08:31 +02:00

71 lines
1.4 KiB
C++
Executable File

/*
* hooks.h
*
* Created on: Oct 4, 2016
* Author: nullifiedcat
*/
#ifndef HOOKS_H_
#define HOOKS_H_
// Parts of copypasted code
// Credits: Casual_Hacker
#include <stdint.h>
#include <stddef.h>
namespace hooks
{
typedef void *ptr_t;
typedef void *method_t;
typedef method_t *method_table_t;
typedef method_table_t *table_ptr_t;
typedef method_table_t &table_ref_t;
constexpr size_t ptr_size = sizeof(ptr_t);
unsigned CountMethods(method_table_t table);
table_ref_t GetVMT(ptr_t inst, uint32_t offset = 0);
bool IsHooked(ptr_t inst, uint32_t offset = 0);
constexpr uint32_t GUARD = 0xD34DC477;
class VMTHook
{
public:
VMTHook();
~VMTHook();
void Set(ptr_t inst, uint32_t offset = 0);
void Release();
void HookMethod(ptr_t func, uint32_t idx);
void *GetMethod(uint32_t idx) const;
void Apply();
public:
ptr_t object{ nullptr };
table_ptr_t vtable_ptr{ nullptr };
method_table_t vtable_original{ nullptr };
method_table_t vtable_hooked{ nullptr };
};
extern VMTHook panel;
extern VMTHook clientmode;
extern VMTHook clientmode4;
extern VMTHook client;
extern VMTHook netchannel;
extern VMTHook clientdll;
extern VMTHook matsurface;
extern VMTHook studiorender;
extern VMTHook input;
extern VMTHook modelrender;
extern VMTHook baseclientstate;
extern VMTHook baseclientstate8;
extern VMTHook steamfriends;
extern VMTHook materialsystem;
extern VMTHook enginevgui;
extern VMTHook vstd;
}
#endif /* HOOKS_H_ */