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

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

?? xdsloaddlg.cpp

?? TDS510USB2.0接口DSP仿真器.rar
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
	XDSLOAD.CPP
	2002, Lorenzo Lutti (lorenzo.lutti@tiscalinet.it)

	This program loads a process and handles its I/O by debugging it and trapping
	the PRIVILEGED_INSTRUCTION exception.

	Note 1: I've tested XDSLOAD only under Windows 2000; probably it runs under XP as well.
	The OpenThread() function is supported by Win2000, WinXP and WinME; I suppose
	there are other undocumented ways to get the same thing (retrieving a HANDLE from a TID) under
	the other OSes.

	Note 2: XDSLOAD works only for programs not designed for NT/2000/XP, that normally
	would crash	with the "Illegal instruction" debug message. It doesn't work with programs that
	access the I/O space in a "legal" way (kernel-mode driver, "unlocking" the I/O instructions
	by using Ke386SetIoAccessMap(), intercepting the I/O with a VDD and so on), simply because
	they don't throw any debugging exception when they access the I/O space.

	VERSION HISTORY

	08-oct-2002 (Lorenzo Lutti): first release.
*/


#include "stdafx.h"
#include "xdsload.h"
#include "xdsloadDlg.h"

#include "xds510\\xds510.h"

#define CHAR_LIMIT 10000000

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

typedef HANDLE (WINAPI *ptrOpenThread)(DWORD,BOOL,DWORD);
ptrOpenThread	OpenThread;

typedef struct
{
	CXdsloadDlg *dlg;
	PROCESS_INFORMATION pi;
} THREAD_DATA;

/////////////////////////////////////////////////////////////////////////////
// CXdsloadDlg dialog

CXdsloadDlg::CXdsloadDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CXdsloadDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CXdsloadDlg)
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_thread = NULL;
}

void CXdsloadDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CXdsloadDlg)
	DDX_Control(pDX, IDC_CHECK1, m_verbose);
	DDX_Control(pDX, IDC_RICHEDIT1, m_monitor);
	DDX_Control(pDX, IDOK, m_run);
	DDX_Control(pDX, IDC_EDIT1, m_path);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CXdsloadDlg, CDialog)
	//{{AFX_MSG_MAP(CXdsloadDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnBrowse)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXdsloadDlg message handlers

BOOL CXdsloadDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// Retrieve OpenThread() address (not necessary if you have an updated PSDK)
	HMODULE hMod = LoadLibrary( "kernel32.dll");
	if( hMod == NULL)
	{
		AfxMessageBox( "LoadLibrary");
		EndDialog( IDCANCEL);
		return FALSE;
	}
	OpenThread = (ptrOpenThread)GetProcAddress( hMod, "OpenThread");
	if( OpenThread == NULL)
	{
		AfxMessageBox( "GetProcAddress");
		EndDialog( IDCANCEL);
		return FALSE;
	}

	// I/O grant
	m_wrapper.GiveIO();

	// XDS init
	XDS510_init();

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CXdsloadDlg::OnBrowse() 
{
	CFileDialog dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_PATHMUSTEXIST |
		OFN_FILEMUSTEXIST, "Executable files (*.exe)|*.exe||", this);

	if( dlg.DoModal() == IDOK)
		m_path.SetWindowText( dlg.GetPathName());
}

void CXdsloadDlg::OnOK() 
{
	m_run.EnableWindow( FALSE);

	m_monitor.SetWindowText( "");
	m_monitor.SetFocus();

	// Execute process (initially suspended)
	CString path;
	m_path.GetWindowText( path);
	PROCESS_INFORMATION pi;
	STARTUPINFO si;
	::FillMemory( &si, sizeof(si), 0);
	si.cb = sizeof( si);
	if( !CreateProcess( NULL, (char*)(LPCTSTR)path, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi))
	{
		m_run.EnableWindow( TRUE);
		AfxMessageBox( "CreateProcess");
		return;
	}

	// Create the debug thread
	THREAD_DATA *td = new THREAD_DATA;
	td->pi = pi;
	td->dlg = this;
	if( (m_thread = AfxBeginThread( DebugThread, (LPVOID)td  )) == NULL)
	{
		delete td;
		m_run.EnableWindow( TRUE);
		TerminateProcess( pi.hProcess, 0);
		AfxMessageBox( "CreateThread");
		return;		
	}
}

