我可以从SIGSEGV处理程序中杀死另一个进程吗?

时间:2015-10-01 14:09:01

标签: c linux signals sigsegv american-fuzzy-lop

背景:我通过传递文件名来处理一个长期存在的过程,并使用afl-fuzz来处理每个样本运行afl-fuzz的存根。

当长期进程通过SIGSEGV崩溃时,我希望存根也生成一个SIGSEGV,这样afl-fuzz会将样本标记为有趣。

从长期进程的SIGSEGV处理程序调用{​​{1}}是否有效?

3 个答案:

答案 0 :(得分:1)

  

从长期进程的SIGSEGV处理程序调用kill(stub_pid,SIGSEGV)会起作用吗?

如果进程在SIGSEGV - 处理程序中结束,则会发生一些非常糟糕的事情,其中​​可能包括完全破坏的堆栈和/或内存管理。

此时不再依赖任何东西不是一个好主意,而只是过程失败了。

尝试在此之外调用任何功能可能会失败,这是不可靠的。

更安全的方法是让调用进程监视其子进程,如果子进程意外终止(通常通过SIGSEGV),则启动相应的操作。

查看shell脚本中的信号处理(seach-key:“trap”),因为这样的脚本可能是您要监视的进程的父级。

答案 1 :(得分:0)

不建议通过SIGSEGV执行此操作,但如果您有适当的权限,则可以执行此操作。

答案 2 :(得分:0)

不要想知道如何在程序中导致分段错误,以便AFL会发现奇怪的东西,只需调用abort()即可。 SIGABRT也被AFL捕获并且更容易触发。