当前位置: 首页 > 面试题库 >

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

曹骞仕
2023-03-14
问题内容

标准方法如下:

if (ptrace(PTRACE_TRACEME, 0, NULL, 0) == -1)
  printf("traced!\n");

在这种情况下,如果跟踪当前进程(例如,使用gdb运行或附加到该进程),则ptrace返回错误。

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

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

谢谢


问题答案:

以前作为注释:您可以派生一个将尝试与PTRACE_ATTACH其父对象(然后在必要时分离)的孩子并将结果传达回去。看起来确实有点不雅。

如您所述,这是非常昂贵的。我认为断言不定期失败并不太糟。也许值得一个长期运行的孩子来做这件事-
在父母与孩子之间共享两个管道,孩子在读取字节后会进行检查,然后将状态发送回字节。



 类似资料:
  • 我正在尝试创建一个bash实用程序脚本来检查docker守护程序是否在我的服务器中运行。除了运行这样的代码之外,有没有更好的方法来检查docker守护程序是否在我的服务器中运行? 我想创建一个bash shell脚本来检查我的docker守护进程是否正在运行。如果它正在运行,那么什么也不做,但是如果它没有运行,那么就启动docker守护进程。 我的伪代码大概是这样的。我正在考虑解析我的ps -ef

  • 问题内容: 我正在尝试找到一种方法来检测进程是否在Windows Task Manager for Windows OS和Macintosh Activity Monitor for Mac OS中使用Python运行 有人可以帮我提供代码吗? 问题答案: psutil是一个跨平台的库,可检索有关正在运行的进程和系统利用率的信息。 在现有的Windows Python中,您可以使用和解析以下输出:

  • 问题内容: 我正在使用Celery管理异步任务。但是,有时候,芹菜加工过程会停止,这不会导致任何任务被执行。我希望能够检查芹菜的状态,并确保一切正常,如果我发现任何问题,请向用户显示错误消息。从Celery Worker文档中看来,我可能可以使用ping或inspect进行此操作,但是ping感觉很笨拙,并且不清楚要使用的检查方式是否确切(如果inspect()。registered()为空?)。

  • 问题内容: 我正在尝试创建一个bash实用程序脚本以检查我的服务器中是否正在运行docker守护进程。除了运行这样的代码之外,还有没有更好的方法来检查docker守护进程是否正在我的服务器中运行? 我想创建一个bash shell脚本,该脚本将检查我的docker守护程序是否正在运行。如果它正在运行,则什么也不做,如果没有,则启动docker守护程序。 我的伪代码是这样的。我正在考虑解析ps -e

  • 问题内容: 好吧,标题几乎概括了这个问题。我发现的唯一结果就是这个, 但是我不确定这是否可行。 问题答案: 您可以使用wmic实用程序来检查正在运行的进程的列表。 假设您要检查Windows的explorer.exe进程是否正在运行: 请参阅http://ss64.com/nt/wmic.html或http://support.microsoft.com/servicedesks/webcasts

  • 问题内容: 我想以编程方式确定是否直接从XCode(在模拟器中或在系留设备上)运行iOS应用。我尝试了此处描述的-DDEBUG解决方案,但是当我断开与Xcode的连接并重新运行该应用程序时,它仍然认为它处于调试模式。我认为我正在寻找的是此功能的Swift版本 问题答案: 说明: 您的C代码(以及下面的Swift版本)检查程序是否在 调试器的控制 下运行 , 而不是是否从Xcode运行。一个人可以在