mirror of
https://github.com/vosen/ZLUDA.git
synced 2025-04-24 01:34:43 +00:00
74 lines
1.9 KiB
C++
Vendored
74 lines
1.9 KiB
C++
Vendored
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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.
|