📄 dumpe.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 + -