【发布时间】:2011-10-09 19:43:37
【问题描述】:
尝试用 C 语言构建调试器以进行模糊测试。
基本上在linux中,我只想通过fork然后execve()启动一个进程,然后监控这个进程看1秒后是否崩溃。
在 linux 上,这是通过创建进程然后监视它生成的任何看起来像崩溃的信号来完成的吗?还是关于监控应用程序?我不确定。
【问题讨论】:
尝试用 C 语言构建调试器以进行模糊测试。
基本上在linux中,我只想通过fork然后execve()启动一个进程,然后监控这个进程看1秒后是否崩溃。
在 linux 上,这是通过创建进程然后监视它生成的任何看起来像崩溃的信号来完成的吗?还是关于监控应用程序?我不确定。
【问题讨论】:
使用ptrace(2) 系统调用:
在被跟踪时,每次有信号时,孩子都会停下来 传递,即使信号被忽略。 (例外是 SIGKILL,它具有通常的效果。)父母将在 它的下一个等待(2)并且可能在它的同时检查和修改子进程 停止。然后父母使孩子继续,可选地 忽略传递的信号(甚至传递不同的信号 而是)。
您应该感兴趣的关于进程崩溃的信号是SIGSEGV(受限内存访问)、SIGBUS(未对齐的数据访问)、SIGILL(非法指令)、SIGFPE(非法浮动-点操作)等
【讨论】: