网站仿静态上海的外贸网站建设公司

张小明 2026/1/19 20:42:03
网站仿静态,上海的外贸网站建设公司,南通网站推广优化公司,上海龙腾vs山东鲁能在本章中#xff0c;我们将继续探讨win32调试api。特别地#xff0c;我们将学习如何去跟踪被调试程序.下载 例子. 理论:如果你以前使用过调试器#xff0c;那么你应对跟踪比较熟悉。当跟踪一个程序时#xff0c;程序在每执行一条指令后将会停止#xff0c;这使…在本章中我们将继续探讨win32调试api。特别地我们将学习如何去跟踪被调试程序.下载 例子.理论:如果你以前使用过调试器那么你应对跟踪比较熟悉。当跟踪一个程序时程序在每执行一条指令后将会停止这使你有机会去检查寄存器/内存中的值。这种单步运行的官方定义为跟踪(tracing)。单步运行的特色是由CPU本身提供的。标志寄存器的第8位称为陷阱标志trap flag。如果该位设置则CPU运行于单步模式。CPU将在每条指令后产生一个debug异常。当debug 异常产生后陷阱标志自动清除。利用win32调试api我们也可以单步运行被调试程序。方法如下:调用GetThreadContext, 指定 ContextFlags为CONTEXT_CONTROL 来获得标志寄存器的值设置CONTEXT结构成员标志寄存器regFlag中的陷阱标志位调用 SetThreadContext等待调式事件。被调试程序将按单步模式执行在每执行一条指令后我们将得到调试 事件u.Exception.pExceptionRecord.ExceptionCode值为EXCEPTION_SINGLE_STEP如果要跟踪下一条指令需要再次设置陷阱标志位。例:.386.model flat,stdcalloption casemap:noneinclude \masm32\include\windows.incinclude \masm32\include\kernel32.incinclude \masm32\include\comdlg32.incinclude \masm32\include\user32.incincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\comdlg32.libincludelib \masm32\lib\user32.lib.dataAppName db Win32 Debug Example no.4,0ofn OPENFILENAME FilterString db Executable Files,0,*.exe,0db All Files,0,*.*,0,0ExitProc db The debuggee exits,0Dh,0Ahdb Total Instructions executed : %lu,0TotalInstruction dd 0.data?buffer db 512 dup(?)startinfo STARTUPINFO pi PROCESS_INFORMATION DBEvent DEBUG_EVENT context CONTEXT .codestart:mov ofn.lStructSize,SIZEOF ofnmov ofn.lpstrFilter, OFFSET FilterStringmov ofn.lpstrFile, OFFSET buffermov ofn.nMaxFile,512mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLYinvoke GetOpenFileName, ADDR ofn.if eaxTRUEinvoke GetStartupInfo,addr startinfoinvoke CreateProcess, addr buffer, NULL, NULL, NULL, FALSE, DEBUG_PROCESS DEBUG_ONLY_THIS_PROCESS, NULL, NULL, addr startinfo, addr pi.while TRUEinvoke WaitForDebugEvent, addr DBEvent, INFINITE.if DBEvent.dwDebugEventCodeEXIT_PROCESS_DEBUG_EVENTinvoke wsprintf, addr buffer, addr ExitProc, TotalInstructioninvoke MessageBox, 0, addr buffer, addr AppName, MB_OKMB_ICONINFORMATION.break.elseif DBEvent.dwDebugEventCodeEXCEPTION_DEBUG_EVENT .if DBEvent.u.Exception.pExceptionRecord.ExceptionCodeEXCEPTION_BREAKPOINTmov context.ContextFlags, CONTEXT_CONTROLinvoke GetThreadContext, pi.hThread, addr contextor context.regFlag,100hinvoke SetThreadContext,pi.hThread, addr contextinvoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE.continue.elseif DBEvent.u.Exception.pExceptionRecord.ExceptionCodeEXCEPTION_SINGLE_STEPinc TotalInstructioninvoke GetThreadContext,pi.hThread,addr context or context.regFlag,100hinvoke SetThreadContext,pi.hThread, addr contextinvoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId,DBG_CONTINUE.continue.endif.endifinvoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED.endw.endifinvoke CloseHandle,pi.hProcessinvoke CloseHandle,pi.hThreadinvoke ExitProcess, 0end start分析:该程序先显示一个打开文件对话框当用户选择了一个可执行文件它将单步执行该程序并记录执行的指令数直到被调试程序退出运行。.elseif DBEvent.dwDebugEventCodeEXCEPTION_DEBUG_EVENT .if DBEvent.u.Exception.pExceptionRecord.ExceptionCodeEXCEPTION_BREAKPOINT利用该机会来设置被调试程序为单步运行模式。记住在执行被调试程序的第一条指令前 windows将发送一个EXCEPTION_BREAKPOINT消息。mov context.ContextFlags, CONTEXT_CONTROLinvoke GetThreadContext, pi.hThread, addr context调用GetThreadContext以被调试程序的当前寄存器内容来填充CONTEXT 结构 特别地我们需要标志寄存器的当前值。or context.regFlag,100h设置标志寄存器映象的陷阱位(第8位)invoke SetThreadContext,pi.hThread, addr contextinvoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE.continue然后调用SetThreadContext去覆盖CONTEXT的值。再以DBG_CONTINUE调用 ContinueDebugEvent 来恢复被调试程序的运行。.elseif DBEvent.u.Exception.pExceptionRecord.ExceptionCodeEXCEPTION_SINGLE_STEPinc TotalInstruction当调试程序中一条指令执行后我们将接收到EXCEPTION_DEBUG_EVENT的调试事件 必须要检查u.Exception.pExceptionRecord.ExceptionCode的值。如果该值为 EXCEPTION_SINGLE_STEP那么该调试事件是单步运行模式造成的。在这种情况 下TotalInstruction加一因为我们确切地知道此时被调试程序执行了一条指令。invoke GetThreadContext,pi.hThread,addr context or context.regFlag,100hinvoke SetThreadContext,pi.hThread, addr contextinvoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId,DBG_CONTINUE.continue由于陷阱标志在debug异常后自动清除了如果我们需要继续保持单步运行模式则必须设置陷阱标志位。警告: 不要用本教程中的此例子来调试大程序: 跟踪是很慢的。你或许需要等待10 多分钟才能关闭被调试程序。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

