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

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

时间:2023-11-10 15:27:01浏览次数:39  
标签:函数 第十 中断 信息安全 笔记 捕捉 信号 进程 define

信号和中断

  • “中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。
  • 与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。
  • “中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理”。“进程”可在完成“中断”处理后恢复正常活动。
  • 根据来源,中断可分为三类:
    • 来自硬件的中断
    • 来自其他人的中断
    • 自己造成的中断
  • 按照紧急程度,中断可分为以下几类:
    • 不可屏蔽(NMI)
    • 可屏蔽
    • 进程硬件中断
    • 来自硬件的中断
    • 来自其他处理器的中断
    • 自己造成的中断
    • Unix/Linux信号示例
    • ctrl+c导致当前运行的进程终止
    • nohup a.out &命令在后台运行一个程序
    • 可以使用sh命令kill pid (or kill -s 9 pid)

Unix/Linux中的信号处理

  • Unix/Linux支持的31种信号
#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标识的目标进程发送信号。读者可以尝试以下实验。在 Linux 下,运行简单的C程序
    main(){ while(1); }
  • 使进程无限循环。从另一个(X-window)终端,使用ps -u查找循环进程pid。然后输入sh命令kill -s 11 pid循环进程会因为段错误而死亡。当某进程被某个信号终止时,它的exitValue就包含这个信号编号。父进程sh只是将死亡子进程的信号编号转换为一个错误字符串。

信号处理函数

  • 每个进程PROC 都有一个信号处理数组 int sig[32]。Sig[32]数组的每个条目都指定了如何处理相应的信号,其中0表示 DEFault(默认),1表示 IGNore(忽略).其他非零值表示用户模式下预先安装的信号捕捉(处理)函数。

安装信号捕捉函数

sigaction()的使用示例

#include <unistd.h>
#include <string.h>
#include <signal.h>
//#include <siginfo.h>

void handler(int sig, siginfo_t *siginfo, void *context)
{
    printf("handler: sig=%d from PID=%d UID=%d\n",sig, siginfo->si_pid, siginfo->si_uid);
}

int main(int argc, char *argv[])
{
    struct sigaction act;
    memset(&act, 0, sizeof(act));
    act.sa_sigaction = &handler;
    act.sa_flags = SA_SIGINFO; 
    sigaction(SIGTERM, &act, NULL);
    printf("proc PID=%d looping\n", getpid()); 
    printf ("enter kill PID to send SIGTERM signal to it\n"); 
    while(1)
    {
        sleep (10);
    }
}

信号处理步骤

  • 当某进程处于内核模式时,会检查信号并处理未完成的信号。如果某信号有用户安装的捕捉函数,该进程会先清除信号,获取捕捉函数地址,对于大多数陷阱信号,则将已安装的捕捉函数重置为DEFault。然后,它会在用户模式下返回,以执行捕捉函数,以这种方式篡改返回路径。当捕捉函数结束时,它会返回到最初的中断点,即它最后进入内核模式的地方。因此,该进程会先迁回执行捕捉函数,然后再恢复正常执行。
  • 重置用户安装的信号捕捉函数:用户安装的陷阱相关信号捕捉函数用于处理用户代码中的陷阱错误。由于捕捉函数也在用户模式下执行,因此可能会再次出现同样的错误。如果是这样,该进程最终会陷入无限循环,一直在用户模式和内核模式之间跳跃。为了防止这种情况,Unix内核通常会在允许进程执行捕捉函数之前先将处理函数重置为 DEFault。这意味着用户安装的捕捉函数只对首次出现的信号有效。若要捕捉再次出现的同一信号,则必须重新安装捕捉函数。但是,用户安装的信号捕捉函数的处理方法并不都一样,在不同Unix版本中会有所不同。例如,在 BSD Unix中,信号处理函数不会被重置,但是该信号在执行信号捕捉函数时会被阻塞。
  • 信号和唤醒:在Unix/Lintx内核中有两种SLEEP进程;深度休眠进程和浅度休眠进程。前一种进程不可中断,而后一种进程可由信号中断。如果某进程处于不可中断的SLEEP状态,到达的信号(必须来自硬件中断或其他进程)不会唤醒进程。如果它处于可中断的SLEEP状态,到达的信号将会唤醒它。例如,当某进程等待终端输入时,它会以低优先级休眠,这种休眠是可中断的,SIGINT这类信号即可唤醒它。

