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

Process Monitor 学习笔记(5.11):将自定义调试输出“注入”到 Procmon 追踪

Process Monitor 学习笔记(5.11):将自定义调试输出“注入”到 Procmon 追踪

  • Process Monitor 学习笔记(5.11):将自定义调试输出“注入”到 Procmon 追踪
    • 一、为什么要把“自定义信息”塞进 Procmon?
    • 二、三条可落地的“注入”路径(从易到难)
      • 方案 A:**“哨兵资源”法**(最实用,100% 出现在 Procmon)
      • 方案 B:**调试输出协同法**(OutputDebugString + 时间对齐)
      • 方案 C:**ETW(事件跟踪 for Windows)自定义 Provider**(高级)
    • 三、可复用的标记规范(拷贝即用)
    • 四、与 Procmon 分析动作如何配合
    • 五、性能与副作用控制
    • 六、常见坑位
    • 七、即用清单(给实战工程师)
    • 结语

Process Monitor 学习笔记(5.11):将自定义调试输出“注入”到 Procmon 追踪

目标:把你自己程序里的关键步骤与语义化信息,以“可检索、可过滤、可对齐”的方式 出现在 Procmon 时间轴里,让“黑盒 I/O 事件”秒变“能落地的证据链”。


一、为什么要把“自定义信息”塞进 Procmon?

  • 缩短定位时间:大量 CreateFile/RegSetValue 里,哪一批是你代码主动触发的?打上“自家标记”,一眼锁定。
  • 跨团队协作:当现场只允许抓 Procmon,不便开日志/调试器时,无侵入地“抛锚”到时间轴。
  • 对齐多源证据:把业务阶段(初始化/加载配置/写缓存/落盘/失败重试)落在 Procmon 事件旁边,方便与错误码、调用栈联动。

二、三条可落地的“注入”路径(从易到难)

方案 A:“哨兵资源”法(最实用,100% 出现在 Procmon)

利用 Procmon 必然记录的“文件/注册表访问”,创建特征路径作为 Marker(标记)。
事件天然出现在 Procmon,名称可携带语义/关联 ID。

推荐规则

  • 文件路径%TEMP%\PMARK\<CorrId>__<Stage>__<Message>.mk
  • 注册表键HKCU\Software\PMARK\<CorrId>\<Stage> 值名:msg,值:<Message>
  • 建议使用 Delete-on-Close / 用后立删,避免脏痕。

优点:零依赖、可过滤(Path/Key 包含 PMARK)、能被 Summary 汇总、可做高亮。
缺点:会产生真实 I/O(可用临时+Delete-on-Close降影响)。

示例代码

C/C++(文件,Delete-on-Close)

#include <windows.h>
#include <string>
int MarkFile(const std::wstring& stage, const std::wstring& msg) {CreateDirectoryW((std::wstring(getenv("TEMP"))+L"\\PMARK").c_str(), nullptr);std::wstring p = std::wstring(getenv("TEMP")) + L"\\PMARK\\"+ stage + L"__" + msg + L".mk";HANDLE h = CreateFileW(p.c_str(),GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,nullptr,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE,nullptr);if (h == INVALID_HANDLE_VALUE) return GetLastError();const char* hint = "PMARK\n";DWORD w=0; WriteFile(h, hint, 6, &w, nullptr);CloseHandle(h);return 0;
}

C#(注册表)

using Microsoft.Win32;
public static void MarkReg(string corrId, string stage, string message) {using var k = Registry.CurrentUser.CreateSubKey($@"Software\PMARK\{corrId}\{stage}");k.SetValue("msg", message, RegistryValueKind.String);// 可选:k.DeleteValue("msg"); // 用后清理
}

PowerShell(一次性标记后删除)

$dir = Join-Path $env:TEMP 'PMARK'
$new = Join-Path $dir  ("{0}__{1}.mk" -f "LoadConfig", (Get-Date -f 'HHmmssfff'))
New-Item -Path $dir -ItemType Directory -Force | Out-Null
Set-Content -Path $new -Value 'PMARK'
Start-Sleep -Milliseconds 10
Remove-Item $new -Force

Procmon 配置建议

  • 过滤器:Path contains PMARKOperation is RegSetValue AND Path contains \PMARK\
  • 高亮:Path contains PMARK(便于在密集事件里跃出)

方案 B:调试输出协同法(OutputDebugString + 时间对齐)

你的程序调用 OutputDebugString/DbgPrint 吐语义日志,用 DebugView 抓;同时用 Procmon 抓 I/O。最终按时间戳对齐两个证据源。

示例(C/C++)

#include <windows.h>
void Stage(const wchar_t* s) {OutputDebugStringW((std::wstring(L"[PMARK] ") + s).c_str());
}

落地要点

  • DebugView 里开启 Capture Win32/Capture Global Win32(视权限而定)。
  • 两边导出 CSV → 以 Time of Day 对齐(建议统一到 UTC 或加上时区)。
  • 若想“一键对齐”,结合方案 A 同时写一个哨兵文件/键,作为两个时间轴的共同参照物。

