Nuclei处理器内核中的NMI处理

NMI概述

NMI(非屏蔽中断)是处理器核心的一种特殊输入信号,通常用于指示系统级紧急错误(如外部硬件故障等)。遇到NMI后,处理器应立即中止当前程序的执行,转而处理NMI错误。

NMI掩蔽

在RISC-V体系结构中,NMI不能被屏蔽,这意味着如果内核遇到NMI,它必须停止当前执行并转向处理NMI。

进入NMI处理模式

以NMI为例,Nuclei处理器内核的硬件行为如NMI的总体过程所示。请注意,以下操作在一个周期内同时进行:

•更新CSR寄存器:mepc和mstatus。

–这些行为遵循RISC-V标准特权体系结构规范。本文档不会重复其内容,请参阅RISC V标准权限或体系结构规范以获取更多详细信息。

•更新CSR寄存器:mcause。

–NMI的mcause值在Nuclei处理器核心中是唯一的。

•停止执行当前程序,并从CSR mnvec定义的PC地址开始。

–mnvec的值在Nuclei处理器核心中是唯一的。

•更新核心的特权模式和机器子模式。
在这里插入图片描述从mnvec定义的PC执行

Nuclei处理器核心在遇到NMI后跳转到CSR mnvec定义的PC。CSR mnvec

由CSR寄存器mmisc_ctl控制的两个潜在值:

•当mmisc_ctl[9]=1时,mnvec的值等于mtvec的数值,这意味着NMI和异常

共享相同的陷阱条目地址。

•当mmisc_ctl[9]=0时,mnvec的值等于重置后的PC值reset_vector的值。

reset_vector是核心的输入信号。请参阅Nuclei处理器核心的具体数据表

有关此信号的详细信息。

更新CSR mcause

Nuclei处理器核心将把NMI代码保存到CSR mcause中。EXCCODE由硬件自动执行时采取NMI。中断、异常和NMI都有自己指定的陷阱ID。NMI的陷阱ID有两个由CSR寄存器mmisc_ctl控制的潜在值:

•当mmisc_ctl[9]=1时,NMI的陷阱ID为0xfff。

•当mmisc_ctl[9]=0时,NMI的陷阱ID为0x1。

该软件可以通过查询Trap ID来识别Trap原因,并构建相应的Trap处理程序

针对不同类型的陷阱。

更新特权模式

NMI是在机器模式下移交的,因此当核心进行NMI时,特权模式将切换到机器模式。

更新机器子模式

Nuclei处理器核心的机器子模式在msubm中指示。TYP实时存档。当核心采取NMI时,Machine Sub Mode(机器子模式)将更新为NMI处理模式,因此:

•提交的msubm。TYP更新为NMI处理模式,如进入/退出NMI时CSR mstatus和msubm更新所述(第20页),以反映当前机器子模式为“NMI处理方式”。

•msubm的值。PTYP将更新为msub的值。获取NMI之前的TYP,如进入/退出NMI时CSR mstatus和msubm更新所示(第20页)。msubm的值。将使用PTYP

以恢复msubm的值。退出NMI处理程序后的PTYP。

在这里插入图片描述退出NMI处理模式

在处理完NMI后,他们再次从NMI中退出,并转而执行主程序。

由于NMI是在机器模式下处理的,软件必须执行mret才能退出NMI处理程序。

处理器在执行mret指令后的硬件行为如退出NMI的整个过程所示。请注意,以下硬件行为在一个周期内同时完成:

•停止执行当前程序,并从CSR mepc定义的PC地址开始。更新CSR mstatus。更新特权模式。

–这些行为遵循RISC-V标准特权体系结构规范。并且这些行为与“退出异常处理模式”的行为完全相同,本文在此不再赘述其内容,更多细节请参阅RISC-V标准特权架构规范。

•更新机器子模式。

在这里插入图片描述

更新机器子模式

msubm的值。TYP实时指示Nuclei处理器核心的机器子模式。执行mret指令后,硬件将根据msubm的值自动恢复core的Machine Sub Mode。PTYP:

•取NMI,msubm的值。在采取NMI之前,PTYP更新为Machine Sub Mode(机器子模式)。执行mret指令后,硬件将使用msubm值自动恢复机器子模式。PTYP,如进入/退出NMI时CSR mstatus和msubm更新中所示。通过这种机制,核心的机器子模式恢复到采取NMI之前的相同模式。

NMI服务程序

当核心获取一个NMI时,它会跳转到mnvec定义的地址执行程序,该地址通常是NMI服务例程。

注意:由于没有硬件可以在获取或退出NMI时自动保存和恢复执行上下文,因此软件需要明确使用指令(汇编语言)来保存和恢复上下文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于nuclei和yaml的问题,根据引用和引用的内容,nuclei是一个用于执行网络安全扫描的工具,可以通过命令行来使用。而yaml则是一种用于描述数据序列化格式的语言。 在引用,展示了一个使用nuclei的命令行示例。其,使用了参数来指定待扫描的目标URL、指定扫描的标签、指定扫描的严重程度、指定扫描的作者,并将扫描结果输出到result.txt文件。 而在引用,展示了一个使用nuclei进行调试扫描的命令行示例。其,使用了参数来指定待扫描的目标URL和使用的模板文件(使用了yaml格式的模板文件)。 综上所述,nuclei是一个可以通过命令行使用的网络安全扫描工具,而yaml则是用于描述数据序列化格式的语言,可以用来编写nuclei的模板文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [POC模拟攻击利器 —— Nuclei入门(一)](https://blog.csdn.net/liwenxiang629/article/details/125995096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Nuclei——一款基于YAML语法模板的快速漏洞扫描工具](https://blog.csdn.net/asaotomo/article/details/122395708)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值