99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| //  Detours Test Program (einst.cpp of einst.exe)
 | |
| //
 | |
| //  Microsoft Research Detours Package
 | |
| //
 | |
| //  Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| //
 | |
| #include <stdio.h>
 | |
| #include <windows.h>
 | |
| #include <detours.h>
 | |
| 
 | |
| struct CPrivateStuff
 | |
| {
 | |
|     DETOUR_SECTION_HEADER   header;
 | |
|     DETOUR_SECTION_RECORD   record;
 | |
|     CHAR                    szMessage[32];
 | |
| };
 | |
| 
 | |
| #ifdef INCLUDE_THIS
 | |
| #pragma data_seg(".detour")
 | |
| 
 | |
| static CPrivateStuff private_stuff = {
 | |
|     DETOUR_SECTION_HEADER_DECLARE(sizeof(CPrivateStuff)),
 | |
|     {
 | |
|         (sizeof(CPrivateStuff) - sizeof(DETOUR_SECTION_HEADER)),
 | |
|         0,
 | |
|         { /* d9ab8a40-f4cc-11d1-b6d7-006097b010e3 */
 | |
|             0xd9ab8a40,
 | |
|             0xf4cc,
 | |
|             0x11d1,
 | |
|             {0xb6, 0xd7, 0x00, 0x60, 0x97, 0xb0, 0x10, 0xe3}
 | |
|         }
 | |
|     },
 | |
|     "The Application!"
 | |
| };
 | |
| #pragma data_seg()
 | |
| #endif
 | |
| 
 | |
| GUID my_guid =
 | |
| { /* d9ab8a40-f4cc-11d1-b6d7-006097b010e3 */
 | |
|     0xd9ab8a40,
 | |
|     0xf4cc,
 | |
|     0x11d1,
 | |
|     {0xb6, 0xd7, 0x00, 0x60, 0x97, 0xb0, 0x10, 0xe3}
 | |
| };
 | |
| 
 | |
| __declspec(dllimport) VOID WINAPI EDll1Function(VOID);
 | |
| __declspec(dllimport) VOID WINAPI EDll2Function(VOID);
 | |
| __declspec(dllimport) VOID WINAPI EDll3Function(VOID);
 | |
| 
 | |
| void FindPayload(HINSTANCE hinst)
 | |
| {
 | |
|     CHAR szModuleName[256];
 | |
|     GetModuleFileNameA(hinst, szModuleName, ARRAYSIZE(szModuleName));
 | |
|     printf("  %p : %s\n", hinst, szModuleName);
 | |
| 
 | |
|     ULONG cbData = 0;
 | |
|     PBYTE pbData = (PBYTE)DetourFindPayload(hinst, my_guid, &cbData);
 | |
| 
 | |
|     if (pbData) {
 | |
|         printf("  %08p..%08p : %50.50s\n",
 | |
|                pbData,
 | |
|                pbData + cbData,
 | |
|                pbData);
 | |
|     }
 | |
| }
 | |
| 
 | |
| int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR lpszCmdLine, int nCmdShow)
 | |
| {
 | |
|     (void)hinst;
 | |
|     (void)hprev;
 | |
|     (void)lpszCmdLine;
 | |
|     (void)nCmdShow;
 | |
| 
 | |
|     printf("Source .EXE:\n");
 | |
|     FindPayload(NULL);
 | |
|     printf("\n");
 | |
| 
 | |
|     printf("DLL and EXE binaries loaded:\n");
 | |
| 
 | |
|     EDll1Function();
 | |
|     EDll2Function();
 | |
|     EDll3Function();
 | |
| 
 | |
|     for (HINSTANCE hiter = NULL; (hiter = DetourEnumerateModules(hiter)) != NULL;) {
 | |
|         FindPayload(hiter);
 | |
|     }
 | |
| 
 | |
|     if ((PVOID)hinst == (PVOID)lpszCmdLine) {
 | |
|         DispatchMessage(NULL);                          // Force load of gdi32.dll
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| //
 | |
| ///////////////////////////////////////////////////////////////// End of File.
 |