【问题标题】:Hooking Win32 exception dispatching [duplicate]挂钩 Win32 异常调度 [重复]
【发布时间】:2013-05-10 11:18:03
【问题描述】:

我想挂钩(本地)最终调用异常处理程序的函数,以便在处理程序实际执行之前获取处理程序的地址。

这甚至可能吗(在用户模式下)?

我必须挂钩哪个函数?

我必须分析哪个参数才能获得实际处理异常的异常处理程序的地址?

谢谢!

【问题讨论】:

  • 问题不在于 C 和 C++ 异常之间的差异。我想知道哪个函数最终将控制流分派到异常处理程序中。
  • 没有“函数”,__except 过滤器决定了哪些代码处理异常。如果没有,则程序崩溃。
  • 我在谈论处理异常的内部函数。当抛出异常时,会调用一系列内部函数,以某种方式将控制流分派给异常处理程序。作为程序员,您只会看到 try/catch/... 但我想挂钩这些关键字背后的函数。无论如何,挂钩我自己的代码并没有多大意义:D。希望这能让它更清楚。
  • 编译器不这样做,操作系统会搜索异常处理程序。以 RtlVirtualUnwind 为例。
  • 只需修改函数并重新编译它,而不是挂钩它。上钩是一个疯狂的世界。不要去那里。只需遵循正常的工程实践即可。干扰异常调度会让你被标记为恶意软件,因为这是恶意软件为避免检测所做的事情。每个后续版本的 Windows 都进一步强化了异常调度,以应对越来越复杂的恶意软件攻击。

标签: c++ windows exception hook


【解决方案1】:

以下来自一些故障转储:

00000000`0019c450 00000000`76f89d0d ntdll!_C_specific_handler+0x8c
00000000`0019c4c0 00000000`76f791af ntdll!RtlpExecuteHandlerForException+0xd
00000000`0019c4f0 00000000`76fb1278 ntdll!RtlDispatchException+0x45a
00000000`0019cbd0 00000001`3fcb2a36 ntdll!KiUserExceptionDispatch+0x2e

_C_specific_handler 看起来是你要找的东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2011-11-29
    • 1970-01-01
    • 2011-04-29
    • 2011-07-09
    • 2016-09-11
    相关资源
    最近更新 更多