首页 > 其他分享 >读取CMOS数据

读取CMOS数据

时间:2023-08-13 17:33:20浏览次数:39  
标签:读取 RTC al 校验 BYTE 0x10 数据 CMOS

一 CMOS介绍

CMOS(Complementary Metal-Oxide Semiconductor)是一种常见的半导体芯片技术,广泛用于各种微处理器和外设中。

在PC系统中,CMOS芯片主要用于实现实时时钟(RTC)和存储BIOS设置。CMOS内含有一小块SRAM芯片和电池,可以在系统断电时保持数据。

二 CMOS数据的读取

要读取CMOS中的数据,需要访问RTC及配置存储区指定的I/O端口。在IBM PC兼容机上,主要有以下几个I/O端口:

  • 0x70 - RTC地址寄存器端口,写入要访问的RTC或CMOS内存地址
  • 0x71 - RTC数据寄存器端口,读取或写入RTC的控制数据或CMOS内存单元的数据
  • 0x72 - RTC控制寄存器端口,控制RTC及中断
  • 0x73 - RTC状态寄存器端口,读取RTC及CMOS的状态

例如,要读取CMOS内存地址0x10处的数据:

  1. 向0x70端口写地址0x10
  2. 从0x71端口读数据,得到address 0x10处的内容

CMOS内存组织为128字节,低地址部分为RTC及状态寄存器,高地址部分存储BIOS配置信息。

通过直接访问这些I/O端口,我们可以在程序中读取CMOS配置数据,获取硬件信息。但需要注意CMOS访问是比较敏感的,如果不正确可能会导致系统问题。

DOS环境下的示例代码:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>

typedef unsigned char BYTE;
typedef unsigned int WORD;

BYTE my_inp(BYTE port)
{
    BYTE value;
    __asm
    {
        mov al,port
        out 70h,al
        in al,71h
        mov value,al
    }
    return value;
}


void my_outp(BYTE  port,BYTE value)
{
    __asm
    {
        mov al,port
        out 0x70,al
        mov al,value
        out 0x71,al
    }
}

void out_7071(BYTE port,BYTE value)
{
    __asm
    {
        mov al,port
        out 0x70,al
        mov al,value
        out 0x71,al
    }
}

void main()
{
    BYTE addr,data;
    for(addr=0x0; addr<0xff; addr++)
    {
        data = my_inp(addr);
        for(k=0x0; k<=0xf; k++)
        {
            printf("  %02x",k);
        }		

        if(addr%16==0)
        {
            printf("\n");
            printf("%02x",addr);
        }
        printf(" %02x",data);
    }

}

读取CMOS数据_数据

读取出来的结果图

三 CMOS数据代表的含义

CMOS内存的组织格式如下:

  • 低地址部分(0x00 - 0x7F)为RTC及状态控制寄存器:
  • 0x00-0x0F: 用于RTC,包含时间日期等信息
  • 0x10-0x2F: 状态控制和状态标志寄存器
  • 0x30-0x3F: RTC控制寄存器
  • 0x40-0x7F: 扩展RTC功能
  • 高地址部分(0x80-0xFF)为BIOS配置数据:
  • 0x80-0xF0: BIOS配置参数,可配置各种主板设定
  • 0xF0-0xFF: 校验和及扩展BIOS数据区

具体一些重要的CMOS配置数据说明:

  • 0x00-0x0B: 当前时间,分别是 秒 分 时 年 月 日 星期 年的最后两位
  • 0x0C-0x0D: RTC状态控制
  • 0x0E-0x0F: 诊断状态码
  • 0x10-0x2D: 各种状态标志位
  • 0x2E-0x2F: 校验和
  • 0x14: 扩展内存大小
  • 0x15: 基本内存大小
  • 0x16: 其它内存大小
  • 0x2D: 基本内存扩展
  • 0x30: 复位代码
  • 0x31: 系统复位跳转地址高8位
  • 0x32: 系统复位跳转地址低8位
  • 0x33: Checksum 校验和
  • 0x34-0x3F: 扩展CMOS配置数据

4 清除CMOS密码

CMOS内存清除密码有两个方法:

1. 硬件跳线法

通过硬件暂时短接CMOS内存芯片上的 CLR_CMOS 引脚和地线,就可以重置CMOS的数据,从而清除密码。

2. 软件校验和法

利用CMOS内存的校验和机制可以实现软件清除密码:

CMOS地址0x10-0x2D存储了各种配置数据。

而0x2E-0x2F存储了0x10-0x2D区数据的校验和。

BIOS在启动时会计算一次0x10-0x2D的校验和,和0x2E-0x2F存储的校验和比较。

如果不匹配,则认为CMOS数据错误,重置CMOS为默认值。

也就是说我们可以通过修改0x10-0x2D区数据,导致校验和不匹配,进而达到重置CMOS清除密码的目的。

