当前位置:首页 » 区块链知识 » asm区块链

asm区块链

发布时间: 2021-09-20 09:20:12

1. 度宇宙的邀请码

最新3UA6NW

2. EXIN是什么样的认证机构,权威性如何

EXIN是一家专注于面向职业从业者的国际知名认证机构。EXIN是国际信息科学考试学会(Exam Institute of Information Science)的简称。1984年EXIN由荷兰政府-经济事务部创办,目前从荷兰政府部门独立成立了EXIN基金会。EXIN在八十年代倡导自动化,九十年代推广计算机化,2000年通过IT服务管理最佳实践在全球推广信息化。EXIN作为全球IT服务管理-ITIL的创始认证机构,持有EXIN认证的IT管理人才遍布全球世界五百强企业。 来自全球165多个国家和地区,累计近三百万的ICT职业人士已经获得了EXIN颁发的资格证书。
2018年作为国际IT管理领域的知名认证和人才鉴定机构,EXIN携手英国计算机学会等多家权威组织发起了国际数字化能力基金会-IFDC (International Foundation of Digital Competence) 并发布了全球数字化服务管理体系-VeriSM。目前已覆盖数字化转型与创新管理认证如数字转型官-Digital Transformation Officer - DTO”其中包括VeriSM、人工智能AI、物联网IoT、区块链 Block Chain、云计算 Cloud Computing 和大数据 Big Data。此外,还包含服务集成管理SIAM、DevOps,敏捷开发 Agile Scrum、精益IT、IT服务管理ISO/IEC20000、数据中心管理、基于欧盟数据隐私保护条例GDPR隐私保护的数据保护官- Data Protection Officer- DPO”、信息安全ISO27001、IT资产管理、商业分析、软件测试、绿色IT、OpenStack、安全编程、应用管理等类别。

3. 帮忙说一下集成电路中的各种标语

