ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/src/Daodan_Patch.c
(Generate patch)

Comparing Daodan/src/Daodan_Patch.c (file contents):
Revision 346 by rossy, Tue Jun 9 12:00:41 2009 UTC vs.
Revision 677 by alloc, Sat Mar 2 23:46:33 2013 UTC

# Line 1 | Line 1
1   #include "Daodan_Patch.h"
2   #include <windows.h>
3 + #include <stdlib.h>
4   #include <string.h>
5  
6   bool DDrPatch_MakeJump(void* from, void* to)
# Line 8 | Line 9 | bool DDrPatch_MakeJump(void* from, void*
9          
10          if (VirtualProtect(from, 5, PAGE_EXECUTE_READWRITE, &oldp))
11          {
12 <                *(char*)from++ = 0xe9; // jmp rel32
12 >                *((char*)from) = 0xe9; // jmp rel32
13 >                from = (char*)from + 1;
14                  *(int*)from = (unsigned int)to - (unsigned int)from - 4;
15                  VirtualProtect(from, 5, oldp, &oldp);
16                  return true;
# Line 23 | Line 25 | bool DDrPatch_MakeCall(void* from, void*
25          
26          if (VirtualProtect(from, 5, PAGE_EXECUTE_READWRITE, &oldp))
27          {
28 <                *(char*)from++ = 0xe8; // call rel32
28 >                *((char*)from) = 0xe8; // call rel32
29 >                from = (char*)from + 1;
30                  *(int*)from = (unsigned int)to - (unsigned int)from - 4;
31                  VirtualProtect(from, 5, oldp, &oldp);
32                  return true;
# Line 88 | Line 91 | bool DDrPatch_Int16(short* dest, short v
91                  return false;
92   }
93  
94 < bool DDrPatch_StrDup(int* dest, const char* value)
94 > bool DDrPatch__strdup(int* dest, const char* value)
95   {
96          DWORD oldp;
97          
98          if (VirtualProtect(dest, 4, PAGE_EXECUTE_READWRITE, &oldp))
99          {
100 <                *dest = (int)strdup(value);
100 >                *dest = (int)_strdup(value);
101                  VirtualProtect(dest, 4, oldp, &oldp);
102                  return true;
103          }
104          else
105 +                return false;
106 + }
107 +
108 + bool DDrPatch_NOOP(char* dest, unsigned int length)
109 + {
110 +        DWORD oldp;
111 +        
112 +        if (VirtualProtect(dest, length, PAGE_EXECUTE_READWRITE, &oldp))
113 +        {
114 +                memset(dest, 0x90, length);
115 +                VirtualProtect(dest, length, oldp, &oldp);
116 +                return true;
117 +        }
118 +        else
119                  return false;
120   }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)