About the SMM rootkit

SMM rootkit SMM rootkit BIOS_SMI句柄的逆向与钩子 立即下载
 来源:SoftRCE.net

其实SMM是早在97年就有的东西,我跟这个东西也算是有点渊源,之前在实验室做过一些关于这个的研究,但是远没有到rootkit的方向.之后在逛网站的时候发现一篇5.12时候的新闻:Researchers dig into x86 chips for stealthier rootkits,然后才重新回头去看了这个东西,也隔天就写了篇分析.不过功力尚浅,很多东西在Win32平台到现在我实验着还是有问题的.

SMM类似ICE,ICE是一种硬件调试机制,也是深入到CPU级别的最根本的调试,但是ICE在Intel公司对CPU的改革过程中变成了现在的Branch Trace(tr12)[1],而SMM也继承ICE的实现方式(但并不是直接的"复制")独立成为新的机制,主要处理ACPI,详细的介绍看后面的[注][2].AMD 稍微显得逊色一些,之前的CPU版本可以利用XX软指令去改DR7,也就是说基本是ICE的直接复制.Intel也显示出优越性,一来Intel的SMM 是不支持调试触发的,因为Intel把SMM和ICE分开了,再者Intel的SMM也不支持微处理器的指令触发,只能由硬件中断(CPU,ACPI)来引发.我也提到过一个很好的物理方法,就是用信号发生器和频率源去接芯片引脚... :)

由于太过于依赖硬件,CPU的支持很大程度上决定了SMM的实现方式,而且不同的主板公司(主要是BIOS)也可以实现不同的SMI处理例程,在之前(2008.5.12)我个人觉得要做成 rootkit还是有不少问题的.由于SMM的特殊性:CPU不管是怎么切换,由SMI进入SMM或者由RSM切回保护模式,都是悄然无声的,OS是"不知道"的.SMI handler是在POST的时候安装到SMRAM里的.要想rootkit,肯定要想办法遛进SMM.当时也很怀疑Sparks是不是要在类BSD系统上演示,因为相对来说,WIN32更加的困难,有很多的限制,一方面和硬件关联太多,一方面又要PIO操作权限又要内存操作权限,不好处理.

要在正常模式下做成rootkit,首先就要保证控制寄存器位的置位(D_OPEN),因为如果D_CLK位打上去的话,只读了,就失效了.想办法进 SMRAM?HSEG(正常系统模式下,0xa0000-0xbffff这段内存是给某些显卡的)看起来remap也不那么简单,位被限制的很死,而且一旦到了Above段,更是一碰就挂...那就是想办法更改SMI Handler了,不过这个比较好检测,AV只要定时检查就能知道是不是有handler被修改了.要不然就是通过BIOS,那就更是多此一举,那么多驱动要BIOS CALL,可以修改BISO直接就搞了[思路上就是动比如bus0-dev1-func0-0x30/33这几个寄存器,PCI配置头它们指示的是 expansion rom,会被map到比如0xC0000,刷进去,然后想办法hook int,10号或者其他号,10号想必大家都清楚,VGA小端口会调用比如Ke386CallBios交回控制权.这里还涉及一些VM86的东西,公开的未公开的.推荐一下VBEMP x86 Project :) 做为副产品,你可以从里面得到关于以上东西的一些灵感.至于Re-flash,这个就不多说了,IO方法很多],但是通过BIOS也可以给SMM-RK做个引子.

不过既然Sparks要在BH上演示,也只好要拭目以待,可惜的是,她在BH上的演讲并没有什么让我觉得为之一亮的地方.因为在BH之前PHRACK爆出的一篇文章里把基本的内容都含盖了:System Management Mode Hack .