Absolute Section(绝对段)
具备不可被链接器改变的固定(绝对)地址的段。
Access RAM (存取RAM,仅限PIC18CXXX系列器件)
这是数据存储器RAM中的一个区间,无论目前所选的存储体为何均可对其进行访问。有了它,即可通过指令访问特殊功能寄存器而无须改变所选存储体。存取RAM还包括一些通用寄存器(GPR)。它对于在上下文切换期间(如中断期间)保存所需变量很有用处。当用于引用PIC18CXXX器件时,存取 RAM指无论存储体选择位(BSR)设置值为何,均允许存取的特殊通用寄存器。
Acquisition Time (TACQ,采集时间)
该时间与模拟数字(A/D)转换器有关。它是PIC18CXXX A/D上的保持电容充电到模拟输入电压电平时的时间。’当GO位置1时,模拟输入与保持电容断开,A/D转换开始。
A/D
指的是模拟数字转换器。见“Analog-to-Digital (A/D,模拟数字转换)”的说明。
ALU
算术逻辑单元。器件上负责数学(加、减…)、逻辑(与、或…)和移位运算的逻辑单元。
Analog(模拟)
指通过将不同频率或幅值的信号叠加到给定频率的载波上进行电子传输的过程。
Analog-to-Digital (A/D,模拟数字转换)
将一个模拟输入电压转换到与之成正比的数字值的过程。
汇编语言
将二进制机器码描述成可读形式的符号语言。
AUSART
可寻址通用同步异步收发器。该模块可作为一个全双工异步通讯口运行,也可作为一个半双工同步通讯口运行。当运行在异步模式下时,USART可与一台PC的串行端口连接。
Alphanumeric(字母数字符)
字母数字符包括字母和0到9的数字。
Application(应用)
用户开发的一整套软硬件结合体,通常是一个由PICmicro®单片机控制的产品。
Assemble(汇编)
汇编器所做的事。见assembler(汇编器)。
Assembler(汇编器)
一种将用户的汇编源代码(.asm)译成机器码的语言工具。MPASM™是Microchip的汇编器。
Assembly(汇编语言)
最终由机器语言取代的编程语言。机器语言完全由数字组成,人们几乎无法识别和读写。汇编语言与机器语言的结构和命令集相同,但允许程序员使用名称(指令)取代数字进行编程。
Assigned Section(赋值段)
在链接器命令文件中赋值到目标存储器区块的段。链接器将赋值段分配给特定的目标存储器块。
Bank(存储体)
是一种对数据存储器寻址的方法。由于增强型器件具备8位直接寻址功能,指令可寻址到256字节。为了使器件能具备多个数据存储器,将数据存储器分区为相邻的存储体,每个存储体包含256字节的数据。要选择所需的存储体,需对存储体选择寄存器(BSR)进行正确配置。共可实现16个存储体。
Baud(波特)
通常用它来描述串行端口的通讯速度的快慢。与每秒位速(bps)相当。
BCD
见“Binary Coded Decimal (BCD,二进制码十进制小数)”中的说明。
Binary Coded Decimal (BCD,二进制码十进制小数)
其每4位表示一个0-9的十进制数。通常一个字节包含0-99的两位十进制数。
BOR
见“Brown-out Reset (BOR,掉电复位)”中的说明。
Brown-out(掉电)
当电源电压短时跌落到规定最小工作电压以下的情况。当电路中负载增加时可使系统/器件的电压下降,而导致这种情况的发生。
Brown-out Reset (BOR,掉电复位)
当电源电压跌落到规定电压范围以下时,迫使器件进入复位状态的电路。有些器件具备内部BOR电路,而其它器件则需要外部电路才可产生掉电复位。
Bus width(总线宽度)
这是总线可运载信息的位数。对数据存储器来说,总线宽度为8位。对增强型器件,程序存储器总线宽度为16位。
Breakpoint – Hardware(断点 – 硬件)
一种执行后会导致程序暂停的事件。
Breakpoint – Software(断点 – 软件)
一个执行固件后程序暂停的地址。通常由一个特殊的断点操作符得到。
Build(重编译)
对一个应用的源代码进行重新编译的功能。
C
一种高级编程语言,可用于为PICmicro® MCU,特别是高端器件系列产生代码。
Calibration Memory(校准存储器)
用于保存PICmicro®单片机板上RC振荡器校准值的特殊功能寄存器。
CAN
控制器局域网。一种针对汽车和工业应用的外设接口。
Capture(捕捉)
CCP模块的一种功能,当预定事件发生时,定时器/计数器的值被“捕捉”到保持寄存器模块中。
Capture Register(捕捉寄存器)
是一种16位寄存器,当捕捉事件发生时将TMR1寄存器中的16位值装入该寄存器。
CCP
捕捉、比较和脉宽调制(PWM)。CCP模块可配置作为输入捕捉、定时器比较或PWM输出运行。
COFF
通用目标文件格式。一种由MPLINK™ LINKER链接器生成的包含机器码和调试信息的中间文件格式。
Command Line Interface(命令行界面)
命令行界面指的是在DOS下执行一条带选项的命令。执行MPASM™ 汇编器和任一命令行选项或文件名将调用该汇编器。当命令行选项缺省时,将执行默认输入界面。
Common RAM(共用RAM)
是数据存储器RAM上在所有存储体中地址相同的区。该通用RAM可在70h - 7Fh(含)的地址间实现。它对于上下文转换期间(如中断期间)的保存所需变量是很有用处的。
Compare(比较)
CCP模块的功能之一,当定时器的寄存器值与比较寄存器中的值相符时器件将执行一个动作。
Compare Register(比较寄存器)
是一种16位寄存器,包含一个与16位TMR1寄存器相比较的值。当计数器与比较寄存器中的内容相符时,比较功能模块将被触发。
Compile(编译)
编译器所做的事。见“compiler(编译器)”。
Compiler(编译器)
一种将用户的C语言源代码译成机器码的语言工具。MPLAB® C17和MPLAB® C18均为Microchip公司的C编译器,分别用于PIC17CXXX和PIC18CXXX器件的编译。
Configuration Bits(配置位)
用于编译设置PICmicro®单片机运行模式的位。配置位不一定需要预编程。对于模拟器和仿真器,可通过Options > Development Mode对话框设置;对于编程器可在 _ _ CONFIG MPASM™指令中设置。
Configuration Word(配置字)
这是非易失性存储器位置,它规定了器件运行的一些特征(如振荡模式,WTD的使能,起动定时器的使能)。这些特征均可在器件编程时进行规定。对于EPROM存储器,只要某位的值为“1”,均可在日后编程为“0”;如果值为“0”,必须先擦除器件后再编程为“1”。
Conversion Time (Tconv,转换时间)
该时间与模拟数字(A/D)转换器相关。这是PIC18CXXX A/D转换器将保持电容上的模拟电平转换成数字值所需的时间。
CPU
中央处理单元。将指令解码并决定程序执行所需的操作数并负责运算。将数学运算、逻辑运算和移位运算传送到ALU。
D/A
见“Digital to Analog(数字模拟转换)”的说明。
DAC
数字模拟转换器。
Data Bus(数据总线)
将数据传送到数据存储器或从数据存储器传送回来的总线。
Data EEPROM(数据EEPROM)
数据电可擦除可编程只读存储器。该存储器可由CPU编程和再编程,以确保在掉电时关键值/关键变量被保存在非易失性存储器中。
Data Memory(数据存储器)
在数据总线上的存储器。该存储器是易失的(SRAM),包含特殊功能寄存器和通用寄存器。
Data Memory(数据存储器)
被仿真的PICmicro®器件上RAM的通用文件寄存器(GPR)。文件寄存器窗口显示数据存储器。
Digital-to-Analog(数字模拟转换)
从数字值转换到与之成正比的模拟电压的过程。
Direct Addressing(直接寻址)
指令中包含数据存储器地址的情况。执行这种类型的指令将总是访问嵌入地址的数据。
Directives(指令)
指令通过告知MPASM™汇编器如何处理助记符、定义数据、格式和列表文件来对汇编器操作进行控制。指令简化了编码并可根据特殊要求对输出进行定制。
Download(下载)
下载是将数据从PC主机上传送到另一台设备,如仿真器、编程器或目标板的过程。
EEPROM
电可擦除可编程只读存储器。是一种电可擦除的特殊类型的PROM。数据被逐个字节地擦除。即使在电源被切断时,EEPROM也会将其中的内容保存下来。
Embedded System(嵌入式系统)
内建或集成到器件上的一种特殊功能计算机。用于控制、监控和协助运行。所有嵌入式系统均包含计算机,其中最简单的一种为单片微处理器(“芯片”)。可将微处理器进行设计以添加某种功能的ROM软件(“固件”),如PC的ROM BIOS。(定义来源于ChipCenter.com)
Emulation(仿真)
开发时执行安装在仿真存储器中的软件,如同执行安装在单片机中的固件一样。
Emulation Memory(仿真存储器)
仿真器中的程序存储器。
Emulator(仿真器)
进行仿真的硬件。
Emulator System(仿真系统)
MPLAB® ICE仿真系统包含线夹、处理器模块、器件适配器、电缆以及MPLAB®软件。PICMASTER®仿真系统包含线夹、针对不同器件的不同探针、电缆以及MPLAB®软件。
EPROM
电可编程只读存储器。该存储器能够在线编程。要擦除它必须将其置于紫外线下。
Event(事件)
说明一个总线循环,包括地址、数据、通过次数、外部输入、循环类型(取指,R/W)及时间戳等。用事件来描述触发器和断点。
Executable Code(可执行代码)
见Hex Code(十六进制代码)。
Export(引出)
将数据以标准格式从MPLAB® IDE中传送出来。
Expressions(表达式)
表达式用于MPASM™汇编器源代码行的操作数字段,包含常量、符号或由算术运算符分隔的常量和符号的任意组合。每个常量或符号均前置正负号以表示表达式的正负。
External RAM (外部RAM,仅限PIC17CXXX和PIC18CXXX器件)
非片上读/写存储器。
EXTRC
外部阻容(RC)。有些器件具备允许来自外部RC时钟的器件振荡器选项。与一些器件上的RC模式相同。
Flash(闪速)
EEPROM的一种类型,数据被逐个区块擦除而不是逐个字节擦除。
FLASH Memory(闪存)
这种存储器能够在线编程和擦除。存储器的编程技术在功能上与EEPROM存储器几乎相同。
FOSC
器件振荡器的频率。
File Registers(文件寄存器)
片上通用和特殊功能寄存器。
GIO
通用输入/输出。
GPIO
通用输入/输出。
GPR
通用寄存器(RAM)。可用于存储动态程序变量的那部分数据存储器。
Harvard Architecture(哈佛结构)
在哈佛结构中,程序存储器和数据存储器是相互隔离的。它使对数据存储器和程序存储器的访问可同时进行,提高了器件的性能。PICmicro®器件采用哈佛结构。
Hex Code(十六进制代码)
将源代码汇编或编译成标准十六进制格式代码的可执行指令,也称可执行码或机器码。十六进制代码被保存在hex file(十六进制文件)中。
Hex File(十六进制文件)
一种ASCII文件,包含适合进行器件编程的十六进制地址和值(十六进制代码)。本格式可由器件编程器读取。
High Level Language(高级语言)
与汇编代码相比,用于编写程序的高级语言对处理器进行了更高水平的提取。高级语言(如C语言)利用编译器将语句译成目标处理器能够处理的机器指令。
Holding Capacitor(保持电容)
这是模拟数字(A/D)模块中的一个电容,它在转换开始时“保持”模拟输入电平。信号采集期间,保持电容被模拟输入引脚充电/放电。转换开始时,保持电容从模拟输入端断开并将该电压“保持”以进行A/D转换。
HS (High Speed,高速)
高速。是器件振荡模式的一种。应调整振荡电路以支持高频运行。目前它支持4 MHz至25 MHz的运行频率。
I2C™
内部互联电路。这是一种双线通讯接口。它是“SSP”和“MSSP”模块模式的特性之一。
ICD
在线调试器。MPLAB® ICD是Microchip公司针对PIC16F87X器件的在线调试器。MPLAB® ICD在MPLAB® IDE下使用。
ICE
在线仿真器。MPLAB® ICE是Mcrochip公司的在线仿真器,在MPLAB® IDE下使用。
IDE
集成开发环境。是一种具备多种功能的固件开发应用程序。MPLAB® IDE在Windows®应用程序上集成了编译器、汇编器、项目管理器、编辑器、调试器、模拟器以及一系列其它工具。进行应用开发的用户可无须离开 MPLAB® IDE桌面即可编写代码、编译、调试和测试应用。
Identifier(标识符)
函数或变量的名称。
Import(引入)
将数据从外部信号源传送进MPLAB® IDE,如数据可来自一个十六进制文件。
Indirect Addressing(间接寻址)
当指令中不包含数据存储器地址时,指令在INDF地址执行,从而使数据存储器地址成为FSR寄存器中的值。指令的执行将总是访问FSR寄存器所指向地址的数据。
Initialized Data(初始数据)
由初始值定义的数据。在C语言中,int myVar=5; 定义的变量将驻留在初始数据区中。
Instruction Bus(指令总线)
用于将指令字从程序存储器传送进CPU的总线。
Instruction Cycle(指令周期)
指令执行的事件。有四种事件,分别描述为:解码,读取,执行和写入。指令并不同时执行所有事件。欲了解指令周期期间的操作,请查看每条指令的有关说明。四个外部时钟(TOSC)组成一个指令周期(TCY)。
Instruction Fetch(取指令)
哈佛结构下,欲执行一条指令时,下一个程序存储器中的地址将被“取出”,并在当前指令执行完毕时立即被解码。
Interrupt(中断)
向CPU发出的信号,迫使程序流程进入中断矢量地址(程序存储器中的04h)。程序流程改变前,程序计数器中的内容被迫进入硬件堆栈,从而使程序执行返回中断点。
INTRC
内部阻容(RC)。有些器件具备允许时钟来自内部RC电路的器件振荡器选项。
KEELOQ®
KEELOQ®是一种专利跳码技术。Microchip的KEELOQ®产品为单向传输提供了一种数据加密方法,即使按下同一按钮发送的代码也各不相同。
LCD
液晶显示器。用于为系统提供状态显示。它可能需要定制LCD玻璃的规格。
LED
发光二极管。用于为系统提供状态显示。
Librarian(库管理员)
一种创建和操纵库的语言工具。MPLIB™是Microchip的库管理员。

