本文之前发表的时候有些问题,作为强迫症患者的我又重新编辑后再次发表。如果您已经看过,请忽略。望见谅。

缘起

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

效果对比

先放两张对比图,大家直观感受下区别。

没有调试符号的帮助的情况下,我们看到的效果:

有了调试符号的帮助的情况下,我们看到的效果:

可见,有了调试符号的帮助,我们可以更直观的看到某个地址对应的函数名,可以更好的理解反汇编代码。但是我们在IDA中该如何设置呢?

为 IDA 加载符号

  • 首先,确认.\cfg\pdb.cfg存在,并且配置是正确的。一般,对IDA默认的配置文件 ,我们只需要放开PDBSYM_SYMPATH前面的注释即可。为了保险,请确保对应的路径(c:\symbols)是存在的。
// PDB plugin// PDB information provider#define PDB_PROVIDER_MSDIA  1   // use MSDIA local/remote provider#define PDB_PROVIDER_PDBIDA 2   // use PDBIDA provider//PDB_PROVIDER = PDB_PROVIDER_PDBIDA// The downloaded symbols are stored in the specified directory.// Microsoft's public symbol store is used for downloading the symbols.//// If this option is omitted or empty  - use _NT_SYMBOL_PATH if set, otherwise use %TEMP%\ida directory// If the value is not empty           - use it//PDBSYM_DOWNLOAD_PATH    = "c:\\symbols";// Full symbol path (in _NT_SYMBOL_PATH format)// If set, PDBSYM_DOWNLOAD_PATH and _NT_SYMBOL_PATH are ignored// BCN: uncomment line below to configure symbol path//PDBSYM_SYMPATH = "SRV*c:\\symbols*http://symbols.mozilla.org/firefox;SRV*c:\\symbols*http://msdl.microsoft.com/download/symbols";// remote server where win32_remote.exe is running// used when loading PDB symbols on non-Windows platforms// NB: it will be used only if there is not already an existing debugging session startedPDB_REMOTE_SERVER = "localhost";PDB_REMOTE_PORT   = 23946// password for the remote serverPDB_REMOTE_PASSWD = "";

说明:如果配置了_NT_SYMBOL_PATH,那么不用修改该文件。强烈建议设置环境变量_NT_SYMBOL_PATH。真正做到了一次设置,到处适用。

  • 配置好后,通过File - Load file - PDB file...来加载pdb

我就是在这里遇到错误了,错误提示如下图:

IDA提示我们错误有三种可能。

  1. 当前加载的程序不是一个合法的Windows PE文件。直接排除。
  2. PDB Plugin不在plugin目录下。有可能,但是PDB Plugin的名称是什么?不清楚,待调查。
  3. 系统中的dbghelp.dll文件太旧了。哪个版本的dbghelp.dll算新?不清楚,待调查。

上面第二种和第三种情况都有可能,但是根本原因是哪个需要进一步调查。这时候该本文的主角process monitor闪亮登场啦!

调查

打开process monitor,开始捕获事件。然后在IDA中执行File - Load file - PDB file...加载pdb,等到上面的错误框弹出来后,停止捕获事件。

我们主要关注IDA的文件读写事件,而且应该是找不到某个dll文件,所以我们关心Result不是SUCCESS的事件。根据以上条件进行过滤,很快就得到了我们感兴趣的事件。看来我遇到的情况是找不到plugin\pdb64.dll。从别处拷贝一个pdb64.dllplugin目录下,搞定。so fast! pretty good!

下面放一张我录制的GIF,大家感受下!

总结

process monitor真的是排查问题的神兵利器,前提是要善用过滤,如果用不好过滤,对我们的帮助有限。

参考资料

  • Process Monitor
  • 《Windows Sysinternals 实战指南》
  • IDA 帮助文档

猜你喜欢:

[原]排错实战——使用process explorer替换任务管理器

[原]排错实战——VS清空最近打开的工程记录

[原]排错实战——通过对比分析sysinternals事件修复程序功能异常

欢迎留言交流

