1

如何在我的程序中检测到它正在调试器下运行?我知道这似乎表明我试图做一些我不应该做的事情,这太混乱了。我认为这是一个有趣的问题。具体来说,有没有办法在 POSIX 环境中做到这一点?例如使用 sigaction (2) 来检测是否安装了一些处理程序?更糟糕的想法;是否有一些我可以在 x86 架构上使用的内联汇编代码?

正如我们讨论的那样——最终是否有可能启动一个调试器,例如 gdb (1),并在您执行这种可能的 hack 的地方中断。感谢任何肮脏的单行字或不太可能引用与此相关的标准。

4

2 回答 2

3

这篇文章存档链接)有帮助吗?

它建议,除其他外:

  • 从父进程泄漏的文件描述符
  • 环境变量($_)
  • 进程状态(getsid()等)。

请注意,其中大多数(如果不是全部)依赖于调试器生成正在调试的进程。如果调试器附加到已经运行的进程,它们就不会那么有效。

于 2009-05-09T13:01:25.620 回答
1

没有可靠的方法来检测您是否在调试器下运行。那是因为调试器可以使用任意数量的方法来实际调试您的代码,其中一些几乎肯定不会被您的方法捕获。

我的问题是,你为什么要关心?除非你想隐藏一些东西:-)

于 2009-05-09T13:02:52.377 回答