4. spring源码怎么读

在我们的生活之中,有形形色色的万物(Object),有飞机,有汽车,有轮船,还有我这个沧海一粟的java讲师。
试问:了解飞机底层架构的人,就一定能把飞机开好吗?精通汽车的构造和底层原理的人,就保证开车不出事故吗?或者反过来问,一个多年的开出租车的老司机,技术非常娴熟,但是你问他汽车的架构和底层原理,你觉得有多少老司机能准确的答出来?
那就对了,了解了,读懂了spring底层源码的程序员,我们并不能保证他就是一个好程序员,我心中的一个好的程序员是要能够提出解决方案的程序员,就好比清华北大确实只是个过程,最后的目的,是为国家为人民做出奉献才是我们活着的价值。所以说我并不看好去阅读spring源码这个行为。闻道有先后,术业有专攻,我们不是提供底层技术的人!绝大多数的程序员,我以为正确的做法是站在巨人的肩膀上,把前辈留下来的精髓发扬光大才是正道,简而言之,把怎么用,和为什么要这么用学好才是大多数程序员学习技术的关键。就好比去学驾照的时候,教练只需要关心你是否会开车,是否遵守交通规则,并不关心你是否了解汽车是如何在路上跑起来的。
一个人的精力和时间都是有限的,分细了来说,开发者就是技术的使用者,重点在于如何正确熟练的使用,而不是一昧地去关心底层原理,如果要完全读懂spring源码,首先,英语就得很厉害吧,其次,得花多少时间?就算读懂了,那收获和付出也不成正比,大把大把的时间为何不花在java更多,更高级,更有意义的技术上呢?笔者此话并不是说spring源码读了没用,只是让我们的时间更有价值,例如分布式微服务,区块链技术,大数据,python,作为新时代的IT佼佼者,我们是否应该随着时代的脚步,迎接崭新的未来?我奉劝大多数人,不必去看spring源码,除非你确实感兴趣作为技术研究,这样是可以的。一个正常的工作者,是不建议花宝贵的时间去看的,那学生就更不应该去看了。此话怎讲?我以为,学生应以学业为重,士不可不弘毅,任重而道远,首先应该扩展其知识的广度,和技术的娴熟使用,再培养学生独立解决问题的能力,沟通协作的能力,最后才考虑技术的深度。
笔者在多年前也被面试过很多很多问题,但是从来没有一个面试官会问spring底层源码,曾经阿里巴巴的架构师也面试过我,直到后来,我成为了面试官,当我去面试别人的时候,我也不会去问spring源码这些东西,因为99.9%企业招人进来,是要做事实的,不是让你去研究一个技术,绝大多数更在乎的是利用现有的技术,去完成一些项目功能。除了世界上极少数著名的企业他们需要技术研究员,才对这些有所要求,那要招这类人才,估计至少也是名校研究生以上吧,所以普通程序开发者,我觉得学好技术的正确与熟练使用,才是重中之重!
不宜本末倒置,不宜好高骛远。笔者从事Java行业以来,真要说全阶段全程全栈都精通的人,应属风毛菱角,故此,更应让所学知识运筹帷幄,举一反三,千里炉火,万里纯青。以上篇幅在说我对阅读spring源码的一些强烈建议,最终结论,是不看、不读就此作罢。
那有的感兴趣的人非要阅读呢?

