资源简介
windows简单调试器2700行左右代码,打开被调试程序键入 ? 显示功能及帮助
代码片段和文件信息
// MyDbg.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include “MyDbg.h“
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
BOOL g_isResumeMemBp = FALSE;
BOOL g_isResumeGeneralBp = FALSE;
BOOL g_isResumeHardBp = FALSE;
BOOL g_isUserStep = FALSE; //单步
DWORD g_dwShowDataAddr = 0; //数据连续显示地址
DWORD g_dwShowDisasmAddr = 0; //反汇编代码连续显示地址
DWORD g_dwBpOrder = 0; //断点序号从0开始递增
DWORD g_dwMode = MYMODEINPUT; //模式用户输入、脚本等
BPNODE g_HardBp[4] = {0}; //4个硬件断点信息
BOOL g_isSystemBreak = TRUE;
list g_DllList; //模块链表
map g_CmdMap; //命令存储
list g_MemBplist; //内存断点链表
list g_GeneralBpList; //普通断点链表
map g_MemPagMap; //内存分页属性表前面为内存分页起始地址,后面为保存的内存分页属性
map g_ApiNameMap; //模块导出函数名称
list g_UserInputList; //用户输入的合法命令
ifstream g_ifileSp; //命令模式下ls函数会打开文件并设置模式标志
ofstream g_ofileTrace; //追踪记录文件
BOOL g_isTrace = FALSE; //运行追踪模式
DWORD g_dwTraceStart = 0; //追踪起始地址
DWORD g_dwTraceEnd = 0; //追踪结束地址
// DWORD g_dwNoTraceStart = 0; //追踪排除范围起始地址
// DWORD g_dwNoTraceEnd = 0; //追踪排除范围结束地址
void ShowError()
{
DWORD dwRet = 0;
char *lpMsgBuf = NULL;
DWORD ErrorCode = GetLastError();
dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
NULL ErrorCode 0x400 (LPTSTR)&lpMsgBuf 0 NULL);
MessageBox(NULL lpMsgBuf NULL MB_OK | MB_ICONINFORMATION);
LocalFree(lpMsgBuf);
}
int _tmain(int argc TCHAR* argv[] TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL) NULL ::GetCommandLine() 0))
{
nRetCode = 1;
return nRetCode;
}
//设置命令
SetCmdMap();
CString szPath;
//弹框获取调试进程目标文件地址
CFileDialog infdlg(TRUENULLNULLNULL“*.exe|*.exe|All Files|*.*||“);
if(infdlg.DoModal() == IDOK)
{
szPath = infdlg.GetPathName();
}
else
{
return 0;
}
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
DEBUG_EVENT DebugEvent;
DWORD dwContinueStatus = DBG_EXCEPTION_NOT_HANDLED;
CONTEXT Context;
HANDLE hThread = NULL;
HANDLE hProcess = NULL;
OPENTHREAD OpenThread = (OPENTHREAD)GetProcAddress(GetModuleHandle(“kernel32.dll“)“OpenThread“);
if (OpenThread == NULL)
{
ShowError();
goto EXIT_PROC;
}
if(NULL == CreateProcess(NULL szPath.GetBuffer(NULL) NULL NULL FALSE
DEBUG_ONLY_THIS_PROCESS NULL NULL &si &pi))
{
ShowError();
goto EXIT_PROC;
}
while(TRUE)
{
WaitForDebugEvent(&DebugEvent INFINITE);
//得到调试事件,这里准备后面函数要用到参数这里统一打开,关闭
hProcess = OpenProcess(PROCESS_ALL_ACCESS FALSE DebugEvent.dwProcessId);
if (hProcess ==
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2443 2010-08-09 15:52 MyDbg\MyDbg\Disasm\Decode2Asm.cpp
文件 988 2010-08-07 10:51 MyDbg\MyDbg\Disasm\Decode2Asm.h
文件 85569 2012-07-24 18:10 MyDbg\MyDbg\Disasm\Disasm.cpp
文件 4687 2010-08-09 15:50 MyDbg\MyDbg\Disasm\Disasm.h
文件 364954 2010-05-18 12:08 MyDbg\MyDbg\Disasm\Dsasm_Functions.cpp
文件 16968 2015-01-08 11:56 MyDbg\MyDbg\MyDbg.aps
文件 75857 2015-01-10 18:31 MyDbg\MyDbg\MyDbg.cpp
文件 4487 2015-01-09 21:33 MyDbg\MyDbg\MyDbg.dsp
文件 533 2015-01-11 18:07 MyDbg\MyDbg\MyDbg.dsw
文件 6739 2015-01-08 03:08 MyDbg\MyDbg\MyDbg.h
文件 50176 2015-01-11 18:07 MyDbg\MyDbg\MyDbg.ncb
文件 53760 2015-01-11 18:07 MyDbg\MyDbg\MyDbg.opt
文件 1457 2014-12-27 16:24 MyDbg\MyDbg\MyDbg.rc
文件 1598 2014-12-27 16:24 MyDbg\MyDbg\ReadMe.txt
文件 446 2014-12-27 16:24 MyDbg\MyDbg\Resource.h
文件 292 2014-12-27 16:24 MyDbg\MyDbg\StdAfx.cpp
文件 1174 2015-01-03 21:12 MyDbg\MyDbg\StdAfx.h
文件 143360 2015-01-11 18:00 MyDbg\MyDbg.exe
文件 317 2015-01-11 18:08 MyDbg\说明.txt
目录 0 2015-01-11 18:07 MyDbg\MyDbg\Debug
目录 0 2015-01-11 17:59 MyDbg\MyDbg\Disasm
目录 0 2015-01-11 18:07 MyDbg\MyDbg
目录 0 2015-01-11 18:05 MyDbg
----------- --------- ---------- ----- ----
815805 23
- 上一篇:IE tab for chrome
- 下一篇:ArcGIS10下的影像分类模型
评论
共有 条评论