如何正确插入windbg断点在mshtml和MS IE 11



我正在钻研MS Internet explorer 11和mshtml.dll,让我们快一点& &;明确:我正在调查"mshtml.dll"在windows 8.1上的"CTitleElement"类,我想在"CTitleElement"类的一些函数上设置断点,看看这个类里面发生了什么(例如:创建标题元素,获取标题,设置标题,获取标题的长度等)

我使用windbg来附加IE进程,下面是我设置断点的方法:

0:013> bp MSHTML!CTitleElement::GetTitle
0:013> bp MSHTML!CTitleElement::SetTitle
0:013> bp MSHTML!CTitleElement::s_StringTable
0:013> bp MSHTML!CTitleElement::CreateElement
0:013> bp MSHTML!CTitleElement::TitleLength

然后在IE中输入"g"命令&打开以下简单的HTML文件:

<html>
    <title>Hello There!</title>
</html>

,但不幸的是,我没有得到理想的结果,调试器没有击中断点。正如我所注意到的,这是一个不稳定的情况,因为:"有时它会被击中&有时不是!"

我想到了ASLR和我刚刚设置的断点类型("bp"),通过安装EMET来禁用ASLR;禁用所有内存保护,但我仍然无法以可靠的方式获得结果。

有什么建议可以解决这个问题吗?

问候。

我不认为ASLR在这里有任何事情要做。您正在使用函数名而不是地址设置断点。地址可以改变,但函数名仍然保持不变:)

  1. 确保您不会因为IE创建的子进程(如Sesa所提到的)而错过

    • 启动windbg。
    • 从文件菜单中选择"打开可执行文件"或Ctrl+E
    • 给出ie浏览器的路径。
    • 确保你选中了"调试子进程"选项。
  2. 确保符号正确加载

  3. 要确保断点在调试会话中持续存在,请使用"bu"代替bp。每次使用"bl"

  4. 检查所有断点是否显示

我只是在猜测发生了什么。也许当你第一次在IE中加载页面时,它会完全渲染它。下一次,该页可能不会完全呈现,因为使用了前一次运行的结果,并且执行的其他代码路径没有击中您的断点。

你试过强制刷新Ctrl+F5吗?

最新更新