程序调试器,类似OD可执行命令下断,获取寄存器信息

易语言 2020-08-16 22:13:52

程序调试器,类似OD可执行命令下断,获取寄存器信息

.判断循环首 (WaitForDebugEvent (Debug_Event, #INFINITE))
.判断开始 (Debug_Event.dwDebugEventCode = #EXCEPTION_DEBUG_EVENT) ' 程序异常
EXCEPTION_DEBUG_EVENT () ' 处理程序异常
.判断 (Debug_Event.dwDebugEventCode = #CREATE_THREAD_DEBUG_EVENT) ' 线程创建
Copy_CreateThread (CreateThread, Debug_Event.unionData, GlobalSize_CreateThread (CreateThread))
加入调试信息 (“线程创建 线程地址:” + 取十六进制文本 (CreateThread.lpStartAddress))
.判断 (Debug_Event.dwDebugEventCode = #CREATE_PROCESS_DEBUG_EVENT) ' 进程被创建
.如果真 (调试方式 = #加载)
Copy_CreateProcessInfo (CreateProcessInfo, Debug_Event.unionData, GlobalSize_CreateProcessInfo (CreateProcessInfo))
加入调试信息 (“进程创建 基址:” + 取十六进制文本 (CreateProcessInfo.lpBaseOfImage) + “ 程序Oep:” + 取十六进制文本 (CreateProcessInfo.lpStartAddress))
AddInt3BreaK (CreateProcessInfo.lpStartAddress, “Oep”, 真)
.如果真结束

.判断 (Debug_Event.dwDebugEventCode = #EXIT_THREAD_DEBUG_EVENT) ' 退出线程
Copy_ExitThread (ExitThread, Debug_Event.unionData, GlobalSize_ExitThread (ExitThread))
加入调试信息 (“线程退出 退出代码:” + 取十六进制文本 (ExitThread.dwExitCode))
.判断 (Debug_Event.dwDebugEventCode = #EXIT_PROCESS_DEBUG_EVENT) ' 退出进程
Copy_ExitProcess (ExitProcess, Debug_Event.unionData, GlobalSize_ExitProcess (ExitProcess))
ContinueDebugEvent (Debug_Event.dwProcessId, Debug_Event.dwThreadId, 十六到十 (#DBG_EXCEPTION_NOT_HANDLED))
初始化调试器 ()
加入调试信息 (“进程退出 退出代码:” + 取十六进制文本 (ExitProcess.dwExitCode))
跳出循环 ()
.判断 (Debug_Event.dwDebugEventCode = #LOAD_DLL_DEBUG_EVENT) ' 装载动态链接库
Copy_LoadDll (LoadDll, Debug_Event.unionData, GlobalSize_LoadDll (LoadDll))
' 加入调试信息 (“装载动态链接库.基址:” + 取十六进制文本 (LoadDll.lpBaseOfDll))
.判断 (Debug_Event.dwDebugEventCode = #UNLOAD_DLL_DEBUG_EVENT) ' 卸载动态链接库
Copy_UnloadDll (UnloadDll, Debug_Event.unionData, GlobalSize_UnloadDll (UnloadDll))
.默认

.判断结束
ContinueDebugEvent (Debug_Event.dwProcessId, Debug_Event.dwThreadId, #DBG_CONTINUE)
.判断循环尾 ()

.如果真 (是否正在调试程序)
返回 ()
.如果真结束
.判断开始 (调试方式 = #加载)
GetStartupInfo (Startupinfo)
lpRemoteCode = CreateProcess (0, 编辑框_进程路径.内容, 0, 0, 0, #DEBUG_PROCESS + #DEBUG_ONLY_THIS_PROCESS, 0, 0, Startupinfo, Process_Information)
.如果真 (lpRemoteCode = 0)
加入调试信息 (“创建进程失败,请确认是否WIN32应用程序”)
返回 ()
.如果真结束

.判断 (调试方式 = #附加)
.如果真 (DebugActiveProcess (组合框_进程列表.取项目数值 (组合框_进程列表.现行选中项)) = 假)
加入调试信息 (“附加程序:” + 组合框_进程列表.取项目文本 (组合框_进程列表.现行选中项) + “ 失败!”)
返回 ()
.如果真结束
Process_Information.dwProcessId = 组合框_进程列表.取项目数值 (组合框_进程列表.现行选中项)
Process_Information.dwThreadId = 取进程主线程 (Process_Information.dwProcessId)
Process_Information.hProcess = OpenProcess (2035711, 0, Process_Information.dwProcessId)
.如果真 (Process_Information.hProcess = 0)
加入调试信息 (“打开进程失败!”)
DebugActiveProcessStop (Process_Information.dwProcessId)
返回 ()
.如果真结束
Process_Information.hThread = OpenThread (#THREAD_ALL_ACCESS, 0, Process_Information.dwThreadId)
.如果真 (Process_Information.hThread = 0)
加入调试信息 (“打开主线程失败!”)
DebugActiveProcessStop (Process_Information.dwProcessId)
返回 ()