Ok,其实阅读spring源码并不算很难。
首先,应该去官网spring.io阅读写spring框架的理念,就好比读一本书,要阅读这本书的纲要,要明白为什么要设计spring架构。
然后,应该分模块阅读,先从核心模块开始阅读:如:

IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

那么在阅读的时候,英文能力差的话,可以使用翻译软件翻译成中文阅读,毕竟不是每个程序员英语都很棒,毕竟中国人看中国字更容易去理解。当然,有些翻译过来的并不准确,这个时候可以利用网络,去查看那段不理解的地方。
然后,把spring的jar包下载下来,利用IDEA打开,可以使用download资源,会发现,每个方法上面都会有详细的英文注释。一边看官方的说明,一边查看代码的编写,不难发现,非常多的代码写得很精辟,所以十分考验一个程序员的java基本功,特别是反射,JDK\CGLIB代理,和java常用的设计模式等。

5. 学编程月薪多少

时间就是金钱。

对于快速发展的互联网行业,这句话更是金科玉律。

一个项目,如果两家公司同时想到,两家公司同时研发,那么谁能更快更好的研发出来,谁就能盈利。

在这个快节奏的时代,产品更新迭代甚至都能以分钟计算,技术虽然没有那么夸张,但是新技术的研发学习应用也是在不断的缩短时间。

