Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如何在我的程序中检测到它正在调试器下运行?我知道这似乎表明我试图做一些我不应该做的事情,这太混乱了。我认为这是一个有趣的问题。具体来说,有没有办法在 POSIX 环境中做到这一点?例如使用 sigaction (2) 来检测是否安装了一些处理程序?更糟糕的想法;是否有一些我可以在 x86 架构上使用的内联汇编代码?
正如我们讨论的那样——最终是否有可能启动一个调试器,例如 gdb (1),并在您执行这种可能的 hack 的地方中断。感谢任何肮脏的单行字或不太可能引用与此相关的标准。
这篇文章(存档链接)有帮助吗?
它建议,除其他外:
getsid()
请注意,其中大多数(如果不是全部)依赖于调试器生成正在调试的进程。如果调试器附加到已经运行的进程,它们就不会那么有效。
没有可靠的方法来检测您是否在调试器下运行。那是因为调试器可以使用任意数量的方法来实际调试您的代码,其中一些几乎肯定不会被您的方法捕获。
我的问题是,你为什么要关心?除非你想隐藏一些东西:-)