delphi - 进程终止回调

标签 delphi assembly reverse-engineering

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

事情是,到目前为止,我必须调用函数来手动生成报告,而想法是在进程退出时自动生成报告。

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

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

提前致谢

最佳答案

不,您不能 Hook 自己进程的终止。如果可以的话,那么恶意(或只是有缺陷的)程序可能会 Hook 它,然后拒绝继续终止。对于调试器来说这是不同的,因为调试器是一个单独的程序。

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

关于delphi - 进程终止回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615871/

相关文章:

delphi - 如何在delphi 7项目目录中添加MSWord文件

delphi - 在网络浏览器中打开页面

delphi - 如何从 GUI 应用程序向控制台应用程序发送命令

assembly - DCPU-16 中的 I 和 J 寄存器是特殊的吗?

java - 按位旋转是否比当前Intel CPU的移位慢?

assembly - 如何使用十六进制编辑器更改指令?

objective-c - 从 dyld_shared_cache 中的 __objc_selrefs 获取方法名称

delphi - 使源代码可从 Delphi IDE 写入

assembly - 演示处理器环-运行环0指令的汇编代码

reverse-engineering - 滑行是如何工作的?