UINT CXdsloadDlg::DebugThread( LPVOID pParam)
{
	PROCESS_INFORMATION pi = ((THREAD_DATA*)pParam)->pi;
	CXdsloadDlg* dlg = ((THREAD_DATA*)pParam)->dlg;
	delete ((THREAD_DATA*)pParam);
	BOOL bVerbose = dlg->m_verbose.GetCheck() ? TRUE : FALSE;

	// Debug the process
	DEBUG_EVENT de;
	if( !DebugActiveProcess( pi.dwProcessId))
	{
		TerminateProcess( pi.hProcess, 0);
		AfxMessageBox( "DebugActiveProcess");
		dlg->m_run.EnableWindow( TRUE);
		return 0;
	}
	
	// Resume the process
	ResumeThread( pi.hThread);
	
	// Debugging loop
	while( TRUE)
	{
		// Wait indefinitely for a debug event
		if( !WaitForDebugEvent( &de, INFINITE))
		{
			TerminateProcess( pi.hProcess, 0);
			AfxMessageBox( "WaitForDebugEvent");
			dlg->m_run.EnableWindow( TRUE);
			return 0;
		}

		CString str;
		CString oldtxt;

		// Handle only the EXCEPTION_DEBUG_EVENT event
		if( de.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
		{
			// Event dump
			str = DebugEventString( de.dwDebugEventCode) + "\r\n";
			dlg->m_monitor.GetWindowText( oldtxt);
			int nChars = oldtxt.GetLength();
			if( nChars < CHAR_LIMIT)
			{
				dlg->m_monitor.SetSel( nChars, -1);
				dlg->m_monitor.ReplaceSel( str);				
			}
			
			// If the event is EXIT_PROCESS_DEBUG_EVENT, exit
			if( de.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT)
			{
				dlg->m_run.EnableWindow( TRUE);
				return 0;				
			}

			// Always consider continuables these exceptions (TODO: probably wrong)
			ContinueDebugEvent( de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
			continue;
		}
		else
		{
			// Handle only the STATUS_PRIVILEGED_INSTRUCTION exception
			if( de.u.Exception.ExceptionRecord.ExceptionCode != STATUS_PRIVILEGED_INSTRUCTION)
			{
				// Exception dump
				BOOL known;
				CString str = DebugEventString( de.dwDebugEventCode) +
					" " + ExceptionString( de.u.Exception.ExceptionRecord.ExceptionCode, &known) + "\r\n";
				dlg->m_monitor.GetWindowText( oldtxt);
				int nChars = oldtxt.GetLength();
				if( nChars < CHAR_LIMIT)
				{
					dlg->m_monitor.SetSel( nChars, -1);
					dlg->m_monitor.ReplaceSel( str);				
				}

				// Don't handle the unknown exceptions
				// (frequently the programs use them for their business)
				if( !known)
				{
					ContinueDebugEvent( de.dwProcessId, de.dwThreadId, DBG_EXCEPTION_NOT_HANDLED);
				}
				else
				// Continue for first chance (maybe someone can handle it...) or continuable exceptions
				if( de.u.Exception.dwFirstChance ||
					!(de.u.Exception.ExceptionRecord.ExceptionFlags & EXCEPTION_NONCONTINUABLE))
				{
					ContinueDebugEvent( de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
				}
				else
				// Otherwise, game over.
				{
					TerminateProcess( pi.hProcess, 0);
					AfxMessageBox( "Second-chance exception");
					dlg->m_run.EnableWindow( TRUE);
					return 0;
				}
				
				continue;				
			}

			// Read the opcode that caused the exception
			HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, de.dwProcessId);
			if( hProcess == NULL)
			{
				TerminateProcess( pi.hProcess, 0);
				AfxMessageBox( "OpenProcess");
				dlg->m_run.EnableWindow( TRUE);
				return 0;
			}
			unsigned char opcodes[2];
			DWORD dwBytesRead;
			if( !ReadProcessMemory( hProcess, de.u.Exception.ExceptionRecord.ExceptionAddress,
				opcodes, 2, &dwBytesRead))
			{
				TerminateProcess( pi.hProcess, 0);
				AfxMessageBox( "ReadProcessMemory");
				dlg->m_run.EnableWindow( TRUE);
				return 0;
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品日产第一区二区三区高清版 | 中文字幕av一区二区三区| 午夜视频久久久久久| 欧美日韩国产欧美日美国产精品| 国产精品狼人久久影院观看方式| 日本怡春院一区二区| 精品成人一区二区三区| 福利一区二区在线观看| 日韩伦理免费电影| 欧美巨大另类极品videosbest| 日本人妖一区二区| 亚洲欧美激情插| 欧美日韩一级片网站| 九色porny丨国产精品| 亚洲视频狠狠干| 国产欧美精品一区二区色综合| 欧洲av一区二区嗯嗯嗯啊| 蜜桃视频在线观看一区| 国产精品你懂的| www国产成人| 日韩视频免费直播| 欧美麻豆精品久久久久久| 成人av网站在线观看免费| 亚洲成a人v欧美综合天堂| 国产人久久人人人人爽| 欧美一区二区三区在线观看视频| www.日本不卡| 成人免费视频免费观看| 精品午夜久久福利影院| 另类小说视频一区二区| 亚洲高清免费观看高清完整版在线观看 | 日韩精品欧美精品| 性欧美大战久久久久久久久| 亚洲伦理在线免费看| 一级特黄大欧美久久久| 中文字幕不卡一区| 亚洲天堂2016| 亚洲国产精品久久久久婷婷884 | 91精品欧美福利在线观看| 岛国av在线一区| 国产一区二区三区国产| 成人午夜看片网址| 欧美亚洲自拍偷拍| 日韩视频在线永久播放| 国产欧美精品一区二区色综合| 中文字幕成人网| 日韩精品高清不卡| 成人精品在线视频观看| 欧美自拍丝袜亚洲| 国产精品久久看| 国模冰冰炮一区二区| 欧美色爱综合网| 亚洲大片精品永久免费| 色香蕉成人二区免费| 日本一区二区免费在线观看视频 | 欧美午夜免费电影| 国产欧美日韩综合精品一区二区| 日韩电影免费一区| 欧美日韩一级片在线观看| 亚洲综合小说图片| 色偷偷久久一区二区三区| 欧美日韩精品电影| 国产精品羞羞答答xxdd| 欧美精品一区二区三区蜜桃视频| 国产一区二区伦理片| 久久久国产综合精品女国产盗摄| 韩国av一区二区三区四区| 在线不卡一区二区| 六月丁香婷婷色狠狠久久| 欧美www视频| 91免费看`日韩一区二区| 亚洲靠逼com| 91精品国产综合久久久久| 国产成人精品午夜视频免费| 国产精品福利在线播放| av电影天堂一区二区在线观看| 亚洲综合视频网| www久久精品| 成人一区二区在线观看| 国产精品久久久久久久久图文区 | 丝袜美腿亚洲综合| 精品久久人人做人人爱| 在线亚洲+欧美+日本专区| 一区二区三区四区视频精品免费| 91精品国产一区二区三区蜜臀| 国产激情视频一区二区三区欧美| 欧美国产一区在线| 欧美一卡2卡3卡4卡| 成人爽a毛片一区二区免费| 国产精品三级电影| 精品奇米国产一区二区三区| 欧美视频在线播放| 欧美日韩五月天| 丰满少妇久久久久久久| 国产成人午夜片在线观看高清观看| 午夜精品视频一区| 男女性色大片免费观看一区二区| 亚洲靠逼com| 日韩电影在线观看一区| 日韩国产欧美在线播放| 激情久久五月天| 国产精品69毛片高清亚洲| 国产成人av电影在线| 91小宝寻花一区二区三区| 欧美色视频一区| 欧美va亚洲va国产综合| 国内精品写真在线观看| 国产亚洲一区二区三区| 欧美精选一区二区| 色婷婷久久久久swag精品| 欧美精品九九99久久| 欧美精品自拍偷拍动漫精品| 欧美三级日本三级少妇99| 欧美日韩一区二区三区四区| 白白色 亚洲乱淫| 成a人片国产精品| 欧美在线观看一区二区| 91精品福利在线一区二区三区 | av一区二区三区| eeuss鲁片一区二区三区在线看| 亚洲五码中文字幕| 免费成人在线视频观看| 国产美女娇喘av呻吟久久| 99在线精品视频| 91精品国产综合久久久蜜臀粉嫩| 日韩三级伦理片妻子的秘密按摩| 日韩视频在线观看一区二区| 中文字幕一区二区三区精华液 | 亚洲精品视频在线| 精品在线视频一区| 在线视频一区二区三| 久久一区二区三区国产精品| 天天综合天天做天天综合| 高清shemale亚洲人妖| 一本色道久久综合亚洲精品按摩| 精品久久久久久久久久久久包黑料| 国产性天天综合网| 奇米色一区二区| 欧美精品第1页| 亚洲午夜羞羞片| 成人成人成人在线视频| 国产三级三级三级精品8ⅰ区| 亚洲成人免费在线| 欧美亚洲一区二区三区四区| 日本一区二区成人| 狠狠色丁香久久婷婷综合_中 | 欧美性色综合网| 轻轻草成人在线| 欧美福利视频一区| 18成人在线观看| 7777精品伊人久久久大香线蕉| 男女激情视频一区| 国产日韩欧美一区二区三区综合| av成人动漫在线观看| 日韩中文字幕区一区有砖一区| 奇米一区二区三区av| 欧美日韩国产综合视频在线观看| 正在播放亚洲一区| 成人开心网精品视频| 天天综合天天综合色| 欧美国产视频在线| 欧美mv和日韩mv国产网站| 中文字幕在线观看不卡视频| xf在线a精品一区二区视频网站| 一区二区三区.www| 欧美性xxxxx极品少妇| 国产精品一区在线| 精品一区二区三区在线播放| 亚洲综合在线电影| 久久青草国产手机看片福利盒子 | 国产精品日产欧美久久久久| 精品国产麻豆免费人成网站| 欧美精品高清视频| 久久影院视频免费| 久久青草国产手机看片福利盒子| 欧美日韩成人综合| 欧美三区在线观看| 欧美日韩国产另类一区| jlzzjlzz国产精品久久| jlzzjlzz亚洲女人18| 成人精品视频网站| 成人app软件下载大全免费| 国产不卡高清在线观看视频| 久久国产精品无码网站| 麻豆91小视频| 黑人巨大精品欧美一区| 激情五月激情综合网| 国产成人精品午夜视频免费| 成人涩涩免费视频| 色综合久久六月婷婷中文字幕| 日本高清免费不卡视频| 欧美色手机在线观看| 日韩精品在线一区| 国产精品素人一区二区| 亚洲欧洲在线观看av| 五月天丁香久久| 国产精品91xxx| 欧美一卡在线观看| 国产精品欧美经典| 国内成人免费视频|