而适合的技术人才,对于很多公司来说是至关重要的存在。

互联网的发展,让IT 职业人才的缺口越来越大。据保守估计,目前中国市场对 IT 人才的需求每年超过 30 万人,但国内高校计算机专业培养出来的学生仅为 16万人,远远不能满足市场的需要。虽然各家企业开出更高的职位待遇,但是仍然招不到合适的技术人员。

根据国家统计局去年公布的行业工资数据显示,IT技术人员从业者平均年薪已经高达11万左右。而对于科技公司的程序员来说,只会比这个更高。更别说国内互联网巨头BAT,年薪30万的程序员更是大批存在。

所以,如此高薪的就业市场让更多的人想要做程序员,自然很多人就走上了学编程的道路。

那么,那些学编程的人现在过的怎么样呢?是不是真的拿到了期望中的高薪呢?

网友A:

我本科学校211,但我学的专业不太热门。我本身对技术很感兴趣,就自己在网上找了WEB前端教程学习,成功转行。做我那个专业的话,刚毕业工资也就4000,还是2010年的北京。现在我工资已经年薪30万+,当然中间有跳槽几次。

网友B:

大学专业不是喜欢的,出来找工作工资也不高。就专门去学了测试,现在在一家游戏公司做测试,我刚毕业两年,年薪16万,税后。

网友C:

我本来就是学计算机专业的,但是我的学校不是特别有名的那种,大家都知道大学教育学出来的东西肯定跟企业的要求有很大的差距。大四下半年,我就自己在网上找教程看,然后加了一些学习群,遇见不懂的问题就在这些学习群问,现在毕业的第一份工作,月薪过万。

网友D:

我弟弟,学习不好,高中毕业之后上了一个职业学校。连大专都不算吧。毕业之后找工作都找不到,我爸就花大价钱让他去IT培训班,学的Java。我弟算是很聪明的那种孩子,半年之后在我们三线城市找了一份工作,现在收入7千多,在贵阳。别人我不知道,但是我爸还挺高兴的,认为钱花的值了。

上面这几个人的例子算是很成功的了,当然也有失败的例子。

网友E:

亲戚家的孩子,不好好上学,职高毕业连20岁都不到。父母觉得他应该去学点东西,现在IT培训不是很火吗,就给孩子报了班。结果孩子虽然去了,但是也不怎么好好学,不仅没学到东西,钱也浪费了。工作更是没着落。

网友F:

我的同事,一个三十多岁上有老下有小的男人,觉得我们现在的工作赚钱少,不够花,媳妇儿还想要二胎。于是想转行做IT,去报了培训班。结果学了几个月出来,也没什么变化,不知道是不是年级大了没什么学习的精力,而且家庭责任重,不能像年轻的程序员那样拼命加班出差。导致现在不上不下。

