如何在程序中检测到它是在调试器下运行的?我知道这似乎表明我试图做一些我不应该做的事情,这太混乱了。我认为这是一个有趣的问题。具体来说,有没有办法在POSIX环境中执行此操作?例如,使用sigaction(2)来检测是否安装了某个处理程序?甚至更糟糕的想法;是否有一些我可以在x86架构上使用的内联汇编代码?
正如我们讨论的那样 - 最终是否可以启动调试器,例如gdb(1),并在执行此可能的hack的地方中断。感谢任何肮脏的单行或不太可能参考与此相关的标准。
答案 0 :(得分:3)
this article(archive link)有帮助吗?
它表明,除其他外:
getsid()
等)。请注意,大多数(如果不是全部)这些都依赖于调试器生成正在调试的进程。如果将调试器附加到已经运行的进程,它们就不会那么有效。
答案 1 :(得分:1)
没有可靠的方法来检测您是否在调试器下运行。这是因为调试器可能会使用任意数量的方法来实际调试您的代码,其中一些几乎肯定不会被您的方法捕获。
我的问题是,你为什么要关心?除非你试图隐藏某些东西: - )