【问题标题】:Process termination callback进程终止回调
【发布时间】:2014-03-24 17:02:01
【问题描述】:

我编写了一个代码,该代码能够使用地图文件生成自身的覆盖率数据,而无需其他应用程序对其进行调试,并且它还能够生成与 Cobertura 报告和 OpenCover 兼容的 xml 报告,以进行进一步的分析和图形报告.

问题是,到目前为止,我必须调用该函数来手动生成报告,其想法是在进程退出后立即自动生成报告。

我的第一种方法是尝试在 RtlExitUserProcess/RtlExitUserThread/ExitProcess 处编写挂钩,但每个函数都涵盖了一些特定情况,如果您强制进程结束(例如使用 taskkill 杀死它)或使用 CTRL+ 关闭应用程序控制台窗口C 行为改变。

有什么方法可以创建一个可靠的回调,当应用程序即将结束时总是会调用它?就像您在调试另一个应用程序时,当进程终止时,您会收到一个包含详细信息的调试事件。

提前致谢

【问题讨论】:

标签: delphi assembly reverse-engineering


【解决方案1】:

不,您不能挂钩您自己的进程的终止。如果可以的话,那么一个恶意(或只是有缺陷的)程序可以钩住它,然后拒绝执行终止。调试器就不同了,因为调试器是一个单独的程序。

如果我在编写您的程序,我只需将我的报告代码放在相关单元的finalization 部分。 Delphi RTL 将在程序关闭时调用它,通常与初始化单元的顺序相反,这通常也是单元使用的顺序。在程序的早期使用您的分析单元,它会在终止序列的后期完成,从而使您能够捕获尽可能多的数据。

【讨论】:

猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 2011-01-21
  • 2010-12-21
相关资源
最近更新 更多