Paper 里提到触发SMI是通过存取PCI配置寄存器(其实可以衍生出不少方法,比如APM.),类BSD系统上的.PIO 0xCF8-0xCFF,如果是新的PCI-Express MMIO更简单.Paper里只是简单提了下Code relocation,其实这个特性很强大.你可以修改state save map里的SMMBASE值,完成一些隐蔽工作.但是这里可能会有点问题,因为我在这里挂起了很多次.就是如果你需要装进DS,需要在SMM handler里自己从state save map里读出descriptor cache结构体的里CS段的地址值,shr 4后给DS,这样才是指向了重定位后的SMMBASE.其他的值也是一样,你可以修改CRx,CS,EIP,EFLAGS以及CPL(SS.DPL),来实现模式切换(这个很有价值). 关于中断,SMM处理中断并不像Intel手册说的.先看看paper里的2.4.2 - SMM Details这一小节,其实中断确实会被屏蔽,但是paper里的"To enable that is needed to issue the IRET/IRETD instructions" 是不对的, 至少我没成功,我的方法是设置硬件中断例程[timer kick]. 后面又提到code relocation后会出现很多莫名其妙的问题,其实这个和前里提到的一样, CS:IP也需要你手动修改,取SMRAM里的SS,CS值,shr 4然后push入栈,取esp,retf就可以了.