苏格拉底挑战



标签:函数,第十,中断,信息安全,笔记,捕捉,信号,进程,define
From: https://www.cnblogs.com/zsj6787/p/17824157.html

相关文章

  • 《信息安全系统设计与实现》第十周学习笔记
    《信息安全系统设计与实现》第十周学习笔记第六章信号和信号处理信号和中断(1)“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。(2)一个“进程”就是......
  • c#学习笔记-------------------Quartz.NET任务调度框架
    Quartz.NET任务调度框架 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了Quartz.......
  • ODE 复习笔记
    有三四周的课没听……基本就是一个速成版速成笔记Ch1IntroductionDifferentialEquationsandBasicConceptslinear,nonlinearorderhomogeneous,haveconstantcoefficientsTHM:AllODEscanbeequivalentlydescribedbyasystemof1st-orderODE.\(\Leftrig......
  • 将笔记本电脑的无线网卡变成AP
    全部使用命令行操作:1、查看是否支持:netshwlanshowdrivers如果有:支持的承载网络 :是2、设备无线AP:netshwlansethostednetworkmode=allowssid=testkey=123456783、启动AP:netshwlanstarthostednetwork4、关闭AP:netshwlanstophostednetwork ......
  • 打工笔记-------------------------.NET Reactor使用方法
    .NETReactor是一个用于保护.NET应用程序的代码混淆器和加密器。它可以防止应用程序被反编译和篡改使用步骤下载和安装.NETReactor:从DongleSoftware的官方网站下载.NETReactor5.9.8.0的安装程序,并按照提示进行安装。创建或导入项目:在.NETReactor中,创建一个新的......
  • tqsdk 应用笔记 一 回测
    fromdatetimeimportdatefromtqsdkimportTqApi,TqAuth,TqBacktest,TargetPosTask#在创建api实例时传入TqBacktest就会进入回测模式,开启图形化界面api=TqApi(backtest=TqBacktest(start_dt=date(2018,5,2),end_dt=date(2018,5,10)),web_gui="http://127......
  • 《流畅的Python》 读书笔记 第7章_函数装饰器和闭包
    第7章函数装饰器和闭包装饰器这个名称可能更适合在编译器领域使用,因为它会遍历并注解句法树函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为。这是一项强大的功能,但是若想掌握,必须理解闭包如果你想自己实现函数装饰器,那就必须了解闭包的方方面面,因此也就需......
  • JUC并发编程学习笔记(十八)深入理解CAS
    深入理解CAS什么是CAS为什么要学CAS:大厂你必须深入研究底层!有所突破!java层面的cas------->compareAndSetcompareAndSet(intexpectedValue,intnewValue)期望并更新,达到期望值就更新、否则就不更新!packageorg.example.cas;importjava.util.concurrent.atomic.AtomicI......
  • 信息安全系统设计与实现课程第六章学习笔记
    一、知识点归纳1.信号和中断1.1进程概念进程是计算机中的基本执行单位,可以看作是一系列活动的集合。这些活动包括从事日常事务的人、在用户模式或内核模式下运行的Unix/Linux进程,以及执行机器指令的CPU。1.2中断中断是一种事件,用于通知进程需要进行某种处理,将进程从正常活......
  • 第十周学习笔记(学习笔记9)
    思维导图知识点归纳知识点总结介绍信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释信号的来源;解释Unix/Linux中的信号处理,包括信号类型、信号向量位、信号掩码位、进程PROC结构体中的信号处理程序以及信号处理步......