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

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

缘起

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

效果对比

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

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

96e4c57b9436f43537cb977a8625f011.png

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

34282ea4788f84a8e419ef23bacaf4b3.png

可见,有了调试符号的帮助,我们可以更直观的看到某个地址对应的函数名,可以更好的理解反汇编代码。但是我们在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

    f54df010dea601d59b6aacb423b431af.png

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

2f916c9d1a7d32466ea1373021b80f7e.png

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,大家感受下!

963087460a61afdc870b3abe9b6eef7d.gif

总结

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

参考资料

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

猜你喜欢:

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

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

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

0441480545b7ac03a2b9c8dbdc23e5c7.png

欢迎留言交流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值