todo... (原文在: http://hi.baidu.com/gz1x)

注:
[1] http://bbs.pediy.com/showthread.php?t=66975
[2] http://en.wikipedia.org/wiki/System_Management_Mode
http://www.biosren.com/thread-29-1-1.html
[3] Nice Links:
[如何跟踪ACPI代码] http://advdbg.com/blogs/advdbg_system/articles/14.aspx
科技中介服务机构如何降低技术评价服务成本?.docx 科技中介服务机构如何降低技术评价服务成本? 立即下载

相关推荐

状态估计【扩展卡尔曼滤波算法的神经网络训练】BP神经网络、扩展卡尔曼滤波EKF+BP、粒子滤波PF轨迹估计研究(Matlab代码实现)

内容概要:本文围绕状态估计与神经网络融合技术展开研究,重点介绍了扩展卡尔曼滤波(EKF)与BP神经网络的联合算法(EKF+BP)以及粒子滤波(PF)在轨迹估计中的应用。资源基于Matlab/Simulink平台,提供了BP神经网络、EKF+BP融合算法和PF的完整代码实现,旨在通过仿真手段提升非线性系统的状态估计精度。文中不仅涵盖了卡尔曼滤波系列(如UKF、EKF、PF)的基本原理与实现方法,还展示了其在风电预测、电池寿命预测、无人机状态估计、雷达跟踪等领域的广泛应用,突出其在复杂动态系统建模与轨迹预测中的实用价值。; 适合人群:具备一定Matlab编程基础,从事自动化、控制工程、电气工程、人工智能及相关领域的研究生、科研人员和工程技术人员。; 使用场景及目标:①深入理解并掌握扩展卡尔曼滤波与BP神经网络融合的建模机制与实现流程;②开展非线性系统的状态估计与动态轨迹跟踪仿真研究;③应用于无人机导航、机器人定位、电力系统状态监测、信号处理等领域的算法开发与系统优化。; 阅读建议:本资源以Matlab代码为核心,建议读者结合提供的仿真模型与参考文献动手实践,重点关注EKF与BP网络的参数配置、融合策略设计及滤波性能对比,通过比较UKF、EKF与PF等不同滤波算法的估计效果,深化对状态估计算法优劣与适用场景的理解。

真实的SMM Rootkit——BIOS SMI句柄的逆向与钩挂_很好的一篇文章在黑客学习基地上看到的和大家分享

摘自:黑防 文章作者:fahrenheit 1 引言         本文将探索一些BIOS中的SMI代码,所使用到的固件都来自于ASUS(华硕)的主板,尤其是基于Intel P45硬件的ASUS P5Q系列平台。ASUS的BIOS是基于AMIBIOS 8实现的,因此我们的工作可以延伸应用到所有使用了AMI BIOS固件的BIOS平台。而且SMM作为x86架构的特征之一,各种BIOS在

Henrykobe的专栏 5962

单相PWM整流器基于直流电流控制+虚拟dq两种闭环控制仿真【2个仿真+参考资料】

内容概要:本文详细介绍了单相PWM整流器基于直流电流控制与虚拟dq两种闭环控制的仿真研究,包含两个完整的Simulink仿真模型及相关参考资料。通过构建控制系统模型,分别实现对直流电流的直接调节和在虚拟dq坐标系下的解耦控制,旨在提高整流器的动态响应性能与稳态精度,同时确保单位功率因数运行。文中系统阐述了两种控制策略的设计原理、坐标变换机制、PI调节器参数整定方法及系统稳定性分析,并通过仿真结果对比验证了各自在动态响应、抗干扰能力和稳态误差等方面的性能特点,充分展示了其在现代电力电子系统中的适用性与优势。; 适合人群:具备电力电子与电力传动基础知识,熟悉Simulink仿真环境,从事新能源变换器、PFC控制或电机驱动等相关领域研究的研究生、工程师及科研人员。; 使用场景及目标:①掌握单相PWM整流器的基本工作原理与数学建模方法;②学习并比较直流电流控制与虚拟dq控制两种主流闭环控制策略的设计流程与性能差异;③应用于实际项目中如充电桩、光伏逆变器、UPS等场合的控制系统开发与优化。; 阅读建议:建议结合提供的仿真模型边操作边学习,重点关注控制框图搭建、坐标变换模块实现及PI参数调试过程,同时参考相关文献深入理解控制理论背景,以提升实际工程应用能力。

ROOTKIT与BOOTKIT技术全解析(下):从固件渗透到内核统治的「底层攻防实战」

ROOTKIT与BOOTKIT的攻击逻辑,本质是“利用系统底层的信任链漏洞”。白帽黑客的核心使命,是通过理解这些漏洞的底层原理,设计更强大的防御策略——从固件的安全启动到内核的完整性校验,从静态的哈希校验到动态的行为监控,每一步都需要“深度思考”与“实战验证”。

fearhacker的专栏 1448

高校技术转移办公室人员如何高效筛选优质科技成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了“两相交错并联Boost电路仿真模型(Simulink仿真实现)”这一电力电子系统仿真资源,隶属于一个涵盖多种主流电力变换器拓扑与先进控制策略的综合性仿真资料库。该资料库以Simulink为主要仿真平台,集成了2.5kW双相交错并联Boost电路、全桥/半桥LLC谐振变换器、双向CLLC、三相维也纳(Vienna)PFC、图腾柱PFC等多种典型电路的仿真模型与配套设计资料。其核心技术不仅包括开环、闭环、软启动、双闭环PI控制等基础控制方法,更深入涵盖了中点电位平衡、恒压恒流双竞争闭环、变频与移相混合控制、模型预测控制(FCS-MPC)等前沿控制算法的实现。此外,资源体系还整合了Mathcad计算书、参数设计报告、PPT说明文档等,构建了从理论推导、参数设计到仿真验证的完整闭环,充分体现了理论与实践的高度融合。; 适合人群:具备扎实的电力电子技术与自动控制理论基础,从事新能源发电、电力变换、工业电源、电动汽车等领域研究与开发的研究生、科研人员及研发工程师。; 使用场景及目标:①系统学习并复现各类DC-DC、AC-DC变换器(如Boost、LLC、Vienna PFC等)的工作原理与核心控制策略;②开展电力电子系统相关的科研项目,支撑拓扑结构创新、控制算法优化、关键参数设计与系统性能验证等工作;③作为毕业设计、课程大作业或工程项目开发的标准化参考模板。; 阅读建议:此资源以仿真为核心,强调理论分析与工程实践的紧密结合。使用者应结合所提供的Mathcad计算书与设计报告,深入理解电路参数的设计依据和控制策略的实现逻辑,并在Simulink环境中动手调试模型,通过细致观察波形变化、定量分析数据结果,来深化对电力电子系统动态特性与稳态性能的理解。

SMM系统管理模式深度解析:从底层原理到攻防实战的安全密码

本文深入解析x86架构的系统管理模式(SMM)技术原理与安全攻防。SMM作为高于内核的特权级"安全卫士",通过SMI中断和SMRAM内存隔离实现硬件级保护。文章从SMM底层原理切入,详细分析其特权级定位、触发机制和执行环境,并揭露黑客渗透SMM的三大路径:利用SMI处理程序漏洞、篡改SMRAM内存和伪造SMI事件。针对每种攻击手法,提供了包括固件更新、输入校验、硬件隔离等白帽防御策略。最后强调通过安全工具监控和日志审计来持续保护SMM安全,呼吁在合法授权范围内进行安全研究。

fearhacker的专栏 1171

三相电压型PWM整流器PI双闭环控制Matlab仿真

内容概要:本文围绕三相三电平VIENNA整流器的双闭环控制与中点电位平衡问题展开研究,提出一种基于电压电流双闭环PI控制结合电容电压差值补偿的中点电位平衡策略。系统采用同步旋转坐标系下的双闭环控制结构,电压外环用于稳定直流母线电压,电流内环实现输入电流的快速跟踪与单位功率因数运行。针对VIENNA整流器直流侧上下电容电压不平衡的问题,引入电容电压差值Δu作为反馈信号,在SVPWM调制中利用冗余小矢量的时间分配自由度,动态调节中点电荷流动,实现中点电位的主动均衡。仿真结果表明,该方法在800V直流母线电压下,不仅实现了母线电压的稳定跟踪和输入电流低谐波(THD低),而且显著提升了上下电容电压的均衡度,有效抑制了中点电位的漂移。; 适合人群:具备电力电子、自动控制理论基础的电气工程及相关专业研究生、科研人员及从事新能源、电动汽车充电桩、工业电源等领域的研发工程师。; 使用场景及目标:① 掌握三相VIENNA整流器的工作原理与数学建模方法;② 学习双闭环PI控制器的设计与参数整定技巧;③ 理解中点电位不平衡的成因,并掌握基于SVPWM冗余矢量的主动平衡控制策略;④ 通过Matlab/Simulink仿真平台复现并验证所提控制策略的有效性,服务于高性能PFC整流器的研发与优化。; 阅读建议:建议读者结合文中提供的控制框图与仿真参数,动手搭建Simulink模型,重点关注SVPWM模块中冗余矢量作用时间的调节逻辑。在学习过程中,应深入理解PI控制器带宽匹配、中点平衡控制边界及SVPWM谐波性能之间的内在联系,并尝试在不同负载和动态工况下测试系统的鲁棒性。

BIOS工程师手边事--SMM模式

一,SMM概念及特色      1,基本概念        SMM是Intel在386SL之后引入x86体系结构的一种CPU的执行模式。加上SMM,X86 CPU支持四种工作模式。分别是:实模式,保护模式,虚拟8086模式和SMM模式。SMM是一种特殊的工作模式,它不依赖于具体的操作系统,完全由固件来控制。     SMM模式只能通过系统管理中断SMI进入,并只能通过执行RSM指令退出。

zhao_longwei的专栏 1万+

论文复现基于改进型混合有限集模型预测控制(FCS-MPC)的模块化多电平换流器MMC环流抑制与相间电压均衡控制研究(Simulink仿真实现)

内容概要:本文针对模块化多电平换流器(MMC)在运行过程中存在的环流分量抑制困难与相间子模块电压不均衡问题,提出了一种改进型混合有限集模型预测控制(FCS-MPC)策略,并通过MATLAB/Simulink平台完成了完整的系统建模仿真与控制算法验证。该方法在传统FCS-MPC基础上优化了控制律设计,通过构建精确的MMC数学模型,结合预测时域内的系统行为预测,动态选择最优开关状态序列,在单一控制框架下同步实现环流的有效抑制与各相间电压的均衡控制。仿真结果表明,所提策略在动态响应速度、稳态控制精度及抗干扰能力方面均表现出优越性能,相较于传统PI控制或固定模式调制方法,显著降低了环流幅值,提升了系统运行效率与稳定性。同时,文中详尽阐述了预测模型构建、代价函数设计、权重系数整定及多目标协调优化等关键技术环节,为电力电子系统中高性能预测控制的应用提供了完整的理论分析与实践范例。; 适合人群:具备电力电子、自动控制或电气工程等相关专业背景,从事模块化多电平换流器、高压直流输电、新能源并网、柔性交流输电系统等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决MMC拓扑中环流抑制与电压均衡控制的关键技术难题;②深入学习和掌握模型预测控制(MPC)在电力电子变换器中的高级应用方法与工程实现路径;③为相关课题的学术论文复现、控制算法改进及实际工程化落地提供可靠的技术参考与仿真模型支持。; 阅读建议:此资源以Simulink仿真实现为核心载体,不仅包含严谨的控制算法理论推导,还配套提供了可运行的仿真模型与参数设置说明,建议读者在系统理解MMC工作原理与MPC控制思想的基础上,动手复现并调试仿真模型,结合文中所述的实验结果进行对比分析,以深入掌握FCS-MPC的调控机制与多目标优化设计精髓。

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 309

SMM Rootkit limitations.

 at Blackhat US 2008, Shawn Embleton and Sherri Sparks presented their research concerning the CleanHatConsulting SMM Rootkit.* The first and main limitation concerns the D_LCK bit. BIOS Vendors ena

784

银河麒麟鲲鹏aarch64架构安装docker和K8s

鲲鹏云服务器上安装docker-云社区-华为云 (huaweicloud.com) 这里我下载的版本是docker-18.09.3.tag docker 安装包地址:https://download.docker.com/linux/static/stable 配置system服务 在github对应分支的contrib/init/systemd/ 下面,提供了对应的docker.service以及docker.socket文件,可以直接拷贝到本地文件使用: 对应链接:https://github.c

qq_50007696的博客 9056

ACPI Event流程介绍

● 状态/使能寄存器(针对事件) ● 控制寄存器 如果一个寄存器块的类型是状态/使能类型,那么它将包含一个具有状态位的寄存器和 一个对应的具有使能位的寄存器。相比之下,在ACPI系统中,中断事 件会产生一个共享的、OS可见的中断(边沿类型的中断将不会工作)。在此状态下的硬件延时必 须足够短,使得操作软件在决定是否使用它时,不会考虑此状态的延时因素。设备和处理器性能状态(Px状态)是设备或者处理器在执行状态下(处理器在C0状 态,设备在S0状态)的电量消耗和能力状态。SCI是一个低有效、电平类型的共享中断。

qq_43561214的博客 1497

TSMC40nmLP版图实战:从Design Rule解读到Cadence高效布局布线

本文详细解析了TSMC40nmLP工艺的版图设计实战,从Design Rule解读到Cadence高效布局布线技巧。重点介绍了40nm工艺中的关键设计规则,如最小线宽、间距规则和深N阱规则,并分享了Cadence Virtuoso中的高效工作流和射频模块设计技巧,帮助工程师提升版图设计效率和质量。

weixin_29250403的博客 380

深信服AC1000-B1200到手第一步:从开箱到激活上网的保姆级图文指南

本文提供深信服AC1000-B1200企业级行为管理设备的详细开局使用指南,涵盖从开箱验机、物理连接到网络配置、安全加固及设备激活的全流程。通过图文并茂的步骤解析,帮助用户快速完成设备初始化并实现安全上网,特别适合初次接触该设备的网络管理员参考。

weixin_42546392的博客 548

SMM 详解

SMM System Management Mode(SMM)他是CPU的一个模式,当我们触发CPU的SMI pin 的时候就会进入SMM Mode. SMM 模式下的执行程序被称作SMM处理程序,所有的SMM 处理程序只能在称作系统管理内存(System Management RAM, SRAM)的空间内运行。   1. SMM Service       SMM service 是

Helping BIOSer become Awesome! 2万+

基于Docker的D435i相机与IMU联合标定实战指南

本文详细介绍了基于Docker的D435i相机与IMU联合标定实战指南,涵盖kalibr镜像构建、IMU标定全流程、双目相机标定技巧及联合标定结果验证。通过Docker容器化部署,简化了复杂依赖环境,提升标定效率与精度,适用于机器人视觉与SLAM应用。

weixin_30872337的博客 241

ACPI.sys,从Windows到Bios的桥梁(1):跟踪win7开启ACPI

由于windows设备驱动程序被设计成以设备堆栈(Device stack)的形式,下层驱动向上提供支持,所以我们习惯于不加思考的在设备栈的上层使用来自下层驱动的各种已有功能。当我还在做驱动程序时,经常见到这些句话: A1."功能驱动(Fdo)收到IRP_MJ_PNP&IRP_MN_START后,会向总线驱动(Pdo)查询并正确配置所需的硬件资源,如IO Port/IRQ/Mem等,然后才开始工作"。这段话我一直感到困惑:功能驱动的硬件资源来自总线驱动,那么总线驱动的资源由谁提供?可能有人...

lixiangminghate的专栏 4761

​​​​手把手教你玩转RT-Thread操作系统专栏--​​​​第5章 设备驱动开发:RT-Thread的设备框架​​​​5.4 I2C/SPI驱动:如何驱动外部传感器(以MPU6050为例)​

通过本节学习,掌握了基于RT-Thread设备模型的I2C/SPI驱动开发流程,包括硬件初始化、寄存器读写、设备注册及应用程序调用。I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)是嵌入式系统中最常用的两种串行总线协议,广泛用于连接传感器、存储器等外设。函数通过I2C协议读取外设寄存器的数据(如MPU6050的加速度寄存器)。SPI读取需先拉低片选(CS),发送寄存器地址,再读取数据,最后拉高CS。查找I2C设备,并调用。

