暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

windbg jsprovider.dll的一个BUG

青衣十三楼飞花堂 2017-11-02
284

这是微软提供的一个windbg JavaScript插件例子


启动notepad.exe,cdb附加之,如果一切正常的话,应该这样测试插件



说说这个插件的原始意图。针对所有线程查看调用栈回溯



在调用栈回溯信息中寻找"__mainCRTStartup",定位相应线程的相应栈帧,在该栈帧上查看局部变量

> ~0s
> .frame /c 3
> dv


它假设notepad.exe的PDB文件保留了局部变量,比如StartupInfo;实际上这些信息只可能出现在私有PDB中,上面的dv不会显示任何内容。


> dt *!*STARTUPINFO
          combase!LPSTARTUPINFO
          combase!STARTUPINFO
          urlmon!LPSTARTUPINFO
          urlmon!STARTUPINFO
          uxtheme!LPSTARTUPINFO
          uxtheme!STARTUPINFO
          wintypes!LPSTARTUPINFO
          wintypes!STARTUPINFO

> dt combase!STARTUPINFO lpTitle
   +0x018 lpTitle : Ptr64 Wchar


如果有StartupInfo,会从中析取lpTitle成员。微软写文档的人应该使用了私有PDB,否则只会得到报错



关于无法获取notepad.exe局部变量,另有方案交叉印证



没有任何输出。插件关于"__mainCRTStartup"的假设并不总是成立,比如Win7中的notepad.exe,入口函数并不是它。测试该插件时发现一个引擎BUG


"dx Debugger.State.Scripts"表明插件未被成功卸载,".scriptlist"已经啥都看不到了。重新加载插件,有异常现象:


"dx Debugger.State.Scripts"显示多出一个"TitleFinder_1",且只能用它



要想彻底恢复正常,只能卸载jsprovider.dll并重新加载之。测试对象是10.0.15063.468版x64 windbg。我居然好心地给windbg成员写邮件反馈了。原因是我在学"英语流利说",不写白不写。

周期性吐槽,微信订阅号只能当RSS用,截图是因为无法排版。感兴趣者请在PC上用浏览器查看原文。

文章转载自青衣十三楼飞花堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论