首页 > 其他分享 >《信息安全系统设计与实现》第十周学习笔记

《信息安全系统设计与实现》第十周学习笔记

时间:2023-11-12 15:36:53浏览次数:36  
标签:第十 int 信息安全 笔记 中断 信号 sa include define

   

第六章 信号和信号处理

信号和中断

“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移 到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。

进程:一个“进程”就是一系列活动

广义的 “进程”包括:从事日常事务的人。在用户模式或内核模式下运行的Unix/Linux进程。执行机器指令的CPU。
“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理”。“进程”可在完成“中断”处理后恢复正常活动。

根据来源,中断可分为三类:

来自硬件的中断
来自其他人的中断
自己造成的中断

按照紧急程度,中断可分为以下几类:

不可屏蔽(NMI)
可屏蔽

进程硬件中断

来自硬件的中断
来自其他处理器的中断
自己造成的中断

Unix/Linux信号示例

ctrl+c导致当前运行的进程终止
nohup a.out &命令在后台运行一个程序
可以使用sh命令kill pid (or kill -s 9 pid)

Unix/Linux中的信号处理

信号类型

点击查看代码
#define	SIGHUP	1
#define	SIGINT	2
#define	SIGQUIT	3
#define	SIGILL	4
#define	SIGTRAP	5
#define	SIGABRT	6
#define	SIGIOT	6
#define	SIGBUS	7
#define	SIGFPE	8
#define	SIGKILL	9
#define	SIGUSR1	10
#define	SIGSEGV	11
#define	SIGUSR2	12
#define	SIGPIPE	13
#define	SIGALRM	14
#define	SIGTERM	15
#define	SIGSTKFLT 16
#define	SIGCHLD	17

#define	SIGCONT	18
#define	SIGSTOP	19
#define	SIGTSTP	20
#dpfine	STGTTTN	21
#define	SIGTTOU	22
#define	SIGURG	23
#define	SIGXCPU	24
#define	SIGXFSZ	25
#define	SIGVTALRM 26
#define	SIGPROF	27
#define	SIGWINCH 28
#define	SIGPOLL	29
#define	SIGPWR	30
#define	SIGSYS	31

###信号的来源 来自硬件中断的信号:在执行过程中,一些硬件中断被转换为信号发送给进程硬件信号示例。 中断键(Ctrl+C),它产生一个SIGINT(2)信号。 间隔定时器,当他的时间到期时,会生成一个SIGALRM(14)、SIGTALRM(26)或SIGPROF(27)信号。 其他硬件错误,如总线错误、IO陷进。 来自异常的信号:常见的陷阱信号有SIGFPE(8),表示浮点异常(除以0),最常见也是最可怕的时SIGSEGV(11),表示段错误。 来自其他进程的信号:进程可以使用kill(pid,sig)系统调用向pid标识的目标进程发送信号。 ###信号处理函数 每个进程PROC 都有一个信号处理数组 int sig[32]。Sig[32]数组的每个条目都指定了如何处理相应的信号,其中0表示 DEFault(默认),1表示 IGNore(忽略).其他非零值表示用户模式下预先安装的信号捕捉(处理)函数。下图给出了信号位向量、屏蔽位向量和信号处理函数。 ###安装信号捕捉函数 进程可使用系统调用 int r=signal(int signal_number,void *handler) 来修改选定信号编号的处理函数 ###sigaction()的使用示例:
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sigint_handler(int signum) {
    printf("Caught SIGINT, exiting...\n");
    exit(1);
}

int main() {
    struct sigaction sa;

    sa.sa_handler = sigint_handler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;

    if (sigaction(SIGINT, &sa, NULL) == -1) {
        perror("sigaction");
        return 1;
    }

    printf("Ctrl+C to trigger SIGINT...\n");

    while(1) {
    }

    return 0;
}
![](/i/l/?n=23&i=blog/2555202/202311/2555202-20231112151808901-1099704227.png)

信号处理步骤

处于内核模式时,会检查信号并处理未完成的信号
重置用户安装的信号捕捉函数
信号和唤醒:在Unix/Linux内核中有两种SLEEP进程

信号用作IPC

示例
段错误捕捉函数

点击查看代码
#include <stdio.h>
#include <stdlib.h> 
#include <unistd.h> 
#include <signal.h> 
#include <setjmp.h>
#include <string.h>

//#include <siginfo.h>

jmp_buf env;
int count = 0;