vba vbscript.regexp加载dll错误_[原]排错实战——拯救加载调试符号失败的IDA相关推荐

  1. [原]排错实战——拯救加载调试符号失败的IDA

    本文之前发表的时候有些问题,作为强迫症患者的我又重新编辑后再次发表.如果您已经看过,请忽略.望见谅. 缘起 最近想借助IDA逆向一个函数.在windows下,调试器(比如vs, windbg)可以通过 ...

  2. dll侧加载_WORD打开时出现加载DLL错误解决方法

    WORD 打开时出现加载 DLL 错误解决方法 1 . 接下来看看解决办法, 按组合键 WIN + R 或者按开始 --- 运行, 打开运行窗口, 2 .在运行对话框中输入或者复制粘贴 " ...

  3. powerdesigner错误提示实体属性名称唯一性_WPS导致加载DLL错误的解决方案

    [Access与WPS并存引起的问题]作为事件属性设置而输入的表达式"加载"产生了如下错误:加载DLL错误的解决方法. 一.问题描述: 用Access开发的一个程序,一共四台电脑使 ...

  4. cesium 3dtiles 加载本地数据_深入echarts学习:加载跨域、异步、本地json数据的防坑录

    1 说明: ===== 1.1 推荐指数:★★★★ 1.2 网上这方面说明,大多模棱两可,坑很多,讲透彻的不多,故本人做一个小结. 1.3 我曾介绍echarts的简单基本用法: <Echart ...

  5. vba vbscript.regexp加载dll错误_TFS金钥匙系列04期:WPS 加载项之“团队”功能

    随着TFS管理工具在我中心推广使用,越来越多的人开始使用它开展项目管理和缺陷管理等工作,已成为我们日常工作的必备工具.它涵盖的内容广泛,功能丰富,有很多常用功能项是我们日常工作的得力助手. 如何使用T ...

  6. java 项目加载dll文件,在eclipse java项目中加载dll文件

    我正在尝试将文件sqljdbc_auth.dll添加到项目库中.我将包含dll的文件夹添加为外部类文件夹. 在这里,我基本上尝试使用Microsoft提供的SQL驱动程序连接到我的SQL SERVER ...

  7. 加载svr模型_机器学习XGBoost实战,网格搜索自动调参,对比随机森林,线性回归,SVR【完整代码(含注释)+数据集见原文链接】...

    建议:阅读2020.8.7的文章,完全了解GDBT和XGBT的原理. 机器学习- XGBoost,GDBT[过程:决策树,集成学习,随机森林,GDBT,XGBT,LightGBM] 本次实践内容: 数 ...

  8. html加载富文本_富文本图片懒加载解决方案

    图片懒加载,作为性能优化的一部分,想必我们并不陌生. 在React.Vue项目中,我们都可以引入对应的NPM包处理图片懒加载,如 lazyload.react-lazyload.vue-lazyloa ...

  9. python加载项向导_使用Python的win32com加载Excel加载项

    我从这里的各种问题中看到,如果使用以下方法从 Python打开Excel实例: xl = win32com.client.gencache.EnsureDispatch('Excel.Applicat ...

最新文章

  1. android xml ui编辑器,Android Studio(八):使用Layout Editor设计UI
  2. Goodbye, 2010. Hello 2011...
  3. 空间皮肤代码_不废话,看我20行代码搞定色块提取与定位…….
  4. python变量域名_想尝试使用python进行域名分析,可是没有接触过python,想请教请教。...
  5. Servlet 版本与web.xml配置
  6. pair的用法 make_pair
  7. ArcGIS Server Manager打不开(运行时错误)
  8. 计算机房用还原保护软件,“小哨兵”还原卡v9.1在机房的巧妙应用
  9. linux磁盘组修复,Linux磁盘坏道的检测及修复
  10. 李开复写给中国大学生的七封信(2/7)
  11. Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)
  12. 科大迅飞语音听写(流式版)WebAPI,Web前端、H5调用 语音识别,语音搜索,语音听写
  13. 恒讯科技报告:2021-2026年泰国数据中心市场机会
  14. 函数的基本使用,切克闹
  15. 【Python】pandas的describe参数详解
  16. 22位压缩版UUID
  17. teamviewer未就绪,请检查您的连接。
  18. INDEX+SMALL+IF+ROW函数组合使用解析
  19. rofl文件如何播放
  20. 德国警方捣毁暗网重要节点

热门文章

  1. C++ TypeId简介与使用
  2. Windows系统顽固型文件清除方法
  3. java 反射 Constructor、Method、Field 基本用法
  4. linux deepin20.5配置WebStorm桌面快捷方式:webstorm.desktop
  5. vue组件的基本使用:入门示例
  6. journalctl -xefu kubelet查看kubelet日志
  7. Scala Akka网络编程:Client Server网络通信(你问我答)案例
  8. k8s修改端口访问:nodeport暴露的端口范围修改
  9. Linux部署Ant Design Pro项目及nginx部署
  10. GraphQL引入依赖maven仓库配置