[原]排错实战——拯救加载调试符号失败的IDA
本文之前发表的时候有些问题,作为强迫症患者的我又重新编辑后再次发表。如果您已经看过,请忽略。望见谅。
缘起
最近想借助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 started
PDB_REMOTE_SERVER = "localhost";
PDB_REMOTE_PORT = 23946
// password for the remote server
PDB_REMOTE_PASSWD = "";
说明:如果配置了_NT_SYMBOL_PATH
,那么不用修改该文件。强烈建议设置环境变量_NT_SYMBOL_PATH
。真正做到了一次设置,到处适用。
配置好后,通过
File
-Load file
-PDB file...
来加载pdb
。
我就是在这里遇到错误了,错误提示如下图:
IDA
提示我们错误有三种可能。
当前加载的程序不是一个合法的
Windows PE
文件。直接排除。PDB Plugin
不在plugin
目录下。有可能,但是PDB Plugin
的名称是什么?不清楚,待调查。系统中的
dbghelp.dll
文件太旧了。哪个版本的dbghelp.dll
算新?不清楚,待调查。
上面第二种和第三种情况都有可能,但是根本原因是哪个需要进一步调查。这时候该本文的主角process monitor
闪亮登场啦!
调查
打开process monitor
,开始捕获事件。然后在IDA
中执行File
- Load file
- PDB file...
加载pdb
,等到上面的错误框弹出来后,停止捕获事件。
我们主要关注IDA
的文件读写事件,而且应该是找不到某个dll
文件,所以我们关心Result
不是SUCCESS
的事件。根据以上条件进行过滤,很快就得到了我们感兴趣的事件。看来我遇到的情况是找不到plugin\pdb64.dll
。从别处拷贝一个pdb64.dll
到plugin
目录下,搞定。so fast! pretty good!
下面放一张我录制的GIF
,大家感受下!
总结
process monitor
真的是排查问题的神兵利器,前提是要善用过滤,如果用不好过滤,对我们的帮助有限。
参考资料
Process Monitor
《Windows Sysinternals 实战指南》
IDA 帮助文档
猜你喜欢:
[原]排错实战——使用process explorer替换任务管理器
[原]排错实战——VS清空最近打开的工程记录
[原]排错实战——通过对比分析sysinternals事件修复程序功能异常
欢迎留言交流
[原]排错实战——拯救加载调试符号失败的IDA相关推荐
- vba vbscript.regexp加载dll错误_[原]排错实战——拯救加载调试符号失败的IDA
本文之前发表的时候有些问题,作为强迫症患者的我又重新编辑后再次发表.如果您已经看过,请忽略.望见谅. 缘起 最近想借助IDA逆向一个函数.在windows下,调试器(比如vs, windbg)可以通过 ...
- [原]排错实战——通过对比分析sysinternals事件修复程序功能异常
缘起 最近,我们程序的某个功能在一台机器上不正常,但是在另外一台机器上却是正常的.代码是同一份,vs版本也一样(打的补丁也一样).编译出来的程序在两台电脑上运行的结果就是不一样.惊不惊喜,意不意外?如 ...
- 调试实战 —— dll 加载失败之 Debug Release争锋篇
缘起 最近,项目里遇到一个 dll 加载不上的问题.实际项目比较复杂,但是解决后,又是这么的简单,合情合理.本文是我使用示例工程模拟的,实际项目中另有玄机,但问题的本质是一样的.本文从行文上与 < ...
- 遇到Visual Studio 当前不会命中断点.还没有为该文档加载任何符号的情况
一.问题及原因 有这样一种调用逻辑:A.exe调用B.dll.现在想要在B的源代码中打断点,从A发起进行调试,却给出了"当前不会命中断点.还没有为该文档加载任何符号"的提示.感觉十 ...
- VS当前不会命中断点 还没有为该文档加载任何符号
最近一不小心遇到vs断点无法使用问题,当前不会命中断点 还没有为该文档加载任何符号,查了好久终于查到解决办法.. 有这么几种方法可以尝试去解决此问题: 1.工具"-->选项" ...
- 当前不会命中断点还未为文档加载任何符号——问题探究
今天在调试牛腩网页的时候遇到了一个问题需要用到断点调试来解决,可是加了断点之后出现了下面的情况: 然后就郁闷了,查了百度之后得到了如下的结果: 断点调试是VS中的一大利器,有了它我们可以快速定位到代码 ...
- 使用OD加载微软符号库
Windbg可以加载微软符号库,如果本地没有符号,可以自动去微软网站上下载对应的PDB文件辅助调试分析. PS:WingDbg下的符号加载,SRV*c:/windows/symbols*http:// ...
- 运行时so库::主动加载C符号
本节主要讨论运行时so库的主动加载C符号, 以飨读者. 对于C/C++程序而言, 很多时候都会自动加载符号.除此之外, 主动加载符号能够让模块实现热插拔, 在程序发布, ...
- [转]当前不会命中断点 还没有为该文档加载任何符号
相信很多人在网页编程时都遇到过这个问题,就是设置断点时给出提示,之后不能选中.我今天也碰到这个问题了,足足折磨了我一天.设置是debug没错,我也没有找到"C/C++->常规-> ...
最新文章
- 2016年6月TIOBE编程语言排行榜:涨幅最大的名字很长
- 三大电机控制方案之DSP篇(1):TMS320F28335
- javascript的装饰者模式(七)
- 谈谈 css 的各种居中——读编写高质量代码有感
- CPU有个禁区,内核权限也无法进入!
- Android 控件 - Button
- dev c++调试怎么看变量的值_利用GDB调试 MSQL
- 萌新的Python练习实例100例(三)一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数
- python重定向反爬虫_高效实用http爬虫代理ip之盘点一些网站的反爬虫机制
- OpenGL基础51:泛光
- 数据结构c语言pdf2007,数据结构(C语言)严蔚敏 吴伟明 编著 07.pdf
- Hibernate 入门简单教程
- 各层电子数排布规则_按照核外电子排布规律:各电子层最多容纳电子数2n2(n为电子层数,...
- 小宝挪车自研第二代挪车通知技术,保护隐私无死角!
- oracle 19c ORA-00942: 表或视图不存在 ORA-02063: 紧接着 line
- TextView描边、渐变、阴影效果
- Roblox剑九之剑一
- 大魔王程序员生成记#01#C语言基础
- ASEMI代理ADI(亚德诺)AD5934YRSZ-REEL7车规级芯片
- 中国大学慕课第六周编程题