看了上面的一些网友的真是案例,不知道你是怎么觉得的。

学编程这件事情还是要理性的看待,从自身的客观条件出发,看看自己是不是适合。

在自己做出选择之前,要做好了付出足够努力的准备,毕竟想到和得到之间还有一个做到,天上没有掉馅饼的, 所有的得到背后都是艰苦奋斗的历程。

6. 我电脑物理内存写的是2G,但是系统休眠文件却只有1.48G,这是为什么

更全面的回答 求采纳

发这份笔记时,比较惶恐,因为连我自己都觉得,这个东西没用。但是事实上,在很多偏门或机密的领域里,它仍然是非常有价值的。鉴于国内这方面资料比较少,所以写了一篇笔记,与大家共享。

Analyze Hibernation File

Introction
What’s Hibernation File?
Hibernation File也就是系统的休眠文件Hiberfil.sys,位于系统卷的根目录下。windows在系统休眠时,将物理内存中的数据(包括系统运行时的状态数据)mp到Hiberfil.sys,并生成一个有效的文件头。下次系统开机的时候,利用hiberfil.sys文件中的数据恢复系统。

How to generate a valid Hiberfil.sys?
从用户的角度来说,系统停机时,按下休眠按钮,则会自动生成一个有效的Hiberfil.sys。
从电源管理器的角度来说,只有当系统电源状态从S0àS4的时候,才会生成一个有效的休眠文件。
注:当系统正常运行时,电源状态为S0;完全关闭时,电源状态S5;休眠状态时,电源状态S4,此时只有电源电路和唤醒电路才有点滴电流;中间的几个状态S1,S2,S3,都是不同程度的睡眠状态。
从S4àS0的过程,也就是利用Hiberfil.sys恢复系统的过程。

Valuation of Hibernation File
It is quick and easy
恢复系统比重启系统要快。不解释(除特殊情况)。
A new method to mp physical memory
利用hibernation技术mp系统物理内存中的数据。这些数据包括处理器状态,当前EIP, IDT table, GDT table, SSDT table,当前状态的可执行代码和数据…
利用这些数据可以分析系统状态。

Leak Information?
Yes。正常情况下,利用Hiberfil.sys恢复系统,虽然恢复后会清除掉Hiberfil的Header数据(one page),使之无效,但是Header之后的数据还会保留。利用外部工具,构造一个Header,就可以读取该Hiberfil.sys的所有信息了。

Defensive uses
kernel –land malwares detection
分析hibernation file, 可以通过检查SSDT, IDT, GDT表的完整性来判断系统是否被修改。虽然在内核层有了更为轻量级的方法去检测系统关键表的完整性,但是存在anti对抗问题,hibernation提供了一种终极检测方式。
根据hibernation恢复原理,不在hibernation file中的代码,将不会被恢复执行。基于此,可以对抗SMM rootkit。(不做介绍)
Offensive uses
可以获取敏感数据,如:password, keys.
修改hibernation file, 提高某个进程的执行权限;绕过系统登录密码…

Hibernation file internals
Headline of hibernation process
当磁盘被挂起时(S0àS4),Windows内核(ntoskrnl.exe)执行体创建一个hibernation file,并将物理内存中的数据用LZ77算法压缩后,写入文件。
系统恢复时(S4àS0),OSLoader.exe读取hibernation file,加载解压后的数据到物理内存中,使系统以一种快捷方式恢复到休眠时的状态。
注:恢复过程的分析,见appendix 1。

Hibernation file structure
先直观的看下文件结构图:(左侧,域列表,是文件结构的组成域)

format.jpg下载此附件需要消耗2Kx,下载中会自动扣除。

File Header
位于休眠文件的第一页(0x1000 bytes)数据空间。该结构PO_MEMORY_IMAGE由内核调试符号导出。结构中主要包含了休眠文件的创建日期,版本号,校验和,有效标志,物理页数量等信息。
注:用休眠文件恢复系统时,只有第一页数据被清0,也就是file header,其他数据保留不变。

FreeMap Page
包含一个ulong数组,保存了空闲内存页的映射信息。

Processor State
处理器状态,由内核函数KiSaveProcessorControlState保存。包括控制寄存器CRX,GDT, IDT, EIP…
结构定义如下:
typedef struct _KPROCESSOR_STATE32
{
CONTEXT ContextFrame; //
KSPECIAL_REGISTERS SpecialRegisters; //
} KPROCESSOR_STATE32, *PKPROCESSOR_STATE32;

注:从vista版本以后,字段2和3的位置就交换过来了。

Memory Range Array
存储物理内存页的压缩数据。
typedef struct _MEMORY_RANGE_ARRAY
{
MEMORY_RANGE_ARRAY_LINK MemArrayLink;
MEMORY_RANGE_ARRAY_RANGE MemArrayRange[MAX_ARRAY_ENTRY];
} MEMORY_RANGE_ARRAY, *PMEMORY_RANGE_ARRAY;

