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 272 by rossy, Tue Mar 17 09:06:00 2009 UTC vs.
Revision 689 by alloc, Mon Mar 4 15:52:19 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)
7   {
# Line 7 | 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 >                *((unsigned 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 22 | 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 >                *((unsigned 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 31 | Line 35 | bool DDrPatch_MakeCall(void* from, void*
35                  return false;
36   }
37  
38 < bool DDrPatch_String(char* dest, const char* string, int length)
38 > bool DDrPatch_String(char* dest, const unsigned char* string, int length)
39   {
40          DWORD oldp;
41          
# Line 45 | Line 49 | bool DDrPatch_String(char* dest, const c
49                  return false;
50   }
51  
52 < bool DDrPatch_Byte(char* dest, char value)
52 > bool DDrPatch_Byte(char* dest, unsigned char value)
53   {
54          DWORD oldp;
55          
# Line 59 | Line 63 | bool DDrPatch_Byte(char* dest, char valu
63                  return false;
64   }
65  
66 < bool DDrPatch_Int32(int* dest, int value)
66 > bool DDrPatch_Int32(int* dest, unsigned int value)
67   {
68          DWORD oldp;
69          
# Line 73 | Line 77 | bool DDrPatch_Int32(int* dest, int value
77                  return false;
78   }
79  
80 < bool DDrPatch_Int16(short* dest, short value)
80 > bool DDrPatch_Int16(short* dest, unsigned short value)
81   {
82          DWORD oldp;
83          
# Line 84 | Line 88 | bool DDrPatch_Int16(short* dest, short v
88                  return true;
89          }
90          else
91 +                return false;
92 + }
93 +
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);
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)