-
Автор темы
- #1
oFunc крашит.
хуки работают нормально, эндсцену/ресет возвращает норм, а тут треш.
VmtManager.h
VmtManager.cpp
g_vGuiSurface != nullptr!!!!
хуки работают нормально, эндсцену/ресет возвращает норм, а тут треш.
VmtManager.h
C++:
class VmtManager
{
public:
VmtManager()
{
}
VmtManager(void* base);
~VmtManager()
{
delete _newTable;
count = 0;
}
bool setup(void* classN);
template<typename T>
void hook_index(int index, T fun)
{
_newTable[index] = reinterpret_cast<uintptr_t>(fun);
DWORD old;
VirtualProtect(class_base, sizeof(DWORD)*count, PAGE_EXECUTE_READWRITE, &old);
*class_base = (uintptr_t*)_newTable;
VirtualProtect(class_base, sizeof(DWORD)*count, old, &old);
}
template<typename T>
T get_original(int index)
{
return (T)_original[index];
}
private:
uintptr_t** class_base = nullptr;
uintptr_t* _original = nullptr;
uintptr_t* AllTables = nullptr;
DWORD* _newTable = nullptr;
int count = 0;
};
namespace HooksInline
{
inline VmtManager direct3d_hook;
inline VmtManager secondHook;
inline VmtManager surfaceHook;
}
C++:
#include "VmtManager.h"
#include "project.hpp"
bool VmtManager::setup(void* classN)
{
if (classN != nullptr)
{
class_base = reinterpret_cast<uintptr_t**>(classN);
_original = *class_base;
while (reinterpret_cast<uintptr_t**>(*class_base)[count])
{
count++;
}
_newTable = new DWORD[sizeof(DWORD) * count];//ñîçäàíèå êîíòåéíåðà â áëîêà ïàìÿòè, ðàâíîìó âñåìó êëàññó áåéñ.
memcpy(_newTable, _original, sizeof(DWORD) * count);
return true;
}
}