背景:我正在使用 afl-fuzz 对一个长期存在的进程进行模糊测试,方法是将要处理的文件名从 afl-fuzz 为每个样本运行的 stub 传递给它。
当长期存在的进程通过 SIGSEGV 崩溃时,我希望 stub 也生成一个 SIGSEGV,以便 afl-fuzz 将样本标记为有趣。
从长期存在的进程的 SIGSEGV 处理程序中调用 kill(stub_pid, SIGSEGV)
会起作用吗?
最佳答案
Will calling kill(stub_pid, SIGSEGV) from the long-lived process's SIGSEGV handler work ?
如果进程在 SIGSEGV
处理程序中结束,则会发生非常糟糕的事情,其中可能包括完全破坏的堆栈和/或内存管理。
在这一点上不再依赖任何东西都不是一个好主意,只是进程停止了。
尝试调用超出此点的任何功能都可能失败,这是不可靠的。
一种更安全的方法是让调用进程监视其子进程,如果子进程意外终止(通常通过 SIGSEGV
),则启动适当的操作。
查看 shell 脚本中的信号处理(seach-key:“trap
”),因为这样的脚本可能是您要监视的进程的父进程。
关于我可以从 SIGSEGV 处理程序中终止另一个进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889713/