字段MemArrayLink作为链接表指针,将多个这样的结构链接维护起来;
字段MemArrayRange指向数据区,最多包含255个入口。这也就是为什么要存在一个指向下一个MEMORY_RANGE_ARRAY结构的指针MemArrayLink,因为当休眠文件很大的时候,一个MEMORY_RANGE_ARRAY存储不了所有数据。

结构MEMORY_RANGE_ARRAY_RANGE定义如下:

typedef struct _MEMORY_RANGE_ARRAY_RANGE
{
ULONG PageNo; // ???
ULONG StartPage; // Block start (physical address)
ULONG EndPage; // Block stop (physical address)
ULONG CheckSum; // Always zero, but used under Windows 2000.
} MEMORY_RANGE_ARRAY_RANGE, *PMEMORY_RANGE_ARRAY_RANGE;
指定了页开始地址和页结束地址,在这些地址范围内的数据都是经过压缩算法来压缩后存储的,这个结构所对应的整块数据就是一个压缩块PageCompressedData,压缩快的起始部分是一个结构体,如下:
struct IMAGE_XPRESS_HEADER
{
CHAR Signature[8] = 81h, 81h, "xpress";
BYTE UncompressedPages = 15;
UINT32 CompressedSize;
BYTE Reserved[19] = 0;
};
也就是说,压缩块的标识是:\x81\x81xpress;之后就是压缩数据了。

注:每个压缩快所对应的解压后的块大小为64KB(0x10 pages)。
compression algorithm
This algorithm has been publicly documented since recent Microsoft Interoperability initiative (February 2008)
压缩块算法使用LZ77+DIRECT2;
LZ77用于压缩内存数据,DIRECT2对字节的位置进行编码和解码。

Project and Application
Sandman Project
该开源项目的主要特点是定义了休眠文件的文件结构,并给出了解析休眠文件的代码。
不过,这份代码中存在问题。在虚拟地址转换成物理地址时,作者将页面映射的PAE部分解析错了。
如果开启了PAE页面映射机制(实事上,几乎所有多核计算机都开启了PAE),那么MMU将会用三级表来实现地址转译,分别是:页目录指针表,页目录索引,页表索引,页字节偏移,其中前三项都是8字节长,而作者解析时将其作为4字节处理了。
具体改法:在mm.c文件à MmGetPhysicalAddress函数中,将处理PAE的偏移,改为8;

注:4KB分页时,地址转译只需二级表,页目录索引,页表索引,每项4字节长。

Tiamo NTLDR Project
作者Tiamo基本实现了一个完整的NTLDR,可以替换系统NTLDR,主要包括了利用休眠文件hiberfil.sys恢复系统的C++实现。不过我没有测试过可行性。
项目包括两部分:
16位实模式代码;
32位模式代码,即OsLoader.exe,是windows真正的32位入口程序。作者这部分代码参考了NT4代码,但是NT4代码中并没有实现恢复hiberfil的代码,估计作者是通过逆向写的。

Useful application
利用Sandman,开发了若干免费小工具,一般开发人员用不上。
可访问:http://www.moonsols.com

解析hiberfil.sys,获取系统版本号,休眠文件的创建时间,从休眠文件mp物理内存内容(见附件)。

ANTI SMM Rootkit应用;

其他方面,取证分析,以及未知的应用…

APPENDIX
简述用休眠文件恢复系统的过程

开机过程中,BIOS代码首先获得控制权,执行完硬件检测后跳转到MBR,MBR代码部分主要读取分区表信息,然后将控制权交给系统卷的引导扇区DBR,DBR执行一些初始化后,读取文件NTLDR,NTLDR中的16位模式代码开始执行,同样进行一些必要的初始化工作,然后将处理器切换到32位保护模式。
控制权交给osloader.exe, 此时处理器虽然已经工作在保护模式下,但是它的虚拟地址转译机制尚未开启,所以,处理器仍然直接使用物理地址。
Osloader 在入口函数NtProcessStartup里,调用全局初始化内存函数:
DoGlobalInitialization()-> InitializeMemorySubsystem() ->
实现的功能是: 用一个内存描述符数组把每一段内存的大小和用途记录下来,然后构造页目录和页表,使得16M一下的内存能够通过页面映射(paging)机制进行访问,在loader阶段是不使用高于16M以上的物理内存的,在设置好页目录寄存器,并打开页面映射机制。
之后,osloader 继续执行其他的初始化工作,包括IO设备的初始化。
分配PCR的页面-> 分配TSS的页面-> 初始化内存描述符-> 初始化IO系统BlIoInitialize。

