Пользователь
			
			
				
					
				
			
		- Статус
 - Оффлайн
 
- Регистрация
 - 5 Фев 2018
 
- Сообщения
 - 134
 
- Реакции
 - 33
 
хуки работают нормально, эндсцену/ресет возвращает норм, а тут треш.
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;
    }
}