亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? imagemodule.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : imagemodule.cpp				                                     //
//  Description: Using ImageHlp API for debug symbol querying                        //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define NOCRYPT
#define WIN32_LEAN_AND_MEAN

// the newer imagehlp.h includes <wintrust.h>, the two macros fakes the include
#define WINTRUST_H
#define LPWIN_CERTIFICATE LPVOID

#include <windows.h>
#include <imagehlp.h>
#include <assert.h>
#include <tchar.h>
#include <stdio.h>
#include <stdarg.h>
#include <time.h>

#include "ImageModule.h"

KImageModule::KImageModule(HWND hOutput)
{
    m_hProcess		  = GetCurrentProcess();
	m_hOutput		  = hOutput;

	m_bDecoratedNames = false;
	m_bShowFPO		  = false;
	m_bForPogy		  = false;
	m_bLoaded		  = false;
}


KImageModule::~KImageModule()
{
    Unload();
}


bool KImageModule::Load(char * filename, char *sympath)
{
	_tcscpy(m_modulename, filename);

	memset(& m_image, 0, sizeof(m_image));
	
	m_imagebase_loaded = (DWORD) GetModuleHandle(filename);

	if ( m_imagebase_loaded ) // module is already loaded, for example GDI32.DLL
	{
		m_imagebase_default = m_imagebase_loaded;
		m_bLoaded			= false;

		PIMAGE_NT_HEADERS pNTHeader = ImageNtHeader((void *)m_imagebase_loaded);

		Output("%s already loaded at 0x%x %s\n", filename, m_imagebase_loaded,
			ctime( (time_t *) & pNTHeader->FileHeader.TimeDateStamp));
	}
	else
	{
		if ( MapAndLoad(filename, NULL, & m_image, FALSE, TRUE) )
			Output("%s loaded at 0x%x %s\n", m_image.ModuleName, m_image.MappedAddress, 
				ctime( (time_t *) & m_image.FileHeader->FileHeader.TimeDateStamp));
		else
		{
			Output("Unable to load %s\n", filename);

			return false;
		}

		m_imagebase_loaded  = (DWORD) m_image.MappedAddress;
		m_imagebase_default = m_image.FileHeader->OptionalHeader.ImageBase;
		m_bLoaded           = true;
    }

    
	if ( !SymInitialize(m_hProcess, sympath, FALSE) ) 
	{
		Output("SymInitialize failed\n\n");
        return false;
	}

	
	m_symbolbase = SymLoadModule(m_hProcess, NULL, filename, 0, m_imagebase_loaded, 0 );
	
	if ( m_symbolbase==0 )
	{
		Output("SymLoadModule failed\n\n");
        return false;
	}

    IMAGEHLP_MODULE im;
    im.SizeOfStruct = sizeof(im);

    SymGetModuleInfo( m_hProcess, m_symbolbase, &im );
	
	Output("""%s"" loaded. %s\n", im.LoadedImageName, ctime((time_t *) & im.TimeDateStamp));
	
	return true;
}


void KImageModule::Unload(void)
{
    SymUnloadModule(m_hProcess, m_symbolbase);
    SymCleanup(m_hProcess);

	if ( m_image.ModuleName )
		UnMapAndLoad(& m_image);
} 


const IMAGEHLP_SYMBOL * KImageModule::ImageGetSymbol(const char * name)
{
	char localname[MAX_PATH];

    memset(m_is, 0, sizeof(m_is));
    m_is[0].SizeOfStruct  = sizeof(IMAGEHLP_SYMBOL);
    m_is[0].MaxNameLength = sizeof(m_is) - sizeof(m_is[0]);
    
	// The silly implementation in imagehlp.dll will try to change the '!' in name
	// to 0, which generates an access violation, because name would came from read-only
	// constant data. Make a local copy to solve the problem
	strcpy(localname, name);
    
	if ( SymGetSymFromName(m_hProcess, localname, m_is) )
    {
		// On Win2K RC1, m_is[0].Address is a valid address, m_pidi->ReservedMappedBase=NULL
		if ( m_symbolbase )
			m_is[0].Address += m_imagebase_default - m_symbolbase;
        
        return & m_is[0];
    }
    else
    {
        DWORD err = GetLastError();
        return NULL;
    }
}
 

bool KImageModule::LoadSystemModule(char * module, char* extension)
{
	char SymbolDir[MAX_PATH];

	GetSystemDirectory(SymbolDir, sizeof(SymbolDir)); // c:\winnt\system32

	char * p = strchr(SymbolDir, '\\');     // first '\\'
	while ( p && strchr(p+1, '\\') )       // last '\\'	
		p = strchr(p+1, '\\');

	if ( p )								// c:\winnt
		* p = NULL;

	strcat(SymbolDir, "\\symbols\\");
	strcat(SymbolDir, extension);

	return Load(module, SymbolDir);
}


void KImageModule::ShowFPO(ULONG SymbolAddress)
{
	if ( m_bShowFPO )
	{
		const FPO_DATA * pFPO = (const FPO_DATA *) SymFunctionTableAccess(m_hProcess, SymbolAddress);
		
		if ( pFPO )
		{
			Output("         ");
			Output("s=%4d l=%2d, p=%2d, e=%2d, r=%2d, s=%d, b=%d, f=%d\n",
					pFPO->cbProcSize,
					pFPO->cdwLocals,
					pFPO->cdwParams,
					pFPO->cbProlog,
					pFPO->cbRegs,
					pFPO->fHasSEH,
					pFPO->fUseBP,
					pFPO->cbFrame);
		}
	}
}


void KImageModule::TranslateName(LPSTR SymbolName)
{
	// If "decorated" names were specified, and if the name is "decorated," 
	// undecorate it so that a human readable version can be displayed. 
	
	if ( m_bDecoratedNames /* && ('?' == *SymbolName) */ ) 
	{ 
		char szUndecoratedName[0x400]; // Make symbol name buffers for the 
		char szDecoratedName[0x400]; // decorated & undecorated versions 

		// Make a copy of the original SymbolName, so that we can modify it 

		lstrcpy( szDecoratedName, SymbolName ); 

		PSTR pEnd = szDecoratedName + lstrlen( szDecoratedName ); 

		// Strip everything off the end until we reach a 'Z' 

		//	while ( (pEnd > szDecoratedName) && (*pEnd != 'Z') ) 
		//		*pEnd-- = 0; 

		// Call the IMAGEHLP function to undecorate the name 

		if ( 0 != UnDecorateSymbolName( szDecoratedName, szUndecoratedName, 
			sizeof(szUndecoratedName), UNDNAME_COMPLETE | UNDNAME_32_BIT_DECODE ) ) 
		{ 
			// End the output line with the undecorated name 
			Output("         %s\n", szUndecoratedName ); 
		} 
	} 
}


// translate symbol va address symbva to RVA symbva - mappedBase
// translate RVA to pointer within the loaded image
const unsigned char * KImageModule::GetImagePointer(unsigned symbva)
{
	assert(m_imagebase_loaded);

	return (const unsigned char *) 
		ImageRvaToVa(m_image.FileHeader, (void *) m_imagebase_loaded, 
		                symbva - m_imagebase_default, NULL);
}

// translate actual loaded pointer to to pointer within the loaded image
const unsigned char * KImageModule::Address2ImagePointer(unsigned addr)
{
	assert(m_imagebase_loaded);

	return (const unsigned char *) 
		ImageRvaToVa(m_image.FileHeader, (void *) m_imagebase_loaded, 
		                addr - m_image.FileHeader->OptionalHeader.ImageBase, NULL);
}


BOOL KImageModule::EnumSymbolsCallback(LPSTR SymbolName, ULONG SymbolAddress, ULONG SymbolSize) 
{ 
	unsigned callid = 0;
	unsigned parano = 0;

	// translate symbol address SymbolAddress to RVA SymbolAddress - mappedBase
	// translate RVA to pointer within the loaded image
	const unsigned char * p;
	
	if ( m_bLoaded )
		p = GetImagePointer(SymbolAddress);
	else
		p = (const unsigned char *) SymbolAddress;

	// Checking for system service call pattern
	if ( ! IsBadReadPtr(p, 14) )
	if ( (p[0]==0xB8) &&												  // mov eax, <callid>
		 (p[5]==0x8D) && (p[6]==0x54) && (p[7]==0x24) && (p[8]==0x04) &&  // lea edx, [esp+4]
		 (p[9]==0xCD) && (p[10]==0x2E) )								  // int 2E
	{
		callid = * (unsigned *) (p+1);
			
		if ( p[11]==0xC2 )												  // ret <parasize>	
		    parano = * (unsigned short *) (p+12) / 4;
	}
	
	if ( callid )
	{
		const IMAGEHLP_SYMBOL * pSymbol = ImageGetSymbol(SymbolName);

		// print out the RVA, and the symbol name passed to us. 
		if ( m_bForPogy )
		{				
			Output( "D %s(", SymbolName);
			for (unsigned i=0; i<parano; i++)
			{
				Output("D");
				if ( i != (parano-1) )
					Output(",");
			}
			Output("), %08X, %x\n", pSymbol->Address, callid);
		}
		else
		{
			Output( "syscall(0x%04x, %2d) %08X %s!%s\n", callid, parano, pSymbol->Address, m_modulename, SymbolName); 
	
			ShowFPO(SymbolAddress);
			TranslateName(SymbolName);
		}
		m_nCount ++;
	}

	return TRUE; 
} 


BOOL CALLBACK EnumSymbolsCallback(LPSTR SymbolName, ULONG SymbolAddress, ULONG SymbolSize, 
								  PVOID UserContext ) 
{
	assert( ! IsBadReadPtr(UserContext, sizeof(KImageModule)) );

	return ((KImageModule *) UserContext)->EnumSymbolsCallback(SymbolName, SymbolAddress, SymbolSize);
}


void KImageModule::EnumerateSymbols(bool bForPogy)
{
	m_nCount  = 0;
	m_bForPogy = bForPogy;

	SymEnumerateSymbols(m_hProcess, m_imagebase_loaded, ::EnumSymbolsCallback, this);

	Output("%d total syscalls found\n\n", m_nCount);
}


void KImageModule::ShowSysCallTable(const char * tablename, unsigned base)
{
	const IMAGEHLP_SYMBOL * pSymbol = ImageGetSymbol(tablename);

	if ( pSymbol==NULL )
		Output("Unable to locate symbol %s\n", tablename);
	else
	{
		int count = base;

		const unsigned * p = (const unsigned *) Address2ImagePointer(pSymbol->Address);

		while ( ! IsBadReadPtr(p, sizeof(unsigned)) )
		{
			unsigned q = * p;

			if ( q > (unsigned) (m_image.FileHeader->OptionalHeader.ImageBase) )
			{
				DWORD           displacement;
			//	IMAGEHLP_SYMBOL symbol;

			    memset(m_is, 0, sizeof(m_is));
			    m_is[0].SizeOfStruct  = sizeof(IMAGEHLP_SYMBOL);
				m_is[0].MaxNameLength = sizeof(m_is) - sizeof(m_is[0]);
    
				unsigned q1 = q;

				// W2k RC1 imagehlp does not need translation
				if ( m_symbolbase )
					q1 = q1 - m_imagebase_default + m_symbolbase;

        		if ( SymGetSymFromAddr(m_hProcess, q1, & displacement, m_is) )
				{
					IMAGEHLP_LINE line;

					line.SizeOfStruct = sizeof(line);

					if ( SymGetLineFromAddr(m_hProcess, q1, & displacement, & line) )
					{
					}

					Output("syscall(%4x) %s\n", count, m_is[0].Name);
					count ++;
				}
			}
			else
				break;
			p++;
		}

		Output("%d system calls found\n", count - base);
	}
}


void KImageModule::va_Output(const char * format, va_list argptr)
{
    char buffer[1024];
    
    vsprintf(buffer, format, argptr);

	if ( m_hOutput )
	{
		SendMessage(m_hOutput, EM_SETSEL, 0xFFFFFF, 0xFFFFFF);
		SendMessage(m_hOutput, EM_REPLACESEL, 0, (LPARAM) buffer);
	}
	else
		OutputDebugString(buffer);
}


void KImageModule::Output(const char * format, ...)
{
    va_list ap;

	va_start(ap, format);
	va_Output(format, ap);
	va_end(ap);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清成人在线| 中文字幕一区二区三区乱码在线| 亚洲国产成人av网| 91九色02白丝porn| 亚洲午夜av在线| 91精品久久久久久久99蜜桃| 美女久久久精品| 久久久久久久久久看片| 高清国产一区二区| 亚洲免费av在线| 欧美一区二区三区小说| 国产在线视频一区二区三区| 国产日韩欧美不卡在线| 97久久超碰精品国产| 亚洲一级二级在线| 日韩欧美视频一区| 成人深夜在线观看| 亚洲小说欧美激情另类| 日韩天堂在线观看| 99久久精品国产一区| 亚洲国产精品一区二区尤物区| 日韩午夜在线影院| av不卡一区二区三区| 亚洲成a人在线观看| 精品乱码亚洲一区二区不卡| 99国产精品久久久久久久久久久 | 韩国女主播一区| 国产精品三级av| 欧美精品三级日韩久久| 国产一区二区美女| 亚洲精选免费视频| 精品久久一区二区| 日本丶国产丶欧美色综合| 美女任你摸久久| 樱花草国产18久久久久| 欧美成人精精品一区二区频| 色综合天天综合色综合av| 日本va欧美va瓶| 综合久久国产九一剧情麻豆| 欧美一区二区精品久久911| 成人av在线网站| 美洲天堂一区二卡三卡四卡视频| 亚洲色图欧洲色图婷婷| 精品精品欲导航| 欧美视频你懂的| av不卡在线观看| 国产精品系列在线播放| 亚洲大片精品永久免费| 国产精品久久久一本精品| 日韩精品专区在线影院重磅| 91色在线porny| 国产成人免费网站| 免费人成在线不卡| 香蕉乱码成人久久天堂爱免费| 韩国三级中文字幕hd久久精品| 中文字幕视频一区| 久久蜜臀精品av| 欧美一卡二卡三卡四卡| 色婷婷综合久久| a级高清视频欧美日韩| 黄色小说综合网站| 久久精品噜噜噜成人av农村| 日韩中文字幕一区二区三区| 亚洲人成影院在线观看| 国产拍揄自揄精品视频麻豆| 日韩欧美久久久| 欧美成人精品3d动漫h| 日韩欧美国产午夜精品| 欧美日韩高清一区二区三区| 欧美亚洲综合网| 日本精品一级二级| 色欧美日韩亚洲| 一本久道中文字幕精品亚洲嫩| av成人动漫在线观看| 97久久超碰精品国产| 91蜜桃在线观看| 色域天天综合网| 欧美亚洲一区三区| 欧美影院一区二区| 欧美三级资源在线| 欧美日韩国产美女| 制服丝袜在线91| 日韩欧美中文一区二区| 精品国产麻豆免费人成网站| 久久亚洲一级片| 国产人成亚洲第一网站在线播放| 国产拍揄自揄精品视频麻豆| 欧美国产日韩亚洲一区| 国产精品美女久久久久aⅴ| 国产精品伦理一区二区| 亚洲三级电影网站| 亚洲国产日韩一级| 免费成人在线网站| 国产成人小视频| 色综合一区二区| 欧洲精品视频在线观看| 欧美美女激情18p| 精品国产一区二区三区av性色 | 国产日韩精品一区二区浪潮av | 日韩欧美一卡二卡| 久久这里只精品最新地址| 欧美激情在线一区二区三区| 亚洲女与黑人做爰| 青青草国产精品亚洲专区无| 国产精品综合av一区二区国产馆| 99久久久久免费精品国产| 欧美伊人久久久久久久久影院| 欧美一区二区三区视频免费播放 | 伊人夜夜躁av伊人久久| 午夜视频在线观看一区二区| 久久国产精品99精品国产| 99这里只有久久精品视频| 欧美三区在线视频| 精品国产乱码久久久久久闺蜜| 国产精品色婷婷久久58| 亚洲成人你懂的| 欧美一级二级三级蜜桃| 国产视频视频一区| 亚洲在线中文字幕| 狠狠狠色丁香婷婷综合激情| 91网站黄www| 精品国产乱码久久久久久牛牛| 99视频精品全部免费在线| 欧美区一区二区三区| 制服丝袜亚洲精品中文字幕| 日韩一区欧美一区| 精品久久五月天| 亚洲最新在线观看| 激情文学综合网| 欧美视频一区二区在线观看| 久久蜜桃香蕉精品一区二区三区| 亚洲国产欧美日韩另类综合| 国产99精品国产| 欧美tickle裸体挠脚心vk| 亚洲激情自拍偷拍| 成人h动漫精品一区二区| 日韩三级电影网址| 亚洲午夜精品网| 9色porny自拍视频一区二区| 欧美mv日韩mv国产| 亚洲成人免费在线观看| 91视频在线观看| 国产午夜精品久久久久久免费视 | 国产成人午夜片在线观看高清观看| 欧美在线free| 亚洲视频一二三| 成人动漫一区二区三区| 亚洲手机成人高清视频| 成人av网址在线| 2024国产精品| 日韩一区二区三区在线视频| 亚洲乱码中文字幕| 丁香六月久久综合狠狠色| 日韩欧美精品在线视频| 亚洲成人综合网站| 在线亚洲+欧美+日本专区| 国产精品久久久久久久浪潮网站| 激情综合网最新| 日韩午夜电影在线观看| 三级久久三级久久久| 欧美日韩中文字幕一区二区| 亚洲码国产岛国毛片在线| 成人免费高清视频| 国产精品久久久久国产精品日日 | 久久综合av免费| 美国三级日本三级久久99| 欧美日韩一区精品| 亚洲第一搞黄网站| 7878成人国产在线观看| 午夜精品成人在线| 欧美男女性生活在线直播观看| 亚洲一区二区三区国产| 91国模大尺度私拍在线视频| 亚洲免费观看视频| 91官网在线免费观看| 亚洲大尺度视频在线观看| 欧美一卡二卡三卡| 精品国产免费久久| 国产一区二区免费视频| 亚洲123区在线观看| 欧美日韩亚洲国产综合| 亚洲成人一区在线| 欧美一区二区大片| 国产精品一区二区三区网站| 中文字幕不卡三区| 99在线热播精品免费| 亚洲欧美日韩系列| 欧美日本乱大交xxxxx| 麻豆成人免费电影| 久久久久久久久久久久久久久99| 福利视频网站一区二区三区| 一色桃子久久精品亚洲| 在线日韩av片| 久热成人在线视频| 欧美高清在线精品一区| 在线观看成人小视频| 捆绑变态av一区二区三区| 亚洲国产成人一区二区三区| 日本精品一区二区三区高清| 琪琪一区二区三区|