标准方法如下:if(ptrace(PTRACE_TRACEME,0,NULL,0)==-1)printf("traced!\n");在这种情况下,如果当前进程被跟踪(例如,使用GDB运行它或附加到它),ptrace会返回一个错误。但是这样做有一个严重的问题:如果调用成功返回,GDB以后可能不会附加到它。这是一个问题,因为我没有尝试实现反调试的东西。我的目的是在满足条件(例如,断言失败)并且GDB正在运行(否则我得到一个停止应用程序的SIGTRAP)时发出一个“int3”。每次都禁用SIGTRAP并发出“int3”不是一个好的解决方案,因为我正在测试的应用程序可能会将SIGTRAP用于其
标准方法如下:if(ptrace(PTRACE_TRACEME,0,NULL,0)==-1)printf("traced!\n");在这种情况下,如果当前进程被跟踪(例如,使用GDB运行它或附加到它),ptrace会返回一个错误。但是这样做有一个严重的问题:如果调用成功返回,GDB以后可能不会附加到它。这是一个问题,因为我没有尝试实现反调试的东西。我的目的是在满足条件(例如,断言失败)并且GDB正在运行(否则我得到一个停止应用程序的SIGTRAP)时发出一个“int3”。每次都禁用SIGTRAP并发出“int3”不是一个好的解决方案,因为我正在测试的应用程序可能会将SIGTRAP用于其