相关疑难解决方法(0)

如何检测GDB当前进程是否正在运行?

标准方式如下:

if (ptrace(PTRACE_TRACEME, 0, NULL, 0) == -1)
  printf("traced!\n");
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果跟踪当前进程(即使用gdb运行或附加到它),ptrace将返回错误.

但是这有一个严重的问题:如果调用成功返回,gdb可能以后不会附加到它.这是一个问题,因为我没有尝试实现反调试的东西.我的目的是在满足转义时发出'int 3'(即断言失败)并且gdb正在运行(否则我得到一个停止应用程序的SIGTRAP).

每次禁用SIGTRAP并发出'int 3'都不是一个很好的解决方案,因为我正在测试的应用程序可能正在使用SIGTRAP用于其他目的(在这种情况下我还是搞砸了,所以它没关系,但它是事情的原理:))

谢谢

c linux gdb posix

57
推荐指数
7
解决办法
2万
查看次数

标签 统计

c ×1

gdb ×1

linux ×1

posix ×1