void handler(int sig, siginfo_t *siginfo, void *context)
{
    printf ("handler sig=%d from PID=%d UID=%d count=%d\n", sig, siginfo->si_pid, siginfo->si_uid, ++count); 
    if (count >= 4) // let it occur up to 4 times
        longjmp(env, 1234);
}

int BAD()
{
    int *ip = 0;
    printf("in BAD(): try to dereference NULL pointer\n");
    *ip = 123;	// dereference a NULL pointer
    printf("should not see this line\n");
}

int main (int argc, char *argv[])
{
    int r;
    struct sigaction act; 
    memset (&act, 0, sizeof(act)); 
    act.sa_sigaction = &handler; 
    act.sa_flags = SA_SIGINFO;
    sigaction(SIGSEGV, &act, NULL); 
    if ((r = setjmp(env)) == 0) 
        BAD();
    else
        printf("proc %d survived SEGMENTATION FAULT: r=%d\n",getpid(), r);

    printf ("proc %d looping\n" ,getpid());
    while(1);
}

![](/i/l/?n=23&i=blog/2555202/202311/2555202-20231112152001051-64436112.png)

标签:第十,int,信息安全,笔记,中断,信号,sa,include,define
From: https://www.cnblogs.com/ljy12392/p/17827237.html

相关文章

  • 1+x备考随便找了个培训开学,顺便寄了笔记
    网页结构:结构层,表示层,行为层<!doctypehtml>:用什么样的方式,标准解释,不区分大小写www:万维网html:由标记标签组成的描述性语言<h1></h1><p>自带外边距</p>不能嵌套强制换行<br/><hr><b>加粗</b>不能换行的称为内联元素(行元素),反之称为块元素<strong></strong>更强调<em......
  • 第十周Linux教材第六章学习笔记——信号和信号处理
    信号和信号处理6.1信号和中断在Linux中,信号是一种异步通信机制,用于通知进程发生了某些事件。当进程接收到信号时,它可以选择忽略信号、执行默认操作或执行自定义操作。“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。而“信号”是要发送......
  • 20211105李宜时信息安全系统设计与实现学习笔记9
    信号和信号处理包括信号和中断1.信号和中断的基础定义和概述:解释信号在操作系统中的作用,它们如何与中断相关。信号类型:列出常见的UNIX/Linux信号,例如SIGINT,SIGTERM,SIGKILL等。2.UNIX/Linux信号示例实例演示:通过实际示例展示信号如何工作。代码段:提供简单的代......
  • 学习笔记9
    信号和信号处理本章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释了信号的来源,包括来自硬件、异常和其他进程的信号;然后举例说明了信号在Unix/Linux中的常见用法;详细解释了Unix/Linux中的信号......
  • 第六章学习笔记
    第六章学习笔记第六章信号和信号处理1.信号和中断信号:发给进程的请求,将进程从正常执行转移到中断处理。中断:是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处......
  • 学习笔记9
    第六章信号和信号处理信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。进程:一个“进程”就是一系列活动广义的“进程”包括:从事日常......
  • 第六章学习笔记
    第六章信号和信号处理知识点总结信号是指随时间或空间变化的信息载体,可以是各种形式的数据,比如声音、图像、视频、电压等。信号处理涉及对这些信号进行获取、处理、分析和解释的一系列技术和方法。1.信号类型:-连续信号:在连续时间内定义的信号,如声音波形。-离散信号:只在离散......
  • 信息安全系统设计与实现学习笔记9
    学习笔记9一、知识点归纳以及自己最有收获的内容1.信号和信号处理进程的概念一个“进程”是一系列活动,包括从事日常事物的人、在用户模式或内核模式下运行的Unix/Linux进程以及执行机器指令的CPU。中断中断可分为三类:来自硬件的中断、来自其他人的中断、自己造成的中断......
  • 数学微积分,学习笔记,等价无穷小的证明:(1+x)^a-1 ~ ax
    \(\lim_{x\to0}\frac{\sqrt[n]{1+x}-1}{\frac{x}{n}}=1\)的证明\[\lim_{x\to0}\frac{\sqrt[n]{1+x}-1}{\frac{x}{n}}=\lim_{x\to0}\frac{\left(1+x\right)^{\frac{1}{n}}-1}{\frac{x}{n}}=\lim_{x\to0}\frac{e^{x\frac{1}......
  • 学习笔记9 第六章的自学归纳
    第六章信号和信号处理信号和中断信号:发送给进程的请求,将进程从正常执行转移到中断处理中断:从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理Unix/Linux信号示例Ctrl+C:当前运行的进程终止。生成一个键盘硬件中断。键盘中断处理程序将"Ctrl+C......