123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 |
- //////////////////////////////////////////////////////////////////////////////
- //
- // File: detours.h
- // Module: detours.lib
- //
- // Detours for binary functions. Version 1.5 (Build 46)
- //
- // Copyright 1995-2001, Microsoft Corporation
- //
- #pragma once
- #ifndef _DETOURS_H_
- #define _DETOURS_H_
- //#pragma comment(lib, ".\\detours")
- //////////////////////////////////////////////////////////////////////////////
- //
- #ifndef GUID_DEFINED
- #define GUID_DEFINED
- typedef struct _GUID
- {
- DWORD Data1;
- WORD Data2;
- WORD Data3;
- BYTE Data4[ 8 ];
- } GUID;
- #endif // !GUID_DEFINED
- #if defined(__cplusplus)
- #ifndef _REFGUID_DEFINED
- #define _REFGUID_DEFINED
- #define REFGUID const GUID &
- #endif // !_REFGUID_DEFINED
- #else // !__cplusplus
- #ifndef _REFGUID_DEFINED
- #define _REFGUID_DEFINED
- #define REFGUID const GUID * const
- #endif // !_REFGUID_DEFINED
- #endif // !__cplusplus
- //
- //////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- extern "C" {
- #endif // __cplusplus
- /////////////////////////////////////////////////// Instruction Target Macros.
- //
- #define DETOUR_INSTRUCTION_TARGET_NONE ((PBYTE)0)
- #define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PBYTE)~0ul)
- /////////////////////////////////////////////////////////// Trampoline Macros.
- //
- // DETOUR_TRAMPOLINE(trampoline_prototype, target_name)
- //
- // The naked trampoline must be at least DETOUR_TRAMPOLINE_SIZE bytes.
- //
- #define DETOUR_TRAMPOLINE_SIZE 32
- #define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0"
- #define DETOUR_TRAMPOLINE(trampoline,target) \
- static PVOID __fastcall _Detours_GetVA_##target(VOID) \
- { \
- return ⌖ \
- } \
- \
- __declspec(naked) trampoline \
- { \
- __asm { nop };\
- __asm { nop };\
- __asm { call _Detours_GetVA_##target };\
- __asm { jmp eax };\
- __asm { ret };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- }
- #define DETOUR_TRAMPOLINE_EMPTY(trampoline) \
- __declspec(naked) trampoline \
- { \
- __asm { nop };\
- __asm { nop };\
- __asm { xor eax, eax };\
- __asm { mov eax, [eax] };\
- __asm { ret };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- __asm { nop };\
- }
- /////////////////////////////////////////////////////////// Binary Structures.
- //
- #pragma pack(push, 8)
- typedef struct _DETOUR_SECTION_HEADER
- {
- DWORD cbHeaderSize;
- DWORD nSignature;
- DWORD nDataOffset;
- DWORD cbDataSize;
-
- DWORD nOriginalImportVirtualAddress;
- DWORD nOriginalImportSize;
- DWORD nOriginalBoundImportVirtualAddress;
- DWORD nOriginalBoundImportSize;
-
- DWORD nOriginalIatVirtualAddress;
- DWORD nOriginalIatSize;
- DWORD nOriginalSizeOfImage;
- DWORD nReserve;
- } DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER;
- typedef struct _DETOUR_SECTION_RECORD
- {
- DWORD cbBytes;
- DWORD nReserved;
- GUID guid;
- } DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD;
- #pragma pack(pop)
- #define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \
- { \
- sizeof(DETOUR_SECTION_HEADER),\
- DETOUR_SECTION_HEADER_SIGNATURE,\
- sizeof(DETOUR_SECTION_HEADER),\
- (cbSectionSize),\
- \
- 0,\
- 0,\
- 0,\
- 0,\
- \
- 0,\
- 0,\
- 0,\
- 0,\
- }
- ///////////////////////////////////////////////////////////// Binary Typedefs.
- //
- typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)(PVOID pContext,
- PCHAR pszFile,
- PCHAR *ppszOutFile);
- typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)(PVOID pContext,
- PCHAR pszOrigFile,
- PCHAR pszFile,
- PCHAR *ppszOutFile);
- typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)(PVOID pContext,
- DWORD nOrdinal,
- PCHAR pszOrigSymbol,
- PCHAR pszSymbol,
- PCHAR *ppszOutSymbol);
- typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FINAL_CALLBACK)(PVOID pContext);
- typedef BOOL (CALLBACK *PF_DETOUR_BINARY_EXPORT_CALLBACK)(PVOID pContext,
- DWORD nOrdinal,
- PCHAR pszName,
- PBYTE pbCode);
- typedef VOID * PDETOUR_BINARY;
- typedef VOID * PDETOUR_LOADED_BINARY;
- //////////////////////////////////////////////////////// Trampoline Functions.
- //
- PBYTE WINAPI DetourFunction(PBYTE pbTargetFunction,
- PBYTE pbDetourFunction);
- BOOL WINAPI DetourFunctionWithEmptyTrampoline(PBYTE pbTrampoline,
- PBYTE pbTarget,
- PBYTE pbDetour);
- BOOL WINAPI DetourFunctionWithEmptyTrampolineEx(PBYTE pbTrampoline,
- PBYTE pbTarget,
- PBYTE pbDetour,
- PBYTE *ppbRealTrampoline,
- PBYTE *ppbRealTarget,
- PBYTE *ppbRealDetour);
- BOOL WINAPI DetourFunctionWithTrampoline(PBYTE pbTrampoline,
- PBYTE pbDetour);
- BOOL WINAPI DetourFunctionWithTrampolineEx(PBYTE pbTrampoline,
- PBYTE pbDetour,
- PBYTE *ppbRealTrampoline,
- PBYTE *ppbRealTarget);
- BOOL WINAPI DetourRemove(PBYTE pbTrampoline, PBYTE pbDetour);
- ////////////////////////////////////////////////////////////// Code Functions.
- //
- PBYTE WINAPI DetourFindFunction(PCHAR pszModule, PCHAR pszFunction);
- PBYTE WINAPI DetourGetFinalCode(PBYTE pbCode, BOOL fSkipJmp);
- PBYTE WINAPI DetourCopyInstruction(PBYTE pbDst, PBYTE pbSrc, PBYTE *ppbTarget);
- PBYTE WINAPI DetourCopyInstructionEx(PBYTE pbDst,
- PBYTE pbSrc,
- PBYTE *ppbTarget,
- LONG *plExtra);
- ///////////////////////////////////////////////////// Loaded Binary Functions.
- //
- HMODULE WINAPI DetourEnumerateModules(HMODULE hModuleLast);
- PBYTE WINAPI DetourGetEntryPoint(HMODULE hModule);
- BOOL WINAPI DetourEnumerateExports(HMODULE hModule,
- PVOID pContext,
- PF_DETOUR_BINARY_EXPORT_CALLBACK pfExport);
- PBYTE WINAPI DetourFindPayload(HMODULE hModule, REFGUID rguid, DWORD *pcbData);
- DWORD WINAPI DetourGetSizeOfPayloads(HMODULE hModule);
- ///////////////////////////////////////////////// Persistent Binary Functions.
- //
- BOOL WINAPI DetourBinaryBindA(PCHAR pszFile, PCHAR pszDll, PCHAR pszPath);
- BOOL WINAPI DetourBinaryBindW(PWCHAR pwzFile, PWCHAR pwzDll, PWCHAR pwzPath);
- #ifdef UNICODE
- #define DetourBinaryBind DetourBinaryBindW
- #else
- #define DetourBinaryBind DetourBinaryBindA
- #endif // !UNICODE
- PDETOUR_BINARY WINAPI DetourBinaryOpen(HANDLE hFile);
- PBYTE WINAPI DetourBinaryEnumeratePayloads(PDETOUR_BINARY pBinary,
- GUID *pGuid,
- DWORD *pcbData,
- DWORD *pnIterator);
- PBYTE WINAPI DetourBinaryFindPayload(PDETOUR_BINARY pBinary,
- REFGUID rguid,
- DWORD *pcbData);
- PBYTE WINAPI DetourBinarySetPayload(PDETOUR_BINARY pBinary,
- REFGUID rguid,
- PBYTE pbData,
- DWORD cbData);
- BOOL WINAPI DetourBinaryDeletePayload(PDETOUR_BINARY pBinary, REFGUID rguid);
- BOOL WINAPI DetourBinaryPurgePayloads(PDETOUR_BINARY pBinary);
- BOOL WINAPI DetourBinaryResetImports(PDETOUR_BINARY pBinary);
- BOOL WINAPI DetourBinaryEditImports(PDETOUR_BINARY pBinary,
- PVOID pContext,
- PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway,
- PF_DETOUR_BINARY_FILE_CALLBACK pfFile,
- PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol,
- PF_DETOUR_BINARY_FINAL_CALLBACK pfFinal);
- BOOL WINAPI DetourBinaryWrite(PDETOUR_BINARY pBinary, HANDLE hFile);
- BOOL WINAPI DetourBinaryClose(PDETOUR_BINARY pBinary);
- /////////////////////////////////////////////// First Chance Exception Filter.
- //
- LPTOP_LEVEL_EXCEPTION_FILTER WINAPI
- DetourFirstChanceExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelFilter);
- ///////////////////////////////////////////////// Create Process & Inject Dll.
- //
- typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA)
- (LPCSTR lpApplicationName,
- LPSTR lpCommandLine,
- LPSECURITY_ATTRIBUTES lpProcessAttributes,
- LPSECURITY_ATTRIBUTES lpThreadAttributes,
- BOOL bInheritHandles,
- DWORD dwCreationFlags,
- LPVOID lpEnvironment,
- LPCSTR lpCurrentDirectory,
- LPSTARTUPINFOA lpStartupInfo,
- LPPROCESS_INFORMATION lpProcessInformation);
- typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW)
- (LPCWSTR lpApplicationName,
- LPWSTR lpCommandLine,
- LPSECURITY_ATTRIBUTES lpProcessAttributes,
- LPSECURITY_ATTRIBUTES lpThreadAttributes,
- BOOL bInheritHandles,
- DWORD dwCreationFlags,
- LPVOID lpEnvironment,
- LPCWSTR lpCurrentDirectory,
- LPSTARTUPINFOW lpStartupInfo,
- LPPROCESS_INFORMATION lpProcessInformation);
-
- BOOL WINAPI DetourCreateProcessWithDllA(LPCSTR lpApplicationName,
- LPSTR lpCommandLine,
- LPSECURITY_ATTRIBUTES lpProcessAttributes,
- LPSECURITY_ATTRIBUTES lpThreadAttributes,
- BOOL bInheritHandles,
- DWORD dwCreationFlags,
- LPVOID lpEnvironment,
- LPCSTR lpCurrentDirectory,
- LPSTARTUPINFOA lpStartupInfo,
- LPPROCESS_INFORMATION lpProcessInformation,
- LPCSTR lpDllName,
- PDETOUR_CREATE_PROCESS_ROUTINEA
- pfCreateProcessA);
- BOOL WINAPI DetourCreateProcessWithDllW(LPCWSTR lpApplicationName,
- LPWSTR lpCommandLine,
- LPSECURITY_ATTRIBUTES lpProcessAttributes,
- LPSECURITY_ATTRIBUTES lpThreadAttributes,
- BOOL bInheritHandles,
- DWORD dwCreationFlags,
- LPVOID lpEnvironment,
- LPCWSTR lpCurrentDirectory,
- LPSTARTUPINFOW lpStartupInfo,
- LPPROCESS_INFORMATION lpProcessInformation,
- LPCWSTR lpDllName,
- PDETOUR_CREATE_PROCESS_ROUTINEW
- pfCreateProcessW);
-
- #ifdef UNICODE
- #define DetourCreateProcessWithDll DetourCreateProcessWithDllW
- #define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW
- #else
- #define DetourCreateProcessWithDll DetourCreateProcessWithDllA
- #define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA
- #endif // !UNICODE
- BOOL WINAPI DetourContinueProcessWithDllA(HANDLE hProcess, LPCSTR lpDllName);
- BOOL WINAPI DetourContinueProcessWithDllW(HANDLE hProcess, LPCWSTR lpDllName);
- #ifdef UNICODE
- #define DetourContinueProcessWithDll DetourContinueProcessWithDllW
- #else
- #define DetourContinueProcessWithDll DetourContinueProcessWithDllA
- #endif // !UNICODE
- //
- //////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- }
- #endif // __cplusplus
- /////////////////////////////////////////////////////////////////// Old Names.
- //
- #define ContinueProcessWithDll DetourContinueProcessWithDll
- #define ContinueProcessWithDllA DetourContinueProcessWithDllA
- #define ContinueProcessWithDllW DetourContinueProcessWithDllW
- #define CreateProcessWithDll DetourCreateProcessWithDll
- #define CreateProcessWithDllA DetourCreateProcessWithDllA
- #define CreateProcessWithDllW DetourCreateProcessWithDllW
- #define DETOUR_TRAMPOLINE_WO_TARGET DETOUR_TRAMPOLINE_EMPTY
- #define DetourBinaryPurgePayload DetourBinaryPurgePayloads
- #define DetourEnumerateExportsForInstance DetourEnumerateExports
- #define DetourEnumerateInstances DetourEnumerateModules
- #define DetourFindEntryPointForInstance DetourGetEntryPoint
- #define DetourFindFinalCode DetourGetFinalCode
- #define DetourFindPayloadInBinary DetourFindPayload
- #define DetourGetSizeOfBinary DetourGetSizeOfPayloads
- #define DetourRemoveWithTrampoline DetourRemove
- #define PCREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINE
- #define PCREATE_PROCESS_ROUTINEA PDETOUR_CREATE_PROCESS_ROUTINEA
- #define PCREATE_PROCESS_ROUTINEW PDETOUR_CREATE_PROCESS_ROUTINEW
- //
- //////////////////////////////////////////////// Detours Internal Definitions.
- //
- #ifdef __cplusplus
- #ifdef DETOURS_INTERNAL
- //////////////////////////////////////////////////////////////////////////////
- //
- #ifdef IMAGEAPI // defined by IMAGEHLP.H
- typedef LPAPI_VERSION (NTAPI *PF_ImagehlpApiVersionEx)(LPAPI_VERSION AppVersion);
- typedef BOOL (NTAPI *PF_SymInitialize)(IN HANDLE hProcess,
- IN LPSTR UserSearchPath,
- IN BOOL fInvadeProcess);
- typedef DWORD (NTAPI *PF_SymSetOptions)(IN DWORD SymOptions);
- typedef DWORD (NTAPI *PF_SymGetOptions)(VOID);
- typedef BOOL (NTAPI *PF_SymLoadModule)(IN HANDLE hProcess,
- IN HANDLE hFile,
- IN PSTR ImageName,
- IN PSTR ModuleName,
- IN DWORD BaseOfDll,
- IN DWORD SizeOfDll);
- typedef BOOL (NTAPI *PF_SymGetModuleInfo)(IN HANDLE hProcess,
- IN DWORD dwAddr,
- OUT PIMAGEHLP_MODULE ModuleInfo);
- typedef BOOL (NTAPI *PF_SymGetSymFromName)(IN HANDLE hProcess,
- IN LPSTR Name,
- OUT PIMAGEHLP_SYMBOL Symbol);
- typedef BOOL (NTAPI *PF_BindImage)(IN LPSTR pszImageName,
- IN LPSTR pszDllPath,
- IN LPSTR pszSymbolPath);
- typedef struct _DETOUR_SYM_INFO
- {
- HANDLE hProcess;
- HMODULE hImageHlp;
- PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx;
- PF_SymInitialize pfSymInitialize;
- PF_SymSetOptions pfSymSetOptions;
- PF_SymGetOptions pfSymGetOptions;
- PF_SymLoadModule pfSymLoadModule;
- PF_SymGetModuleInfo pfSymGetModuleInfo;
- PF_SymGetSymFromName pfSymGetSymFromName;
- PF_BindImage pfBindImage;
- } DETOUR_SYM_INFO, *PDETOUR_SYM_INFO;
- PDETOUR_SYM_INFO DetourLoadImageHlp(VOID);
- #endif // IMAGEAPI
- //////////////////////////////////////////////////////////////////////////////
- //
- class CDetourEnableWriteOnCodePage
- {
- public:
- CDetourEnableWriteOnCodePage(PBYTE pbCode, LONG cbCode = DETOUR_TRAMPOLINE_SIZE)
- {
- m_pbCode = pbCode;
- m_cbCode = cbCode;
- m_dwOldPerm = 0;
- m_hProcess = GetCurrentProcess();
- if (m_pbCode && m_cbCode) {
- if (!FlushInstructionCache(m_hProcess, pbCode, cbCode)) {
- return;
- }
- if (!VirtualProtect(pbCode,
- cbCode,
- PAGE_EXECUTE_READWRITE,
- &m_dwOldPerm)) {
- return;
- }
- }
- }
- ~CDetourEnableWriteOnCodePage()
- {
- if (m_dwOldPerm && m_pbCode && m_cbCode) {
- DWORD dwTemp = 0;
- if (!FlushInstructionCache(m_hProcess, m_pbCode, m_cbCode)) {
- return;
- }
- if (!VirtualProtect(m_pbCode, m_cbCode, m_dwOldPerm, &dwTemp)) {
- return;
- }
- }
- }
- BOOL SetPermission(DWORD dwPerms)
- {
- if (m_dwOldPerm && m_pbCode && m_cbCode) {
- m_dwOldPerm = dwPerms;
- return TRUE;
- }
- return FALSE;
- }
- BOOL IsValid(VOID)
- {
- return m_pbCode && m_cbCode && m_dwOldPerm;
- }
- private:
- HANDLE m_hProcess;
- PBYTE m_pbCode;
- LONG m_cbCode;
- DWORD m_dwOldPerm;
- };
- //////////////////////////////////////////////////////////////////////////////
- //
- inline PBYTE DetourGenMovEax(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xB8;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEbx(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xBB;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEcx(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xB9;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEdx(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xBA;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEsi(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xBE;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEdi(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xBF;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEbp(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xBD;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenMovEsp(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0xBC;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenPush(PBYTE pbCode, UINT32 nValue)
- {
- *pbCode++ = 0x68;
- *((UINT32*&)pbCode)++ = nValue;
- return pbCode;
- }
- inline PBYTE DetourGenPushad(PBYTE pbCode)
- {
- *pbCode++ = 0x60;
- return pbCode;
- }
- inline PBYTE DetourGenPopad(PBYTE pbCode)
- {
- *pbCode++ = 0x61;
- return pbCode;
- }
- inline PBYTE DetourGenJmp(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0)
- {
- if (pbJmpSrc == 0) {
- pbJmpSrc = pbCode;
- }
- *pbCode++ = 0xE9;
- *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5);
- return pbCode;
- }
- inline PBYTE DetourGenCall(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0)
- {
- if (pbJmpSrc == 0) {
- pbJmpSrc = pbCode;
- }
- *pbCode++ = 0xE8;
- *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5);
- return pbCode;
- }
- inline PBYTE DetourGenBreak(PBYTE pbCode)
- {
- *pbCode++ = 0xcc;
- return pbCode;
- }
- inline PBYTE DetourGenRet(PBYTE pbCode)
- {
- *pbCode++ = 0xc3;
- return pbCode;
- }
- inline PBYTE DetourGenNop(PBYTE pbCode)
- {
- *pbCode++ = 0x90;
- return pbCode;
- }
- #endif DETOURS_INTERAL
- #endif // __cplusplus
- #endif // _DETOURS_H_
- //
- //////////////////////////////////////////////////////////////// End of File.
|