Skip to content

退出码与信号处理 ​

🛑 r0capture 如何响应 Ctrl+C 与异常终止。

信号处理 ​

ssl_log 注册了两个信号处理函数:

python
signal.signal(signal.SIGINT, stoplog)
signal.signal(signal.SIGTERM, stoplog)
信号触发方式处理
SIGINTCtrl+Cstoplog
SIGTERMkill / 系统stoplog

stoplog 做了什么 ​

python
def stoplog(signum, frame):
    print('You have stoped logging.')
    session.detach()
    if pcap:
        pcap_file.flush()
        pcap_file.close()
    exit()
  1. detach session —— 与设备端脚本断开,触发 hook 卸载
  2. flush + close pcap —— 确保已抓数据落盘
  3. exit() 退出

为什么 pcap 用无缓冲

open(pcap, "wb", 0) 已是无缓冲,但 stoplog 里仍 flush() 是双保险——即便中途 SIGTERM,已写入的 pcap 记录也是完整的。

脚本异常的强制终止 ​

设备端脚本抛异常时,on_message 收到 type=="error" 消息:

python
if message["type"] == "error":
    logger.info(f"{message}")
    os.kill(os.getpid(), signal.SIGTERM)
    return

直接 os.kill(self, SIGTERM) 终止整个进程——避免静默失败(hook 崩了却还假装在抓)。

阻塞等待 ​

注册完信号后:

python
sys.stdin.read()

主线程阻塞在 stdin,等待用户 Ctrl+C。设备端 hook 产生的事件由 frida 的消息线程驱动 on_message 回调处理。

相关文档 ​

基于 VitePress 构建 · 教学用途