优点:你的语义很富;
缺点:Procmon 本身不展示调试输出,需要双工具对齐(但证据更全面)。


方案 C:ETW(事件跟踪 for Windows)自定义 Provider(高级)

让程序发 ETW 自定义事件(含结构化字段),外加 Procmon 抓取 I/O。把 ETW(WPA/PerfView)与 Procmon 共同对齐,如需归档评审更优雅。

  • 工具链:TraceLogging/EventSourcePerfView/WPA 可视化。
  • 对齐技术同 B(放一个“哨兵文件/键”作参照)。

三、可复用的标记规范(拷贝即用)

  • 命名约定PMARK|<App>|<CorrId>|<Stage>|<KeyFacts>
  • 阶段建议StartLoadCfgInitCacheOpenDBWriteBackDoneFail
  • 关联 ID:单请求/批处理/任务串行号,贯穿全链路
  • 错误场景:失败时额外写 ...__FAIL__{HRESULT|Win32Code},便于 Result/Detail 交叉验证

四、与 Procmon 分析动作如何配合

  1. 先搜/高亮Path contains PMARK → 锁定你的“语义锚点”
  2. 回看前后 2–5 秒:观察真正的因果 I/O(失败码、重试、重解析)
  3. 看调用栈(Stack):定位触发者模块/过滤驱动(DLP/杀软/同步盘)
  4. SummaryFile/Registry Summary 统计你的 PMARK 周边写入最频繁对象
  5. 导出证据:保存过滤视图(PML/CSV)+ 截图 PMARK 事件 + 汇总 TopN

五、性能与副作用控制

  • 文件标记使用 FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE(极轻、无残留)。
  • 注册表标记放 HKCU(用户维度、安全),并在成功链路即时清理
  • 在批量/高频标记中合并阶段,避免“标记本身”影响 I/O 画像。
  • Drop Filtered Events:若要长期跑,请仅对业务进程/特征路径过滤,避免丢关键上下文。

六、常见坑位

  • 权限不足→ 路径选 %TEMP%/HKCU;遇到 UAC 受限路径会失败。
  • 被安全软件拦截→ 若标记路径被 DLP 保护,换到非敏感目录名(仍保留 PMARK 便于筛选)。
  • 时钟漂移→ 多工具对齐时统一成 UTC(或在两端同时写“哨兵文件”校时)。

七、即用清单(给实战工程师)

  • 选方案 A(“哨兵资源”)为主,B/C 辅助
  • 统一 PMARK 命名 & 关联 ID
  • Procmon 预置过滤/高亮(保存 .pmc 配置)
  • 导出 PML/CSV + PMARK 截图 + 结论/修复建议

结语

当现场只给你一个 Procmon,也能把你的业务语义“写进时间轴”
用最朴素的文件/注册表“锚点”就足以让取证效率翻倍:抓到、看懂、复现、闭环。

下一篇(5.12):工具栏参考 —— 每个按钮/开关背后的抓取与显示逻辑,如何配成“排障快捷键”。

http://www.dtcms.com/a/496274.html

相关文章:

  • 网站建设mng临沂网站设计建设
  • 第N7周打卡:调用Gensim库训练Word2Vec模型
  • 飞阳建设网站北京高端网页
  • 网站开发的问题有哪些东营做网站哪家好
  • 第8章 基于表格型方法的规划和学习(4) 期望更新与采样更新
  • 唐山网站制作系统站长之家域名
  • 全国的做网站的公司低代码建站平台
  • open-webui docker高速下载本地部署
  • 东台企业网站建设手机网站域名解析怎么做
  • 公司网站空间申请wordpress的托管
  • 中兴ZXV10 B860AV2.1-T 3.0_S905L3B_uw5621无线(可通刷CA)线刷固件包
  • 需求基线管理的数智化转型:痛点、路径与实践价值
  • 沈阳企业网站开发定制wordpress的第三方登录插件
  • N8N系列:新手教程,“出色外交官” Webhook节点,打通外部应用,让工作流不再 “闭门运行”
  • 建设网站jw100济南网络策划
  • 织梦网站怎么重新安装教程网络营销方案论文
  • 剑指offer:面试题39数组中出现次数超过一半的数字、面试题40最小的k个数、面试题41数据流中的中位数
  • 广州网站建设藤虎网络许昌企业网站建设公司
  • dede网站制作教程数据分析网站开发
  • Langchain 附加函数及应用
  • 网站建设背景资料平台建设包括什么
  • 迁移WSL发行版到其他磁盘(D盘)
  • SSM整合----项目异常处理方案
  • 容桂网站制作信息连云港网站定制开发
  • 雷达点云数据展示在webviz(ROS1)
  • 左右滑动分类列表 背景图跟随选中状态改变位置 滑动时跟随文字滑动
  • 湖南省建设网站网站建设是属于软件吗
  • 医疗网站建设网站家用宽带做网站
  • Linux 应用开发学习指南
  • 河南生产型企业网站建设中企动力300官网