流控依然成立在执行简单的攻击时
信号处理函数中,由于信号到来,执行信号所指定的行为。只响应kernel来的信号。保留一版cp mytbf -r mytbf_sa
if判断信号的来源。
两个函数来代替. /etc/services
//全局
static struct sigaction alrm_sa_save;
//三参的处理函数
static void alrm_action(int s,siginfo_t *infop,void *unused)
{
int i;
//alarm(1);
if(infop->si_code!=SI_KERNEL)
return i;
}
static void module_load(void)
{
//alrm_handler_save = signal(SIGALRM,alrm_handler);
//alarm(1);
struct sigaction sa;
struct itimerval itv;
sa.sa_sigaction=alrm_action; //填充成员
sigemptyset(sa.sa_mask);
sa.sa_flags=SA_SIGINFO;
sigaction(SIGALRM,&sa,&alrm_sa_save); //注册的行为 需要一个结构体
/*if error*/
itv.it_interval.tv_sec=1;
itv.it_interval.tc_usec=0;
itv.it_value.tv_sec=1;
itv.it_value.tv_usec=0;
setitimer(ITIMER_REAL,&itv,NULL);//时钟类型
/*if error*/
atexit(module_unload);
}static void module_unload(void)
{
int i;
//signal(SIGALRM,alrm_handler_save);
//alarm(0);
struct itimerval itv;
//进行恢复,之前的状态不关心
sigaction(SIGALRM,&alrm_sa_save,NULL);
//关掉时钟
itv.it_interval.tv_sec=0;
itv.it_interval.tc_usec=0;
itv.it_value.tv_sec=0;
itv.it_value.tv_usec=0;
setitimer(ITIMER_REAL,&itv,NULL);
}暂停两秒,真信号淹没在假信号中。
关于第三个参数 void * . getcontext;刚刚打断的现场。在用户态,搭建多线程框架。