我目前正在尝试编写(Python 2.7.3)一个GDB包装器,它将允许我在脚本输入和与GDB进行交互式通信之间动态切换。
到目前为止,我使用了
self.process = subprocess.Popen(["gdb vuln"], stdin = subprocess.PIPE, shell = True)
在我的脚本中启动gdb。(vuln
是我想要检查的二进制文件)
由于gdb的一个关键特性是在接收到SIGINT(STRG+C)时暂停附加进程的执行,允许用户检查寄存器和内存,因此我需要某种方法向其传递SIGINT信号。
两个命令都不能通过管道或重定向来发送信号:
self.process.send_signal(signal.SIGINT)
无或者不
os.kill(self.process.pid, signal.SIGINT)
或者os.killpg(self.process.pid, signal.SIGINT)
为我工作。
当我使用这些函数之一时没有响应。我认为这个问题来自于使用shell=True
。然而,此时我真的没有什么主意了。即使是我的老朋友Google这次也无法真正帮助我,所以也许你可以帮助我。提前感谢。 问候,迈克
^C
,但这听起来像是你可能想要使用gdb的异步模式,在该模式下,目标在gdb仍然接受命令的情况下运行,而gdb的interrupt
命令将暂停目标。如果您稍微描述一下您的用例,我们可以提供建议。 - Mark Plotnick