BianChengNan's Blog

Coding is hard, you can make it easy!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

如何判断转储文件是在 32 位系统还是 64 位系统下生成的?

发表于 2023-10-15 | 更新于: 2025-12-13 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

缘起

曾经在 2022 年分析过一个崩溃转储,文章在这里。在那个案例中,堆空间大小将近 4GB。根据上次的结论,这应该是一个运行在 64 位系统下的 32 位进程崩溃产生的转储文件。这让我有了一个疑问?怎么从进程转储文件中得知进程是 32 位的还是 64 位的?如果是 32 位进程,怎么判断是运行在 32 位系统上还是运行在 64 位系统上呢?

阅读全文 »

如何快速从 32 位转储文件中找到异常发生时的线程上下文

发表于 2023-10-15 | 更新于: 2025-12-13 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

前言

在上一篇文章中介绍了如何在 64 位进程的转储文件中查找异常上下文的方法 —— KiUserExceptionDispatcher() 函数对应栈帧的 Child-SP 的值保存了异常发生时的线程上下文。

本文将介绍如何在 32 位进程及 wow64 进程的转储文件中查找异常上下文的方法,并且会先介绍几个跟异常分发相关的函数和结构体。如果忘记了结论,可以根据函数参数手动逆向查找验证。

阅读全文 »

如何快速从 64 位转储文件中找到异常发生时的线程上下文

发表于 2023-09-29 | 更新于: 2025-12-13 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

前言

经常做调试的朋友可能会遇到在 windbg 里通过 k 系列命令得到的调用栈没有太大参考意义。一般是由于线程上下文不对导致的。这时候可以通过 !analyze -v 让 windbg 自动帮我们分析出正确的调用栈及异常发生时的线程上下文。有了上下文信息,就可以执行 .cxr address_to_context 命令切换上下文,这时候再通过 k 命令查看调用栈,一般可以得到一个有意义的调用栈。

但有时候 !analyze -v 分析出来的上下文信息也是不对的。这时候就需要我们自己手动查找异常上下文了。

这不,最近我就遇到了一个需要手动查找异常上下文的情况。经过调查发现了一个非常重要的规律 —— 64 位程序中,KiUserExceptionDispatcher 函数对应栈帧的 Child-SP 的值保存了异常发生时的线程上下文。

本文完整记录了整个查找验证的过程。

吐槽: 64 位程序的参数传递方式与 32 位程序大不相同,不能根据 ebp 定位参数了。而是需要结合反汇编代码来推断某个函数的参数是否保存到栈上。如果没保存到栈上,基本上很难找到相关参数了。

阅读全文 »

感受 AI 的力量——利用 Cursor 自动生成 powershell 脚本下载 TheOldNewThing 博文

发表于 2023-08-06 | 更新于: 2025-12-13 | 分类于 AI
字数统计: | 阅读时长 ≈ 分钟

缘起

今天查资料的时候,偶然发现了一位国外网友镜像了 TheOleNewThing 从 2003 年到 2019 年的博文,竟然有 5000 多篇(真是高产)。值得注意的是,微软官方博客中许多链接都已经失效了。为了防止这位网友的镜像链接也失效,我决定赶紧将这些内容下载保存下来。手动保存显然不现实,毕竟有 5000 多篇文章呢!所以,我决定写脚本来自动下载,这才是明智之举!如果是几年前,我肯定要亲自动手写脚本,不过如今,AI 这么强大,我无需再费力。幸运的是,我利用 Cursor 自动生成下载脚本的全过程,并对其进行了简单的修改,成功地将全部 5000 多篇文章下载并压缩存档,并按年月分类打包好了!不得不赞叹一句,AI 真是太强大了。

阅读全文 »

难译 | windbg 乐趣之道(下)

发表于 2023-02-13 | 更新于: 2025-12-13 | 分类于 翻译
字数统计: | 阅读时长 ≈ 分钟

前言

Yarden Shafir 分享了两篇非常通俗易懂的,关于 windbg 新引入的调试数据模型的文章。原文链接如下:

part1:https://medium.com/@yardenshafir2/windbg-the-fun-way-part-1-2e4978791f9b

part2:https://medium.com/@yardenshafir2/windbg-the-fun-way-part-2-7a904cba5435

本文是第二部分的译文。同样在有道词典、必应词典、谷歌翻译的大力帮助下完成,感谢以上翻译工具,我只是一个搬运工。强烈建议英文好的朋友阅读原文,因为在翻译的过程中不可避免的按我的理解做了调整。

第一部分译文在这里。

以下是译文!


阅读全文 »

难译 | windbg 乐趣之道(上)

发表于 2023-02-12 | 更新于: 2025-12-13 | 分类于 翻译
字数统计: | 阅读时长 ≈ 分钟

前言

Yarden Shafir 分享了两篇非常通俗易懂的,关于 windbg 新引入的调试数据模型的文章。链接如下:

part1:https://medium.com/@yardenshafir2/windbg-the-fun-way-part-1-2e4978791f9b

part2:https://medium.com/@yardenshafir2/windbg-the-fun-way-part-2-7a904cba5435

本文是第一部分的译文。在有道词典、必应词典、谷歌翻译的大力帮助下完成,感谢以上翻译工具,我只是一个搬运工。强烈建议英文好的朋友阅读原文,因为在翻译的过程中不可避免的按我的理解做了调整。

阅读全文 »

2023 开工喽

发表于 2023-01-29 | 更新于: 2025-12-13 | 分类于 福利
字数统计: | 阅读时长 ≈ 分钟

今年本来不想写了(主要是没礼物送了)。还是按照惯例水一篇吧!

回首 2022

2022 年上半年依然很累,一直在加班,下半年强制自己休息,要不就挂了。付出了很多,也收获了很多:

公司层面:

  • 交付的项目得到了客户的认可

  • 我们的团队在不断壮大成长

  • 我们的技术交流依旧在持续举办

  • 我们一直在坚持 code review

个人层面:

  • 做到了每月分享一篇技术文章
  • 规划事情的能力有所提高
  • 理解问题能力有所提高
  • 心态稍好一些
  • STILL YOUNG, NAIVE
阅读全文 »

slimxml 编码错误

发表于 2022-12-25 | 更新于: 2025-12-13 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

缘起

前一段时间,同事遇到一个配置文件读取错误问题,让我帮忙看看。最开始不相信这么基础的功能会有问题。排查完发现,确实是一个字符编码转换方面的 bug,而且只有特定字符会有问题。一起来看看吧。

阅读全文 »

快速搞定 vs 编译错误之 cs1583 —— xxx 不是有效的 win32 资源文件

发表于 2022-11-27 | 更新于: 2025-12-13 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

缘起

之前写了一个小工具用来处理 .rc 文件,有些地方需要优化,周末准备继续优化一下。没想到,遇到了一个意想不到的错误—— xxx.tmp 不是有效的 win32 资源文件。 本文总结了使用 process monitor 快速定位此问题的过程。

阅读全文 »

加载了对应的调试符号文件也看不了函数名?也许是 fastlink 搞的鬼

发表于 2022-10-30 | 更新于: 2025-12-13 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

缘起

在上一次折腾的过程中遇到了一个小问题 —— 在使用 IDA 查看反汇编的时候,居然搜索不到相关的函数,在 windbg 中使用 x 命令也搜不到,即使加载了符号文件也搜不到。最后发现是 /debug:fastlink 选项导致的。

阅读全文 »
1…345…14
BianChengNan

BianChengNan

140 日志
34 分类
227 标签
RSS
GitHub 知乎 博客园
© 2019 — 2025 BianChengNan | 全博客共 字
0%