xiaoheshang_123的博客 127

前端技能树,面试复习第 54 天—— 手写代码:情景题

前端修罗场提供全网最专业的前端优质文章与社区服务,为应届生,初中级前端工程师提供全面、优质的面试服务、技能提升、职场解惑服务!内容包含:前端面试辅导,前端面试题,前端交流,前端答疑,前端基础知识,前端知识体系,技能树搭建,Javascript,CSS,CSS3,HTML,React,Vue,小程序,前端简历,职业交流,远程工作,英文交流,英文提升,外企,互联网,国企,大厂,牛客面试题,掘金面试题,面经,优质前端文章分享...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 986

ACPI之 系统地址映射接口

目前有三种方法将内存映射告诉OSPM, 1 . 通过 BIOS INT 15. 2. UEFI 通过GetMemoryMap()  boot service 告诉OS loader, 然后OS loader 告诉OSPM. 3. 如果内存资源被动态的增加或删除,我们可以通过定义在ACPI 名字空间里的内存设备去表达出来。 ACPI 定义了五种范围: AdddressRangeMem

Helping BIOSer become Awesome! 6160

UG NX二次开发(C#)-读取PMI对象的名称

摘要:本文介绍了在UG NX中通过NXOpen获取PMI对象名称的方法。首先说明PMI对象初始无名称,可通过重命名或属性设置名称。然后提供C#代码示例,展示如何遍历PMI集合获取对象名称,并显示名称和类型信息。适用于需要操作PMI对象的开发人员,欢迎加入技术交流QQ群749492565。(99字)

GimiGimmy 592

BIOS入门基础------ACPI

ACPI这部分其实比较重要,因为它关系到了电源、功耗、性能。另外,与OS关系比较大。1.对BIOS而言,ACPI最直观的就是电源功耗,从而影响到cpu性能,具体的设置,就在BIOS Setup界面Advanced菜单下,高级电源管理这块,会有许多设置选项。还有CPU的一些状态设置,例如C-State、P-State、Turbo mode等等。实际上,就是往相关寄存器里面写值。更改某个选项,本质上是...

wmx1992的博客 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大话Linux操作系统

本文将对Intel 32位系统架构中涉及的一些最基本的概念做概要介绍,在以后的博文中做具体阐述。如图1为Intel 32位系统架构总览。 图1 系统架构总览 全局描述符表(GDT)和局部描述符表(LDT)        在保护模式下,所有内存访问都是通过全局描述符表(Global Descriptor Tables)或者局部描述符表(LocalDescrip

职场里拉开差距的不是知识,而是认知! 2389

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ACPI Table基本知识

1包在BIOS ROM中的 ASL Code就是ACPI table,而ACPI Table又分成不同类型的Table(RSDT/FADT/DSDT...etc). 2像是我们比较常使用的DSDT Table就是放了一些event code.简单说就是当某个H/W event发生后,系统会依照 描述在这个DSDT Table中的ASL code去执行,而这些Acpi Table 包在BIOS

Helping BIOSer become Awesome! 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 欧服WOW木马核心源代码,游戏版本v2.4.3.8606
下一篇: About Handling Nmi
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值