--- Daodan/src/Daodan_Patch.c 2009/06/09 12:00:41 346 +++ Daodan/src/Daodan_Patch.c 2013/03/02 23:46:33 677 @@ -1,5 +1,6 @@ #include "Daodan_Patch.h" #include +#include #include bool DDrPatch_MakeJump(void* from, void* to) @@ -8,7 +9,8 @@ bool DDrPatch_MakeJump(void* from, void* if (VirtualProtect(from, 5, PAGE_EXECUTE_READWRITE, &oldp)) { - *(char*)from++ = 0xe9; // jmp rel32 + *((char*)from) = 0xe9; // jmp rel32 + from = (char*)from + 1; *(int*)from = (unsigned int)to - (unsigned int)from - 4; VirtualProtect(from, 5, oldp, &oldp); return true; @@ -23,7 +25,8 @@ bool DDrPatch_MakeCall(void* from, void* if (VirtualProtect(from, 5, PAGE_EXECUTE_READWRITE, &oldp)) { - *(char*)from++ = 0xe8; // call rel32 + *((char*)from) = 0xe8; // call rel32 + from = (char*)from + 1; *(int*)from = (unsigned int)to - (unsigned int)from - 4; VirtualProtect(from, 5, oldp, &oldp); return true; @@ -88,16 +91,30 @@ bool DDrPatch_Int16(short* dest, short v return false; } -bool DDrPatch_StrDup(int* dest, const char* value) +bool DDrPatch__strdup(int* dest, const char* value) { DWORD oldp; if (VirtualProtect(dest, 4, PAGE_EXECUTE_READWRITE, &oldp)) { - *dest = (int)strdup(value); + *dest = (int)_strdup(value); VirtualProtect(dest, 4, oldp, &oldp); return true; } else + return false; +} + +bool DDrPatch_NOOP(char* dest, unsigned int length) +{ + DWORD oldp; + + if (VirtualProtect(dest, length, PAGE_EXECUTE_READWRITE, &oldp)) + { + memset(dest, 0x90, length); + VirtualProtect(dest, length, oldp, &oldp); + return true; + } + else return false; }