windows系统的快速失败机制---fastfail
windows系统的快速失败机制---fastfail,是一种用于“快速失败”请求的机制 — 一种潜在破坏进程请求立即终止进程的方法。 无法使用常规异常处理设施处理可能已破坏程序状态和堆栈至无法恢复的的严重故障。 使用 __fastfail 终止进程开销最少。
快速失败请求是独立的请求,通常只需执行两个指令。 一旦执行快速失败请求后,内核就会采取相应的行动。 在用户模式代码中,引发速快速失败事件时,除指令指针本身外不存在任何内存依赖项。 即使存在严重的内存破坏,也可最大限度地提高其可靠性。
用户模式开始失败显示为第二个机会非持续性异常,异常代码为 0xC0000409,至少包含一个异常参数。 第一个异常参数为 code 值。 此异常代码对 Windows 错误报告 (WER) 和调试基础结构指示进程已损坏并且应采取最少的进程内操作以响应故障。 内核模式快速失败请求可以通过使用专用检错代码 KERNEL_SECURITY_CHECK_FAILURE (0x139) 实现。 在这两种情况下,都没有调用异常处理程序,因为程序预期处于损坏状态。 如果存在调试程序,就有机会在终止进程之前检查程序的状态。
Windows 8 开始支持本机快速失败机制。 不支持本机快速失败指令的 Windows 操作系统通常会将快速失败请求视为访问冲突,或视为 UNEXPECTED_KERNEL_MODE_TRAP 错误检查。 在这些情况下,仍然会终止程序,但并不一定会快速终止。
windows提供了一个内部专用API来实现这种机制---__fastfail,
原型如下:
void __fastfail(unsigned int code);
参数:
[in] code
winnt.h 或 wdm.h 中的 FAST_FAIL_<description> 符号常量表示过程终止原因。描述故障条件的类型并采用特定于环境的方式纳入故障报告。
返回值:
__fastfail 内部函数不会返回。
在内部,可以使用几个特定于体系结构的机制实现 __fastfail:
|
体系结构 |
指令 |
代码参数的位置 |
|---|---|---|
|
x86 |
int 0x29 |
ecx |
|
x64 |
int 0x29 |
rcx |
|
ARM |
操作码 0xDEFB |
r0 |
我们用VC++编译程序时,编译器会自动将这个函数链接到我们的程序实现这种机制。
windows系统的快速失败机制---fastfail的更多相关文章
- 【原创】快速失败机制&失败安全机制
这是why技术的第29篇原创文章 之前在写<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章时,我在8.1小节提到了快速失败和失败安全机制. 但是我发现当我搜索" ...
- 快速失败机制--fail-fast
fail-fast 机制是Java集合(Collection)中的一种错误机制.当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast(快速失败)事件.例如:当某一个线程A通过iter ...
- Linux系统的快速启动机制(内核切换) 【转】
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4187846 原文地址:Linux系统的 ...
- 关于java中ArrayList的快速失败机制的漏洞——使用迭代器循环时删除倒数第二个元素不会报错
一.问题描述 话不多说,先上代码: public static void main(String[] args) throws InterruptedException { List<Strin ...
- java中的fail-fast(快速失败)机制
java中的fail-fast(快速失败)机制 简介 fail-fast机制,即快速失败机制,是java集合中的一种错误检测机制.当在迭代集合的过程中对该集合的结构改变是,就有可能会发生fail-fa ...
- 面试笔记--Fast-Fail(快速失败)机制
1.解决: fail-fast机制,是一种错误检测机制.它只能被用来检测错误,因为JDK并不保证fail-fast机制一定会发生.若在多线程环境下使用fail-fast机制的集合,建议使用“java. ...
- 快速失败/报错机制 - fail-fast
一.快速报错机制(fail-fast) 这是<Java编程思想>中关于快速报错机制的描述 Java容器有一种保护机制,能够防止多个进程同时修改同一个容器的内容.如果在你迭代遍历容器的过程中 ...
- Java集合框架中的快速失败(fail—fast)机制
fail-fast机制,即快速失败机制,是java集合框架中的一种错误检测机制.多线程下用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除),则会抛出Concurre ...
- 超详细,Windows系统搭建Flink官方练习环境
如何快速的投入到Flink的学习当中,很多人在搭建环境过程中浪费了太多的时间.一套一劳永逸的本机Flink开发环境可以让我们快速的投入到Flink的学习中去,将精力用在Flink的原理,实战.这也对于 ...
随机推荐
- python ---升级所有安装过的package
# -*- coding:utf8 -*- import pip from subprocess import call from pip._internal.utils.misc import ge ...
- PTA A1017
A1017 Queueing at Bank (25 分) 题目内容 Suppose a bank has K windows open for service. There is a yellow ...
- angular复习笔记2-架构总览
angular架构总览 一个完整的Angular应用主要由6个重要部分构成,分别是:组件.模板.指令.服务.依赖注入和路由.这些组成部分各司其职,而又紧密协作,它们的关系如图所示. 与用户直接交互的是 ...
- 1 matplotlib绘制折线图
from matplotlib import pyplot as plt #设置图形大小 plt.figure(figsize=(20,8),dpi=80) plt.plot(x,y,color=&q ...
- PHP实现智能语音播报
原文地址 https://www.jianshu.com/p/91a046ec6ebc 大家估计都知道现在很多AI音响能够给你播报天气,叫你起床...甚至能够接受语音指令!所谓的人工智能音响,听起来很 ...
- 【数据泵】EXPDP导出表结构
[数据泵]EXPDP导出表结构(真实案例) BLOG文档结构图 因工作需要现需要把一个生产库下的元数据(表定义,索引定义,函数定义,包定义,存储过程)导出到测试库上,本来以为很简单的, ...
- <choose><when><if>
--说明:choose类似于switch,其中的when如果不符合则进入otherwise(类似于default),可以结合if标签使用. -- <select> -- SELECT * ...
- K8S 部署 ingress-nginx 配置 https
生成证书 mkdir cert && cd cert # 生成私钥 tls.key, 密钥位数是 2048 openssl genrsa -out tls.key 2048 # 使用 ...
- 云计算与大数据实验:Hbase shell终端操作之数据操作一
[实验目的] 1)学会向表中添加记录 2)学会添加记录时动态添加列 3)学会查看一条记录 4)学会查看表中的记录总数 5)学会删除记录 [实验原理] Hbase shell作为Hbase数据的客户端, ...
- subprocess模块的使用注意
subprocess.Popen()函数 语法格式: subprocess.Popen(arg,stdin=None,stdout=None,stderr=None,shell=False) 1.主要 ...