75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | //////////////////////////////////////////////////////////////////////////////
 | ||
|  | //
 | ||
|  | //  Detour Test Program (verify.cpp)
 | ||
|  | //
 | ||
|  | //  Microsoft Research Detours Package
 | ||
|  | //
 | ||
|  | //  Copyright (c) Microsoft Corporation.  All rights reserved.
 | ||
|  | //
 | ||
|  | 
 | ||
|  | #include <detours.h>
 | ||
|  | 
 | ||
|  | static VOID Dump(PBYTE pbBytes, LONG nBytes, PBYTE pbTarget) | ||
|  | { | ||
|  |     for (LONG n = 0; n < nBytes; n += 16) { | ||
|  |         printf("    %p: ", pbBytes + n); | ||
|  |         for (LONG m = n; m < n + 16; m++) { | ||
|  |             if (m >= nBytes) { | ||
|  |                 printf("  "); | ||
|  |             } | ||
|  |             else { | ||
|  |                 printf("%02x", pbBytes[m]); | ||
|  |             } | ||
|  |             if (m % 4 == 3) { | ||
|  |                 printf(" "); | ||
|  |             } | ||
|  |         } | ||
|  |         if (n == 0 && pbTarget != DETOUR_INSTRUCTION_TARGET_NONE) { | ||
|  |             printf(" [%p]", pbTarget); | ||
|  |         } | ||
|  |         printf("\n"); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | static VOID Decode(PCSTR pszDesc, PBYTE pbCode, PBYTE pbOther, PBYTE pbPointer, LONG nInst) | ||
|  | { | ||
|  |     if (pbCode != pbPointer) { | ||
|  |         printf("  %s = %p [%p]\n", pszDesc, pbCode, pbPointer); | ||
|  |     } | ||
|  |     else { | ||
|  |         printf("  %s = %p\n", pszDesc, pbCode); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (pbCode == pbOther) { | ||
|  |         printf("    ... unchanged ...\n"); | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     PBYTE pbSrc = pbCode; | ||
|  |     PBYTE pbEnd; | ||
|  |     PVOID pbTarget; | ||
|  |     for (LONG n = 0; n < nInst; n++) { | ||
|  |         pbEnd = (PBYTE)DetourCopyInstruction(NULL, NULL, pbSrc, &pbTarget, NULL); | ||
|  |         Dump(pbSrc, (int)(pbEnd - pbSrc), (PBYTE)pbTarget); | ||
|  |         pbSrc = pbEnd; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | VOID WINAPI Verify(PCHAR pszFunc, PVOID pvPointer) | ||
|  | { | ||
|  |     PVOID pvCode = DetourCodeFromPointer(pvPointer, NULL); | ||
|  | 
 | ||
|  |     Decode(pszFunc, (PBYTE)pvCode, NULL, (PBYTE)pvPointer, 3); | ||
|  | } | ||
|  | 
 | ||
|  | VOID WINAPI VerifyEx(PCHAR pszFunc, PVOID pvPointer, LONG nInst) | ||
|  | { | ||
|  |     PVOID pvCode = DetourCodeFromPointer(pvPointer, NULL); | ||
|  | 
 | ||
|  |     Decode(pszFunc, (PBYTE)pvCode, NULL, (PBYTE)pvPointer, nInst); | ||
|  | } | ||
|  | 
 | ||
|  | //
 | ||
|  | ///////////////////////////////////////////////////////////////// End of File.
 |