接下来判断控制启动的方式。
函数:BlStartup(BootPartitionName);
过程大概这样:打开启动分区,以便加载驱动;初始化屏幕; 读取hiberfil.sys,如果是一个有效的休眠文件,则系统以hiberfil.sys方式恢复系统。如果不是,打开boot.ini文件,并显示一个引导选择菜单。如果boot.ini只包含一个引导选项,那么,此菜单不显示,而是立即应用该引导选项。

如果检测到hiberfil.sys有效,osloader将控制权交给一段能恢复系统的代码。大致流程如下:
打开hiberfil,不成功则返回-->成功则继续恢复 --> 分配页面缓冲-->解析头文件,判断image signature,有三种标志,分别处理,如果判断标志出错,就直接返回-->进行一些其他的校验工作->接下来分配PTE,读取内存映射页面的数据-> 分配压缩数据的缓冲->解压缩数据到物理内存—> 再经过一系列的恢复工作-> 读取处理器的状态......

通过NT4代码,分析NTLDR的工作流
boot/bootcode/mbr/i386/x86mboot.asm ->
这里执行MBR引导代码,读取分区表,获得引导分区,将引导分区的第一个扇区,即DBR读入到内存,然后将EIP调到DBR引导代码,执行。
boot/bootcode/ntfs/i386/ntfsboot.asm ->
该函数主要用来读取卷上的数据,主要是将ntldr读入到内存,然后执行。(卷上的数据是根据文件系统格式存储和管理的,所以访问卷上的文件内容,需借助文件系统代码去读。)到目前为止,程序还是在实模式下,即16-bit模式。
boot/startup/i386/su.asm ->
直接跳到 JMP RealStart,准备stack和segment,然后去执行suMain函数,该函数位于:
boot/startup/i386/main.c ->
来到了C代码。这里实现一些初始化,包括video ,memory,foppy等。之后在回到su.asm,进行模式切换,至32-bit;
boot/lib/i386/entry.c ->
入口函数NtProcessStartup,这里,进行一些初始化,调用DoGlobalInitialization 初始化16M以下的内存,分页机制开始启动。又进行了一些system memory和I/O system的初始化工作后,理解调用BlStartup函数,也就是说ntldr在BlStartup函数中执行完毕后,就返回了。该函数在:
boot/bldr/i386/initx86.c ->
这个函数打开boot.ini,获取启动选项,继续调用osloader.c;
\boot\bldr\osloader.c

注:NT4不支持hiberfil休眠机制,在XP以后的系统中,恢复hiberfil的过程在 BlStartup过程中被调用。

通过逆向分析NTLDR,分析hibernation file
这里只说下分析方法,省去细节。
恢复Hiberfil的工作是由osloader完成的,所以,通过逆向分析osloader.exe,可以了解恢复hiberfil的一些具体细节。

NTLDR位于系统盘根目录下,是一个具有隐藏只读属性的binary系统文件,不能直接使用IDA进行分析。
NTLDR由两个image组成,一个是16-bit下的binary image,就像是一个.com 文件;另一个是32-bit 下的PE file image,主要包含加载任务,这个PE image对应的文件就是osloader.exe。

提取osloader.exe的方法
用一个16进制编辑器(e.g. WinHex),打开NTLDR, 查找'MZ'或'PE'标志,然后从'MZ'标志开始,将剩下的hex data全部复制并粘贴到另外一个空文件,重命名为:osloader.exe。用winhex的话,会很简单(找到'MZ'标志,ALT+1,然后拖到文件末尾,ALT+2,这样就选中的从'MZ'到文件末尾的区块,然后右键'edit'->' block'->'into a new file')。
提取出osloader之后,用IDA加载,加载的时候会提示从MS官方下载'未公开'的符号,选择YES或NO,等待分析,可能要花2分钟左右时间。

分析osloader.exe文件
常理来说,osloader应该是一个native app,其入口函数是:NtProcessStartup。但是IDA分析后,入口函数为DriverEntry,当成驱动程序来分析了。但是,事实上,native app本质上就是一个驱动。
接下来就是利用各种资源,找自己关注的代码区分析了。

热点内容
doge做空操作 发布:2025-06-25 20:24:06 浏览:384
福州区块链招聘销售 发布:2025-06-25 20:18:15 浏览:424
有人教我做eth靠谱吗 发布:2025-06-25 20:15:24 浏览:706
计算机网络接口eth0 发布:2025-06-25 20:15:13 浏览:60
2019区块链最具影响力 发布:2025-06-25 20:01:27 浏览:700
浙江算力网络科技 发布:2025-06-25 19:59:09 浏览:262
比特币银行哪家好 发布:2025-06-25 19:54:57 浏览:400
浅谈对比特币的认识 发布:2025-06-25 19:54:41 浏览:534
数字货币之经融变革时代 发布:2025-06-25 19:33:15 浏览:706
区块链gpi比较 发布:2025-06-25 19:27:20 浏览:148