BianChengNan's Blog

Coding is hard, you can make it easy!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

排错实战 | 解救加载调试符号失败的IDA

发表于 2019-11-07 | 更新于: 2019-11-07 | 分类于 排错
字数统计: | 阅读时长 ≈ 分钟

缘起

最近想借助IDA逆向一个函数。在windows下,调试器(比如vs, windbg)可以通过调试符号(PDB)把地址与符号名对应起来,为我们提供更可读的信息。IDA应该也支持加载PDB,通过查看IDA安装目录下的idahelp.chm(打开后搜索PDB即可找到相关说明)发现还真支持。但是当我加载符号的时候,却失败了。本文记录了整个调查过程。

阅读全文 »

调试实战 | 使用 windbg 调试 DLL 卸载时的死锁

发表于 2019-11-02 | 更新于: 2019-11-02 | 分类于 调试 , 调试案例
字数统计: | 阅读时长 ≈ 分钟

前言

最近我们的程序在退出时会卡住,调查发现是在卸载dll时死锁了。大概流程是这样的:我们的dll在加载的时候会创建一个工作线程,在卸载的时候,会设置退出标志并等待之前开启的工作线程结束。为了研究这个经典的死锁问题,写了一个模拟程序,用到的dump文件及示例代码参考附件。

阅读全文 »

调试实战 | 使用 windbg 调试 TerminateThread 导致的死锁

发表于 2019-10-26 | 更新于: 2019-10-26 | 分类于 调试 , 调试案例
字数统计: | 阅读时长 ≈ 分钟

前言

项目里的一个升级程序偶尔会死锁,查看dump后发现是死在了ShellExecuteExW里。经验少,不知道为什么,于是在高端调试论坛里发帖求助,链接如下http://advdbg.org/forums/6520/ShowPost.aspx

根据张银奎老师的描述可知,应该是拥有关键段的线程意外结束了。仔细检查项目中的代码,发现程序中有使用TerminateThread()来强制杀线程的代码。很可疑,于是写了一个测试程序,还原了这个问题。

阅读全文 »

调试实战 | 使用 windbg 调试 excel 启动时死锁

发表于 2019-10-18 | 更新于: 2019-10-18 | 分类于 调试 , 调试案例
字数统计: | 阅读时长 ≈ 分钟

前言

这是几年前在项目中遇到的一个死锁问题,在博客园发布过。我对之前的笔记进行了整理重新发布于此。
本文假设小伙伴们知道一些基本概念,比如什么是.dump文件(转储文件,进程在某一时刻的快照),什么是windbg(windows下的调试利器),windbg的基本用法,调用栈,调用约定,等等。

阅读全文 »

[原]使用64位的编译工具进行编译

发表于 2019-10-11 | 更新于: 2019-10-11 | 分类于 开发 , 工具
字数统计: | 阅读时长 ≈ 分钟

缘起

最近在编译项目的时候总是报虚拟内存不足(项目中使用了大量的模板)。一般情况下,vs会使用32位的编译工具进行编译,用64位的编译工具应该能解决类似的问题。本以为是一件挺简单的事,但是没想到遇到不少坑,本文记录了折腾的过程,希望对有类似需求的小伙伴有所帮助。

阅读全文 »

调试实战 | 调试 PInvoke 导致栈破坏

发表于 2019-10-03 | 更新于: 2019-10-03 | 分类于 调试 , .NET
字数统计: | 阅读时长 ≈ 分钟

缘起

最近项目中遇到一个诡异的问题,程序在升级到.net4.6.1后,执行某个功能时会崩溃,提示访问只读内存区。大概规律如下:

  1. debug版不崩溃,release版稳定崩溃。
  2. 只有x64位的程序崩溃,32位及anycpu编译出来的程序运行不会崩溃。
  3. 出问题的代码范围很小(按钮点击事件代码不多)。

根据以上信息,各位小伙伴有什么思路吗?

阅读全文 »

[原]Cmake生成指定vs版本的工程文件

发表于 2019-09-29 | 更新于: 2019-09-29 | 分类于 开发 , 工具
字数统计: | 阅读时长 ≈ 分钟

前言

很多开源库都是使用makefile的形式组织的,如果我们不习惯使用命令行进行编译,我们可以使用cmake或者cmake-gui来生成工程文件,进而可以通过GUI的形式进行编译。本文主要总结了如何通过指定generator来生成想要的特定版本的工程文件。

阅读全文 »

排错实战 | 使用process explorer替换任务管理器

发表于 2019-09-14 | 更新于: 2019-09-14 | 分类于 排错
字数统计: | 阅读时长 ≈ 分钟

前言

一般,我们会使用任务管理器查看系统中有哪些进程正在运行,强制杀掉某个进程。可是系统自带的任务管理器功能有限,process explorer是一个功能更强大的工具。它可以让我们查看更多更详细的信息( 比如查看某个进程的父进程,进程加载了哪些dll,打开了哪些文件,线程的cpu使用情况,线程的调用栈,哪些文件被哪些进程占用了,等等 …… )。有没有办法让process explorer替换系统自带的任务管理器呢?:thinking:

阅读全文 »

[原]C++新标准之std::thread

发表于 2019-09-08 | 更新于: 2019-09-08 | 分类于 开发 , c++11
字数统计: | 阅读时长 ≈ 分钟

概览

从C++11开始提供了线程的支持,终于可以方便的编写跨平台的线程代码了。除了std::thread类,还提供了许多其它便利同步的机制,本篇总结是C++11学习笔记系列的首篇总结。

阅读全文 »

[原]UEFI+GPT启动VHD

发表于 2019-09-01 | 更新于: 2025-12-13 | 分类于 运维
字数统计: | 阅读时长 ≈ 分钟

1. 缘起

最近因为不小心中招了(一直在裸奔),又面临着重装系统的尴尬,虽然之前有备份,但是时间已经很久了,而且恢复一次跟重装一遍差不多,没有多大优势。之前同事帮我弄过从vhd文件启动系统,很是方便,可以备份vhd文件即可。借此机会,决定好好研究下来龙去脉。

阅读全文 »
1…1314
BianChengNan

BianChengNan

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