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

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

?? xdsloaddlg.cpp

?? TDS510仿真器 的硬件電路和軟件VHDL代碼和大家共享TDS510
?? 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一区二区三区免费野_久草精品视频
国产传媒久久文化传媒| 亚洲女同ⅹxx女同tv| 欧美视频你懂的| 色老汉av一区二区三区| 在线观看日韩电影| 欧美性猛片xxxx免费看久爱| 一本到高清视频免费精品| 成人av电影在线| 色婷婷久久综合| 欧美三级视频在线观看| 欧美日韩国产乱码电影| 日韩一区二区三免费高清| 日韩美女主播在线视频一区二区三区| 欧美夫妻性生活| 精品国产精品网麻豆系列 | 亚洲人成在线观看一区二区| 国产精品久久毛片av大全日韩| **欧美大码日韩| 亚洲香蕉伊在人在线观| 亚洲欧美一区二区三区国产精品| 亚洲国产wwwccc36天堂| 精品写真视频在线观看| 成人免费观看视频| 在线免费不卡视频| 久久日一线二线三线suv| 中文av字幕一区| 日韩精品成人一区二区在线| 国产精品一区二区91| 91成人看片片| 精品嫩草影院久久| 亚洲精品第1页| 国产最新精品精品你懂的| 99久久久久久| 在线电影欧美成精品| 国产片一区二区| 日韩va欧美va亚洲va久久| 国产成人免费视频一区| 欧美日韩一本到| 国产精品毛片a∨一区二区三区| 一区二区三区在线观看网站| 久久97超碰国产精品超碰| 91麻豆免费视频| 国产午夜精品福利| 一区二区三区久久| 久久99热这里只有精品| 欧美亚洲综合网| **性色生活片久久毛片| 国产成人无遮挡在线视频| 欧美高清激情brazzers| 亚洲靠逼com| 从欧美一区二区三区| 日韩欧美国产一区二区在线播放 | 一区二区在线看| 国产.欧美.日韩| 精品精品国产高清a毛片牛牛| 亚洲视频一二三区| 国产精品69毛片高清亚洲| 欧美二区三区91| 亚洲一区二区视频在线观看| www.久久精品| 国产精品视频第一区| 东方aⅴ免费观看久久av| 精品国产第一区二区三区观看体验| 五月婷婷久久综合| 欧美日韩国产精品自在自线| 亚洲精品中文在线| 色综合久久99| 中文字幕亚洲在| 99re热这里只有精品免费视频| 久久精品一级爱片| 岛国精品在线观看| 中文字幕一区三区| 99riav一区二区三区| 国产欧美在线观看一区| 国产自产高清不卡| 国产亚洲午夜高清国产拍精品| 韩国欧美一区二区| 亚洲国产精品精华液ab| 成人av网址在线| 亚洲码国产岛国毛片在线| 91国产免费观看| 午夜精品久久久久久久久久| 欧美日本精品一区二区三区| 日本一不卡视频| 精品国产污网站| 床上的激情91.| 亚洲无线码一区二区三区| 欧美日韩国产一区二区三区地区| 亚洲视频一区在线观看| 99久久久国产精品免费蜜臀| 亚洲一二三四在线| 91.麻豆视频| 国产原创一区二区三区| 国产精品夫妻自拍| 色噜噜狠狠一区二区三区果冻| 天堂久久一区二区三区| 精品久久国产字幕高潮| 不卡的av网站| 日韩专区欧美专区| 久久九九久精品国产免费直播| 成人黄页毛片网站| 亚洲mv大片欧洲mv大片精品| 欧美电影免费提供在线观看| 成人午夜精品在线| 天天射综合影视| 国产三级一区二区| 欧美日韩小视频| 国产精品一卡二| 午夜精品一区二区三区免费视频 | 99国产精品99久久久久久| 亚洲aⅴ怡春院| 亚洲国产精品传媒在线观看| 欧美探花视频资源| 国产999精品久久久久久绿帽| 亚洲一区免费观看| 久久欧美中文字幕| 欧美人成免费网站| av在线不卡电影| 精品一区二区三区的国产在线播放| 中文字幕一区二区5566日韩| 日韩欧美国产综合| 欧美日本一区二区三区四区| 成人精品视频一区二区三区尤物| 性久久久久久久| 亚洲欧美日韩在线不卡| 国产亚洲午夜高清国产拍精品| 欧美精品在线观看一区二区| 成+人+亚洲+综合天堂| 丰满少妇久久久久久久| 日韩电影免费一区| 亚洲午夜精品久久久久久久久| 国产精品久久久久久久岛一牛影视 | 香蕉影视欧美成人| 亚洲视频在线一区二区| 久久久99久久| 日韩精品中文字幕在线一区| 欧美久久久一区| 日本伦理一区二区| 色综合中文字幕国产| 国内精品伊人久久久久影院对白| 亚洲超碰97人人做人人爱| 亚洲精品乱码久久久久久黑人| 日本一二三不卡| 国产精品素人视频| 国产色综合久久| 国产色一区二区| 国产精品嫩草影院av蜜臀| 欧美国产激情二区三区| 国产亚洲va综合人人澡精品| 久久久久久久久97黄色工厂| 久久众筹精品私拍模特| 久久精品视频一区| 国产女人水真多18毛片18精品视频 | 国产亚洲成aⅴ人片在线观看 | 欧美精品在线观看一区二区| 欧洲一区二区三区在线| 欧美伊人久久久久久久久影院| 在线观看免费一区| 欧美精品久久一区| 精品剧情在线观看| 国产丝袜美腿一区二区三区| 中文字幕日韩av资源站| 亚洲图片另类小说| 亚洲一二三四区不卡| 免费观看日韩av| 精品在线亚洲视频| 豆国产96在线|亚洲| 91小宝寻花一区二区三区| 在线视频亚洲一区| 欧美猛男男办公室激情| 日韩视频中午一区| 国产视频一区不卡| 亚洲综合色婷婷| 日韩av一级片| 风流少妇一区二区| 91啪亚洲精品| 欧美一级爆毛片| 国产精品国产三级国产aⅴ中文 | 国模少妇一区二区三区| 成人综合在线视频| 欧美日韩精品一区二区三区蜜桃 | 亚洲另类色综合网站| 日韩av不卡在线观看| 国产精品一区一区| 色中色一区二区| 日韩精品一区二区三区视频| 国产精品网曝门| 免费在线成人网| 高清国产午夜精品久久久久久| 在线亚洲精品福利网址导航| 日韩美一区二区三区| 亚洲精品国产一区二区三区四区在线| 一区二区三区免费看视频| 国产伦精一区二区三区| 欧美性受xxxx| 中文字幕在线观看一区二区| 另类调教123区| 欧美日韩在线观看一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲一区二区三区视频在线|