57 lines
		
	
	
		
			971 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			971 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // patch GetTickCount64 for running on Windows XP
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| int main(int argc, char** argv) {
 | |
|   unsigned char* buf;
 | |
|   FILE* f=fopen(argv[1],"rb");
 | |
|   if (f==NULL) {
 | |
|     perror("open");
 | |
|     return 1;
 | |
|   }
 | |
| 
 | |
|   fseek(f,0,SEEK_END);
 | |
| 
 | |
|   size_t size=ftell(f);
 | |
|   buf=malloc(size);
 | |
| 
 | |
|   fseek(f,0,SEEK_SET);
 | |
| 
 | |
|   fread(buf,1,size,f);
 | |
|   fclose(f);
 | |
| 
 | |
|   // patch
 | |
|   size_t remain=size;
 | |
|   unsigned char* buf1=buf;
 | |
|   while (size>=14) {
 | |
|     unsigned char* where=memchr(buf1,'G',remain);
 | |
|     if (where==NULL) {
 | |
|       printf("GetTickCount64 not found\n");
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     if (memcmp(where,"GetTickCount64",14)==0) {
 | |
|       printf("found GetTickCount64 - patching...\n");
 | |
|       where[12]=0;
 | |
|       where[13]=0;
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     buf1=where+1;
 | |
|     remain=size-(buf1-buf);
 | |
|   }
 | |
| 
 | |
|   // write
 | |
|   FILE* of=fopen(argv[1],"wb");
 | |
|   if (f==NULL) {
 | |
|     perror("open write");
 | |
|     return 1;
 | |
|   }
 | |
| 
 | |
|   fwrite(buf,1,size,of);
 | |
|   fclose(of);
 | |
| 
 | |
|   return 0;
 | |
| }
 | 