具体做法是:

  1. 读取0x2E-0x2F原始校验和
  2. 修改0x10-0x2D某字节数据,导致校验和变化
  3. 写入修改后的校验和到0x2E-0x2F
  4. 重启系统,BIOS会发现校验和错误,重置CMOS

这样就通过软件方法清除了CMOS密码。

debug
-O 70 2e
-O 71 00
-O 70 2f
-O 71 00



标签:读取,RTC,al,校验,BYTE,0x10,数据,CMOS
From: https://blog.51cto.com/u_16204156/7068146

相关文章

  • CPUID的读取
    一CPUID介绍CPUID是一个用于获取中央处理单元(CPU)相关信息的指令。它通常在x86架构的计算机上使用,通过读取CPU寄存器中的特定值来提供关于CPU特性、制造商、型号和支持的功能的信息。CPUID指令返回的信息对于操作系统、编程、性能优化以及硬件识别非常有用。以下是有关CP......
  • Sql Server 2008数据库Windows账户和sa账户被禁用以后……
    服务器版本:WIndows Server2008 R2 Standard数据库版本:MicrosoftSQLServer2008 R2事故背景:新建了一个账户dev以后,禁用sa账户,不小心把Windows登录账户也给禁用了,然后数据库代理,作业都不可用了解决:1、用当前账户新建一个Windows管理员账户dba 2、用新账号dba登录......
  • java中基本数据类型
    Java中的基本数据类型包括以下八种:整数类型:byte:占用1个字节,取值范围为-128到127。short:占用2个字节,取值范围为-32768到32767。int:占用4个字节,取值范围为-2147483648到2147483647。long:占用8个字节,取值范围为-9223372036854775808到9223372036854775807。浮点数类型:float:占用4个字节......
  • LeetCode 7022——熟悉TreeSet数据结构及常用方法的使用
    LeetCode7022.限制条件下元素之间的最小绝对差题目描述:给你一个下标从 0 开始的整数数组 nums 和一个整数 x 。请你找到数组中下标距离至少为 x 的两个元素的 差值绝对值 的 最小值 。换言之,请你找到两个下标 i 和 j ,满足 abs(i-j)>=x 且 abs(nums[i......
  • SQL 语句创建数据库表时列字段的初始化值
    在SQL中,创建数据库表时可以指定每个列字段的初始值,这称为"默认值"(DefaultValue)。默认值是在插入新记录时,如果没有显式提供该列的值,则自动应用的值。当插入新行时,如果未提供该列的值,则数据库会使用默认值来填充该列。默认值对于确保数据完整性和提供默认选项非常有用。当插入新行......
  • 如何找到 SAP Fiori Elements 应用某个字段显示值具体的数据源试读版
    笔者将自己在SAP领域16年(2007~2023)的SAPUI5(Fiori)和OData开发的技术沉淀,进行了系统的归纳和总结,分别写成了三套由浅入深的学习教程,收到了不错的反响:零基础快速学习ABAP一套适合SAPUI5开发人员循序渐进的学习教程SAPOData开发实战教程-从入门到提高这三套......
  • 论文解读:《MetaSEM:通过元学习从单细胞 RNA 数据中推断基因调控网络》
    DOI:10.3390/ijms24032595期刊:InternationalJournalofMolecularSciences中科院分区:2区生物学 影像因子:5.6↓0.608作者:YongqingZhang;MaochengWang;ZixuanWang;YuhangLiu;ShuwenXiong;etal出版日期:2023-01-30网址: https://www.mdpi.com/1422-0067/24/3/2595/p......
  • 数据库设计中的数据字典和平时开发中用到的字典表,有什么区别
    数据字典(DataDictionary):数据字典是数据库设计的一部分,它是一份关于数据库中各种数据元素的信息文档,包括表、列、数据类型、索引、约束、视图等等。数据字典记录了数据库结构的元数据,描述了数据的定义、用途、关系以及数据的业务含义。数据字典通常由数据库管理员(DBA)或设计者创......
  • 【专题】2022年中国数字教育市场数据报告PDF合集分享(附原数据表)
    学习能力是将知识资源转化为知识资本的能力。它包括对所学内容的兴趣和热情,有助于更深入理解和掌握知识,提高个人的认知和思维能力。阅读原文,获取专题报告合集全文,解锁文末158份学习教育行业相关报告。教育和娱乐支出越来越成为家庭消费的重要组成部分。这包括对18岁以下儿童的素质......
  • 【专题】2022教育行业研究白皮书报告PDF合集分享(附原数据表)
    学习能力是将知识资源转化为知识资本的能力。它包括对所学内容的兴趣和热情,有助于更深入理解和掌握知识,提高个人的认知和思维能力。阅读原文,获取专题报告合集全文,解锁文末158份学习教育行业相关报告。教育和娱乐支出越来越成为家庭消费的重要组成部分。这包括对18岁以下儿童的素质......