当前位置: 首页 > news >正文

通过 WinDbg 双机调试,获取针对一次 NtCreateFile 调用的序列日志?

第一阶段:在函数入口处获取上下文与参数

1. 下断点并放行

kd> bp nt!NtCreateFile kd> g

当虚拟机中发生文件创建/打开操作时,系统会断下。

2. 获取进程和线程上下文 (PID/TID)使用!thread命令查看当前触发该调用的线程和进程信息:

kd> !thread

3. 获取调用栈与返回地址

kd> k

4. 获取核心参数(访问权限、处置方式等)根据 32 位__stdcall栈布局提取参数(十六进制):

kd> dd esp+8 L1 ; 获取第2个参数:DesiredAccess (访问权限) kd> dd esp+20 L1 ; 获取第8个参数:CreateDisposition (创建处置) kd> dd esp+24 L1 ; 获取第9个参数:CreateOptions (创建选项)

记下这几个值,后续可以对照微软官方文档(或ntstatus.h)翻译成易读的宏名称。windbg不支持直接将其翻译成易读的宏名称。

5. 深度解析目标文件路径这是最重要的一步,需要利用指针解引用获取OBJECT_ATTRIBUTES中的字符串:

1. 查看栈上的第3个参数(即 POBJECT_ATTRIBUTES 的地址) kd> dd esp+c L1 假设上一步输出为 "95d86c10 0107f01c",用 dt 命令解析该地址 kd> dt nt!_OBJECT_ATTRIBUTES 0107f01c 在输出中找到 ObjectName 字段的值,假设为 0x0018f248 使用 dS 命令(大写S)直接打印这个 UNICODE_STRING 结构体指向的字符串 kd> dS 0x0107f058 解析结构体 如果你想看看结构体内部,可以执行 kd> dt nt!_UNICODE_STRING 0x0107f058

"8123456c 0018f230"中的第一列地址是你要读取的内存地址本身,即esp+c的绝对地址。第二列地址,这是存放在那个地址里的具体数据。

第二阶段:获取函数执行结果

前面我们拿到了所有的输入参数,现在我们需要让函数执行完毕,看看结果是成功还是失败(比如文件到底存不存在、权限够不够)。

6. 执行到函数返回使用gu(Go Up) 命令,让内核执行完NtCreateFile并停在返回后的第一条指令:

kd> gu

7. 查看返回值 (NTSTATUS)在 x86 架构中,函数的返回值存放在EAX寄存器中:

kd> r eax

假设输出eax=00000000

如果你不知道这个错误码是什么意思,可以使用 WinDbg 的!error命令翻译:

kd> !error @eax

它会告诉你0000000STATUS_SUCCESS(成功)。这就是日志中的Return_Status

最后,清除断点

  1. kd>后面输入清除断点的命令:

    bc *

    (注:bc意思是 Breakpoint Clear,*代表清除所有断点。如果你只想清除 0 号断点,可以输入bc 0)

  2. 然后再次输入:

    g

    并回车。

这时候,因为拦路虎(断点)被清除了,你的 Win7 虚拟机就会瞬间恢复流畅运行,WinDbg 底部也会重新变成*BUSY* Debuggee is running...啦!

http://www.cnnetsun.cn/news/1830665.html

相关文章:

  • 【pencil】
  • ESP32轻量级串口CLI库:零动态分配、模板化内存与静态命令注册
  • 戴尔笔记本风扇终极控制指南:简单三步实现精准散热管理
  • UndertaleModTool终极指南:轻松解锁GameMaker游戏修改新境界
  • 保姆级教程:用uni-app搞定微信小程序蓝牙连接,兼容Android 14的MTU协商难题
  • AMD显卡驱动精简终极指南:如何让Radeon Software轻装上阵
  • 基于单片机智能燃气灶控制系统设计
  • 零成本入门云服务!阿贝云免费虚拟主机 免费云服务器体验分享
  • 比特币节点启动全解析:从AppInitMain函数看核心初始化流程
  • 酷安UWP桌面客户端:5个技巧让你高效玩转酷安社区
  • FlowState Lab持续集成与交付:自动化测试与模型更新流水线
  • ReadCat小说阅读器:如何打造真正专注的阅读环境?
  • 星闪Hi2821/Hi3863开发板开箱:从零配置HiSpark Studio到点亮第一个LED灯
  • 等保.三级要求下Redis 安全测评应该怎么做?衔
  • 使用 Ace Data Cloud 的 Kling 视频生成 API 创建惊艳视频
  • SpringCloud OpenFeign Content-Length 透传陷阱与 RequestInterceptor 精准拦截方案
  • MusePublic生态扩展:与ControlNet兼容性验证及姿态控制实测
  • LangGraph本地开发避坑指南:从`langgraph dev`启动到`LangGraph Studio`可视化调试的全流程实战
  • 30分钟搞定音频格式转换:silk-v3-decoder实战指南
  • 如何高效使用网盘直链下载助手:八大网盘文件下载神器完整教程
  • Formily离线表单解决方案:构建无网络环境下的数据收集堡垒
  • **GPT-5写小说App:2025年创作新助手,开启文学之旅**随着科技的飞速发展,人工智能已经渗透到我们生活的方方面面。而在文学创作领域,GPT-5写小说App的出现,无疑为创作者们带来了全新
  • SITS2026上线倒计时48小时:我们如何用轻量级MoE替代全量微调,在边缘GPU集群实现多模态搜索QPS翻4倍且成本降63%?
  • 从零构建企业级网络实验室:基于PVE的Windows域控与EVE-NG融合方案
  • 行数转换法 打印菱形回文数图案
  • Go语言的sync.WaitGroup等待组与错误传播在并发任务协调中的扩展模式
  • Flink 集成 HDFS 实战:从“hadoop is not in the classpath/dependencies”报错到环境配置全解析
  • SpringBoot项目实战:用Poi-tl实现数据库表结构文档的自动导出(支持多表分组)
  • 要过医疗认证,研发文档 需要什么和注意事项?
  • 决策自动化技术中的决策模型决策执行与决策评估