⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dumpe.cpp

📁 微软提供的截取Win32 API函数的开发包和例子detours-src-1.2.rar
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////////////
//
//	Module:		image.exe
//	File:		image.cpp
//	Author:		Galen C. Hunt
//	Copyright:	1996-1998, Microsoft Corporation
//
//	http://www.research.microsoft.com/sn/detours
//
#define UNICODE

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <ole2.h>
#include <shellapi.h>
#include "detours.h"

#define arrayof(x)		(sizeof(x)/sizeof(x[0]))

//////////////////////////////////////////////////////////////////////////////
//
#ifndef _DEFINED_ASMBREAK_
#define _DEFINED_ASMBREAK_
#define ASMBREAK()	__asm { int 3 }
//#define ASMBREAK()	DebugBreak()
#endif	// _DEFINED_ASMBREAK_

#ifndef NODEBUG
#undef ASSERT
VOID DetourAssertMessage(CONST PCHAR szMsg, CONST PCHAR szFile, DWORD nLine);

#define ASSERT(x)   \
do { if (!(x)) { DetourAssertMessage(#x, __FILE__, __LINE__); ASMBREAK(); }} while (0)
	;
#undef ASSERTX
#define ASSERTX(x)   \
do { if (!(x)) { DetourAssertMessage(#x, __FILE__, __LINE__); PCHAR p=(PCHAR)(x); *p = 1; }} while (0)
	;
#else	// NODEBUG
#undef ASSERT
#define ASSERT(x)
#undef ASSERTX
#define ASSERTX(x)
#endif	// NODEBUG
//
//////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////// Error Messages.
//
VOID DetourAssertMessage(CONST PCHAR szMsg, CONST PCHAR szFile, DWORD nLine)
{
	printf("ASSERT(%s) failed in %s, line %d.", szMsg, szFile, nLine);
}



static BOOL CALLBACK ExportCallback(PVOID pContext,
									DWORD nOrdinal,
									PCHAR pszSymbol,
									PBYTE pbTarget)
{
	printf("        %4d %-30s %08x\n",
		   nOrdinal,
		   pszSymbol ? pszSymbol : "[NO NAME]",
		   pbTarget);
	return TRUE;
}

BOOL DumpFile(PWCHAR pwzPath)
{
	HINSTANCE hInst = LoadLibrary(pwzPath);
	if (hInst == NULL) {
		printf("Unable to load %s: Error %d\n", pwzPath, GetLastError());
		return FALSE;
	}
	
	printf("%ls @ %08lx\n", pwzPath, hInst);
	
	PBYTE pbEntry = DetourFindEntryPointForInstance(hInst);
	printf("    EntryPoint: %08lx\n", pbEntry);
	
	DetourEnumerateExportsForInstance(hInst, NULL, ExportCallback);

	return TRUE;
}

//////////////////////////////////////////////////////////////////////////////
//
void PrintUsage(void)
{
	printf("Usage:\n"
		   "    dumpe [.dll files]\n"
		   "Misc. Options:\n"
		   "    /h       : Help screen.\n");
}

//////////////////////////////////////////////////////////////////////// main.
//
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR lpszCmdLine, int nCmdShow)
{
	int argc = 0;
	WCHAR **argv = CommandLineToArgvW(GetCommandLineW(), &argc);

	BOOLEAN fNeedHelp = FALSE;
	DWORD dwFlags = 0;

	for (int arg = 1; arg < argc; arg++) {
		if (argv[arg][0] == '-' || argv[arg][0] == '/') {
			WCHAR *argn = argv[arg] + 1;
			WCHAR *argp = argn;
			while (*argp && *argp != ':')
				argp++;
			if (*argp == ':')
				*argp++ = '\0';
			
			switch (argn[0]) {

			case 'h':
			case '?':
				fNeedHelp = TRUE;
				break;
				
			default:
				fNeedHelp = TRUE;
				printf("Bad argument: %ls:%ls\n", argn, argp);
				break;
			}
		}
		else {
			DumpFile(argv[arg]);
		}
	}
	if (fNeedHelp || argc == 1) {
		PrintUsage();
		return 1;
	}
	return 0;
}

// End of File

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -