背景:我通过传递文件名来处理一个长期存在的过程,并使用afl-fuzz来处理每个样本运行afl-fuzz的存根。
当长期进程通过SIGSEGV崩溃时,我希望存根也生成一个SIGSEGV,这样afl-fuzz会将样本标记为有趣。
从长期进程的SIGSEGV处理程序调用{{1}}是否有效?
答案 0 :(得分:1)
从长期进程的SIGSEGV处理程序调用kill(stub_pid,SIGSEGV)会起作用吗?
如果进程在SIGSEGV
- 处理程序中结束,则会发生一些非常糟糕的事情,其中可能包括完全破坏的堆栈和/或内存管理。
此时不再依赖任何东西不是一个好主意,而只是过程失败了。
尝试在此之外调用任何功能可能会失败,这是不可靠的。
更安全的方法是让调用进程监视其子进程,如果子进程意外终止(通常通过SIGSEGV
),则启动相应的操作。
查看shell脚本中的信号处理(seach-key:“trap
”),因为这样的脚本可能是您要监视的进程的父级。
答案 1 :(得分:0)
不建议通过SIGSEGV执行此操作,但如果您有适当的权限,则可以执行此操作。
答案 2 :(得分:0)
不要想知道如何在程序中导致分段错误,以便AFL会发现奇怪的东西,只需调用abort()
即可。 SIGABRT也被AFL捕获并且更容易触发。