Esempio n. 1
0
	bool patch(uintptr_t address, const char* value, size_t value_size)
	{
		detail::memory_protect protect_(address, value_size);
		if (protect_.success())
		{
			DWORD written;
			if (::WriteProcessMemory(::GetCurrentProcess(), (LPVOID)address, value, value_size, &written))
			{
				::FlushInstructionCache(::GetCurrentProcess(), (LPVOID)address, value_size);
				return true;
			}
		}
		return false;
	}
Esempio n. 2
0
	uintptr_t replace_pointer(uintptr_t address, uintptr_t new_value)
	{
		uintptr_t old_value = 0;

		memory_protect protect_(address);
		if (protect_.success())
		{
			DWORD written = 0;
			if (!::ReadProcessMemory(::GetCurrentProcess(), (LPCVOID)address, &old_value, sizeof(uintptr_t), &written))
			{
				return 0;
			}

			if (!::WriteProcessMemory(::GetCurrentProcess(), (LPVOID)address, &new_value, sizeof(uintptr_t), &written))
			{
				return 0;
			}
		}

		return old_value;
	}