forked from ReScrap/ScrapHacks
		
	update ScrapHacks: remove unused VMT_Hook
This commit is contained in:
		
							parent
							
								
									03f04ae062
								
							
						
					
					
						commit
						5f55c75a4b
					
				
					 1 changed files with 0 additions and 101 deletions
				
			
		|  | @ -1,101 +0,0 @@ | |||
| 
 | ||||
| #pragma once | ||||
| class VMT_Hook | ||||
| { | ||||
| private: | ||||
| 	MEMORY_BASIC_INFORMATION mbi; | ||||
| 	void *orig; | ||||
| 	void *detour; | ||||
| 	DWORD *vtable; | ||||
| 	size_t ord; | ||||
| 	bool enabled; | ||||
| 	static map<uintptr_t, shared_ptr<VMT_Hook>> hooks; | ||||
| 	static DWORD *GetVTable(void *addr) | ||||
| 	{ | ||||
| 		return (DWORD *)*(DWORD *)addr; | ||||
| 	}; | ||||
| 
 | ||||
| public: | ||||
| 	VMT_Hook(void *obj, size_t ord, void *detour) | ||||
| 	{ | ||||
| 		this->vtable = GetVTable(obj); | ||||
| 		this->detour = detour; | ||||
| 		this->orig = reinterpret_cast<void *>(vtable[ord]); | ||||
| 		this->ord = ord; | ||||
| 		this->enabled = false; | ||||
| 
 | ||||
| 		VirtualQuery(&this->vtable[this->ord], &mbi, sizeof(mbi)); | ||||
| 		cout << "Hooking: " << this->vtable << "[" << this->ord << "]: (" << this->orig << " -> " << this->detour << ")" << endl; | ||||
| 	} | ||||
| 
 | ||||
| 	~VMT_Hook() | ||||
| 	{ | ||||
| 		cout << "Unhooking: " << this->vtable << "[" << this->ord << "]: (" << this->orig << " -> " << this->detour << ")" << endl; | ||||
| 		this->disable(); | ||||
| 	} | ||||
| 
 | ||||
| 	static void create(void *obj, size_t ord, void *detour) | ||||
| 	{ | ||||
| 		uintptr_t key = reinterpret_cast<uintptr_t>(detour); | ||||
| 		hooks[key] = make_shared<VMT_Hook>(obj, ord, detour); | ||||
| 		hooks[key]->enable(); | ||||
| 	} | ||||
| 
 | ||||
| 	static shared_ptr<VMT_Hook> get(void *func) | ||||
| 	{ | ||||
| 		uintptr_t addr = reinterpret_cast<uintptr_t>(func); | ||||
| 		return VMT_Hook::get(addr); | ||||
| 	} | ||||
| 
 | ||||
| 	static shared_ptr<VMT_Hook> get(uintptr_t addr) | ||||
| 	{ | ||||
| 		return hooks.at(addr); | ||||
| 	} | ||||
| 
 | ||||
| 	static size_t drop(void *func) | ||||
| 	{ | ||||
| 		uintptr_t addr = reinterpret_cast<uintptr_t>(func); | ||||
| 		return VMT_Hook::drop(addr); | ||||
| 	} | ||||
| 
 | ||||
| 	static size_t drop(uintptr_t addr) | ||||
| 	{ | ||||
| 		return hooks.erase(addr); | ||||
| 	} | ||||
| 
 | ||||
| 	static void clear() | ||||
| 	{ | ||||
| 		return hooks.clear(); | ||||
| 	} | ||||
| 
 | ||||
| 	void disable() | ||||
| 	{ | ||||
| 		if (enabled) | ||||
| 		{ | ||||
| 			cout << "Disabling: " << this->vtable << "[" << this->ord << "]: (" << this->orig << " -> " << this->detour << ")" << endl; | ||||
| 			VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, NULL); | ||||
| 			this->vtable[ord] = reinterpret_cast<DWORD>(this->orig); | ||||
| 			VirtualProtect(mbi.BaseAddress, mbi.RegionSize, mbi.Protect, NULL); | ||||
| 			enabled = false; | ||||
| 		} | ||||
| 	} | ||||
| 	void enable() | ||||
| 	{ | ||||
| 		if (!enabled) | ||||
| 		{ | ||||
| 			cout << "Enabling: " << this->vtable << "[" << this->ord << "]: (" << this->orig << " -> " << this->detour << ")" << endl; | ||||
| 			VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, NULL); | ||||
| 			this->vtable[ord] = reinterpret_cast<DWORD>(this->detour); | ||||
| 			VirtualProtect(mbi.BaseAddress, mbi.RegionSize, mbi.Protect, NULL); | ||||
| 			enabled = true; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	template <typename T> | ||||
| 	T func() | ||||
| 	{ | ||||
| 		return reinterpret_cast<T>(this->orig); | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| map<uintptr_t, shared_ptr<VMT_Hook>> VMT_Hook::hooks; | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue