【问题标题】:Is there a way to run some code before a program crashes?有没有办法在程序崩溃之前运行一些代码?
【发布时间】:2022-01-10 07:42:05
【问题描述】:

注意:这适用于 Windows,我正在使用带有 C++17 的 Visual Studio 2019

我一直在尝试制作一个 dll,当注入程序时,它可以在程序崩溃之前运行一些代码。我曾尝试使用 atexit,使用 libMinHook 连接到 exit,使用 libMinHook 连接到 abort,并使用 libMinHook 连接到终止,但它没有用。我了解到,当程序崩溃时,它会被杀死。有人有建议吗? (我尝试在网上找到答案,但找不到任何答案)

【问题讨论】:

  • 你可能想看看Structured Exception Handling。这应该允许您捕获否则会导致应用程序崩溃的异常。
  • 取决于崩溃的原因。如果操作系统向程序发出强制终止的信号(例如,因为已检测到程序执行了不应该执行的操作),那么执行您所寻求的唯一方法就是捕获信号。不幸的是,并非所有此类信号都可以被程序捕获//捕获(即操作系统可以终止程序,并且程序不能阻止被终止)。如果您在调试器中运行程序,则可以设置相关的观察点(例如,当某些变量发生变化时启动调试器)或断点。
  • Microsoft Windows 中的应用程序“崩溃”通常只是未处理的 SEH 异常。因此,最合乎逻辑的做法是处理此类异常。如果您在注入的 DLL 中执行此操作,那么您可能无法使用 frame-based SEH exception handling,除非您可以控制应用程序的线程。因此,vectored SEH exception handling 似乎就是你想要的。

标签: c++ windows dll


【解决方案1】:

您必须为您的程序构建一个调试外壳,并在您可能出现故障的地方插入错误退出代码。

【讨论】:

  • 对不起,我不是很清楚,我的意思是一个 dll 注入到我没有制作的程序中,所以我不能只编辑程序
猜你喜欢
  • 2019-12-31
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多