哈尔滨电子网站建设wordpress 插件怎么写

JFlash烧录不成功?别急,这才是真正的问题根源 你有没有遇到过这样的场景: 项目到了最后阶段,终于要给板子烧固件了。连接J-Link,打开JFlash,点击“Connect”——结果弹出一行红字:“ No devic…

张小明 2026/1/17 15:42:32 网站建设

厦门网站制作套餐官方网站建设手机银行

PyTorch-CUDA-v2.6镜像:让CNN训练更高效、更可靠 在当今AI研发一线,一个常见的场景是:刚拿到新服务器的工程师花了整整两天才把PyTorch环境搭好——CUDA版本不匹配、cuDNN缺失、驱动冲突……而与此同时,隔壁团队已经用同样的硬件…

张小明 2026/1/17 15:42:34 网站建设

制作网站页面怎么做定制v软件

Kotaemon Kubernetes部署指南:生产环境高可用方案 在企业智能化转型的浪潮中,智能客服、知识助手等AI对话系统正从“能用”迈向“好用”和“可靠”。然而,许多团队在将RAG(检索增强生成)应用推向生产时,常面…

张小明 2026/1/17 15:42:35 网站建设

颜色选取网站网站综合查询工具

父亲节致敬伟岸背影:家庭合影生成超级英雄风格画像 在父亲节的清晨,一张泛黄的家庭合影静静躺在相框里——父亲站在后排中央,双手搭在孩子肩上,笑容朴实却坚定。我们总说“他像超人一样撑起这个家”,可有没有一种方式&…

张小明 2026/1/17 15:42:35 网站建设

企业建站一条龙泉州哪个公司网站做的好

GitHub Wiki维护:记录团队Miniconda使用规范 在AI科研与工程开发并重的今天,一个常见的痛点是:“代码在我机器上跑得好好的,怎么换台机器就报错?” 这种“环境漂移”问题不仅浪费时间,更严重影响协作效率和…

张小明 2026/1/17 15:42:37 网站建设

网站开发维护干嘛无锡互联网

Arbess作为一款国产开源免费的CI/CD 工具,工具安装部署更轻量,使用更简洁。本文将详细介绍如何安装配置使用ArbessGitPuksourcefarePostIn实现代码提交触发代码扫描/构建/部署/接口自动化测试 1、GitPuk 安装与配置 本章节将介绍如何使用CentOS搭建Git…

张小明 2026/1/17 15:42:37 网站建设