【问题标题】:How to properly insert windbg breakpoints on mshtml and MS IE 11?如何在 mshtml 和 MS IE 11 上正确插入 windbg 断点?
【发布时间】:2014-08-05 11:46:18
【问题描述】:

我正在研究 MS Internet Explorer 11 和 mshtml.dll,让我们快速明确:我正在研究 Windows 8.1 上“mshtml.dll”的“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

然后使用“g”命令进入 IE 并打开以下简单的 html 文件:

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

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

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

有解决这个问题的建议吗?

问候。

【问题讨论】:

  • 您确定在正确的进程中设置断点吗? IE 因为每个选项卡和可能不同的 HTML 框架生成子 iexplore.exe 进程而臭名昭著,因此您可能会看到每个选项卡有多个进程。

标签: function reverse-engineering windbg internet-explorer-11


【解决方案1】:

我不认为 ASLR 在这里有什么可做的。您正在使用函数名称而不是地址设置断点。地址可以更改,但函数名称仍将保持不变:)

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

    • 启动windbg。
    • 从文件菜单中选择“打开可执行文件”或Ctrl+E
    • 给出iexplorer的路径。
    • 确保选中“同时调试子进程”选项。
  2. 确保已正确加载符号。

  3. 要确保断点在调试会话中持续存在,请使用“bu”而不是 bp。 检查所有断点是否每次都使用“bl”

【讨论】:

    【解决方案2】:

    我只是在猜测发生了什么。也许当您第一次在 IE 中加载页面时,它会完全呈现它。下一次,页面可能无法完全呈现,因为使用了上一次运行的结果,并且执行了另一个没有命中断点的代码路径。

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

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多