You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pwntools或GDB Python API编程式中断被调试进程

实现方案

方法1:pwntools中直接实现

Ctrl-C中断被调试进程的本质是向目标进程发送SIGINT信号,pwntools中可以直接获取被调试进程的PID发送信号即可,还可以封装成你期望的调用形式:

from pwn import *
import os
import signal

io = process("./target_binary")
gdb.attach(io)

# 自定义ctrlc方法,挂载到io.gdb对象
def ctrlc(self):
    # 向目标进程发送SIGINT,等效于gdb窗口按Ctrl-C
    os.kill(io.pid, signal.SIGINT)
    # 阻塞脚本,避免后续逻辑干扰调试
    pause()
io.gdb.ctrlc = ctrlc.__get__(io.gdb)

# 业务逻辑
output = io.recvline()
expected = b"expected_output"

if output != expected:
    io.gdb.ctrlc() # 直接调用即可触发gdb中断

方法2:基于GDB Python API实现

如果使用GDB自带的Python API开发,直接调用内置的interrupt命令即可,这是GDB官方提供的等效于用户按Ctrl-C中断的接口:

import gdb

# 需中断被调试进程时执行以下代码
gdb.execute("interrupt")

如果同时调试多个进程,可以指定目标进程ID:gdb.execute("interrupt <pid>")

补充说明
  • 发送SIGINT信号后GDB默认会暂停进程执行,进入可交互调试状态,你可以正常查看内存、下断点、单步调试
  • 如果不需要封装直接调用的话,省略自定义方法的步骤,在需要中断的位置直接写os.kill(io.pid, signal.SIGINT);pause()即可
  • 如果是远程调试场景,只要能拿到目标进程PID、有权限发送信号,该方案同样生效

内容的提问来源于stack exchange,提问作者SRobertJames

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:45:07