DOS下读取smbios的汇编程序(通过搜索memory)
汇编程序编写的读取smbios的代码:
;-------------------------------------------------
;功能: 读取SMBIOS 的Entry Point ,并读取SMBIOS 表的前128-byte
;环境: DOS + MASM5
;时间: 2015/08
;--------------------------------------------------
;功能: 显示ascii 表示的字符
echoch macro ascii
mov ah,
mov dl,ascii
int 21h
endm
;-------------------------------------
.386P
;--------------- data segment ------------------------
dseg segment use16
buff_len =
buff_ep db buff_len dup() ;用来存放entry point的数据
ep_offset dw 0000h ;保存ep在内存f段中的偏移地址
table_add dd 00000000h ;保存SMBIOS 表在内存中的开始地址
buff_tb db buff_len dup() ;用来存放table的数据
dseg ends
;-------------data segment end ------------------------------
;----------------code segment --------------------------
cseg segment use16
assume cs:cseg, ds:dseg
start:
mov ax,dseg
mov ds,ax
;
mov ax,0f000h
mov ds,ax
mov si,0000h ;从F000:[0000]开始搜索内存
continue:
mov eax,ds:[si]
inc si
cmp eax,5f4d535fh ;比较' _SM_' ,这里不能用变量,否则loop 出错?
jnz continue ;没找到,继续
;
dec si
mov ep_offset,si ;ep的偏移地址保存到ep_offset 中
;
;-----------------------------------------------------
;--------------把Entry Point 存到buff_ep中-----------
mov ax,0f000h ;设置源地址
mov ds,ax
mov si,ep_offset
;
mov ax,dseg ;设置目的地址
mov es,ax ;段地址为数据段的段地址
mov di,offset buff_ep ;偏移地址为 buff_ep的偏移地址
;
mov cx,20h ;设置循环次数
cld ;设置si / di 自增
repz movsb ;字符串传送es:[di] <-- ds:[si] , cx--
;---------------------------------------------------------
;-------打印buff_ep的内容(以ascii 形式)----------------
mov ax,dseg ;设置源地址
mov ds,ax ;段地址
mov si,offset buff_ep ;偏移地址
mov cx,20h ;设置循环次数
cld ;设置si 自增
nextline1:
dec cx
echoch 0dh ;换行
echoch 0ah
mov bp, ;每行显示16 字节
nextch1:
lodsb ;字符串加载al <-- ds:[si] , si++
;
push ax
shr al, ;al 的高4位移到低4位
call toascii
echoch al
pop ax
call toascii
echoch al
echoch ' '
;
dec bp
jz nextline1 ;bp == 0 ,jmp
loop nextch1
;-------打印buff_ep的内容(以字符形式)------------------
mov ax,dseg
mov ds,ax
mov si,offset buff_ep
mov cx,20h
cld
nextline2:
dec cx
echoch 0dh
echoch 0ah
mov bp,
nextch2:
lodsb
echoch al
dec bp
jz nextline2
loop nextch2
;--------------------------------------------------------------------
echoch 0dh
echoch 0ah
;---------------读取SMBIOS 的表信息, 存到buff_tb-----------------------------
mov si,ep_offset ;恢复ep在f段中的偏移地址
mov eax,[si+18h] ;得到strucrute table address
;
;关于strucrute table address :
;(1)如果在1M地址空间之外,需要使用保护模式来访问
;(2)这里我们得到的是000e_6dc0
;(3)如果strucrute table address 大于000F_FFFF,
; 下面的程序就会出错,或得到的值不正确
;
mov si,ax ;设置源地址, si = 6dc0
shr eax, ;0000_000e
shl eax, ;0000_e000
mov ds,ax ;ds = e0000
;
mov ax,dseg ;设置目的地址
mov es,ax ;段地址为数据段的段地址
mov di,offset buff_tb ;偏移地址为 buff_tb的偏移地址
mov cx,40h
cld
repz movsb ;es:[di] <-- ds:[si] , cx--
;---------------------------------------------------
;------打印buff_tb的内容(以ascii 形式)--------------
mov ax,dseg
mov ds,ax
mov si,offset buff_tb
mov cx,40h
cld
nextline3:
dec cx
echoch 0dh
echoch 0ah
mov bp,
nextch3:
lodsb
;
push ax
shr al,
call toascii
echoch al
pop ax
call toascii
echoch al
echoch ' '
;
dec bp
jz nextline3
loop nextch3
;------打印buff_ep的内容(以字符形式)---------------
mov ax,dseg
mov ds,ax
mov si,offset buff_tb
mov cx,40h
cld
nextline4:
dec cx
echoch 0dh
echoch 0ah
mov bp,
nextch4:
lodsb
echoch al
dec bp
jz nextline4
loop nextch4
;------------------------------------------------
;---------------返回 dos-----------
mov ah,4ch
int 21h
;----------------------------------------
;函数功能:把al 的低4位转成ascii码,并存入al
;入口参数: al
;出口参数: al
toascii proc
and al,0fh ;高四位清零
add al,90h ;1001_xxxx
daa
adc al,40h
daa
ret
toascii endp
;-------------------------------------------
cseg ends
;------------ code segment end---------------------------------
end start
DOS下读取smbios的汇编程序(通过搜索memory)的更多相关文章
- DOS下读取spd信息的汇编程序(通过SMBus)
汇编程序编写的读取spd信息的代码: ;----------------------------------------------------------- ;功能: 通过SMbus 读取内存的SP ...
- DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)
汇编程序编写的读取PCI配置空间信息的代码(通过IOCF8/IOCFC): ;------------------------------------------------ ;功能: 读取PCI 配 ...
- dos下的edit命令使用详解
dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...
- linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...
- JAVA设置环境变量和在DOS下运行java程序
在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...
- Windows常用的一些DOS下的CMD命令整理
Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...
- DOS下windows系统查看wifi密码
DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...
- WinCE下读取注册表获得SD路径
WinCE下读取注册表获得SD路径 [要点]WinCE注册表中[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory\] 下键Folde ...
- JAVA手记 JAVA入门(安装+Dos下运行)
JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...
随机推荐
- 26-Python3 面向对象
26-Python3 面向对象 ''' 面向对象技术简介 ''' ''' 类定义 ''' ''' 类对象 ''' class MyClass: i = 12345 def f(self): retur ...
- JS发送短信验证码
<div> <input type="tel" id="mobile" name="mobile" placeholder ...
- sqlmap常用技巧整理
言 通过在乌云网上出现的很多SQL注入漏洞,因此来总结一下,大致使用SQLMAP所遇到的参数. 基本结构 基本SQLMAP的使用方式就如下所示,使用参数式的方式,按需求添加. 12 sqlmap.py ...
- ACM-彩票
题目描述 OMeGa 兄弟最近赢了巨奖!但当他们在分彩票奖金的时候却遇到了一些问题.他们两兄弟对一切偶数都痴迷不已,以至于在分奖金的时候,他们两个都希望自己分到的钱是偶数(即便两人分的钱不一样也没关系 ...
- C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
============================================== des cbc 加密 zeropadding填充方式 ======================= ...
- 正则表达式中\b和\s有什么区别
字符串:abcsdsadas abc asdsadasdabcasdsa使用\sabc\s和\babc\b都能匹配中间的abc,这种方法不是重复了么,/s是匹配空格回车等得,/b网上教程说得不清楚什么 ...
- Nodejs【单机】多进程模式集群
Nodejs[单机]多进程模式集群实例: 1.安装:npm install -s cluster 2.服务代码: var debug = require('debug'); var express = ...
- SQL 跟据出生日期求年龄
最近做项目时遇到一个问题. 跟据人员的生日与当前日期进行比较求出该人员实际年龄.这个看上去比较简单的问题,其实不细心去看也会有很多问题. 先看第一种: 一张人员信息表里有一人生日(Birthday)列 ...
- 关于oracle中的数字类型
1.关于number类型. 以下是从其文档中摘录出的一句话: p is the precision, or the total number of significant decimal digits ...
- MindMaster学习笔记
参考博客 http://blog.sina.com.cn/u/6406591976 作者名叫“MindMaster思维导图的博客 ”写了一系列关于思维导图的博客,可以去学习下. 1.其中有一篇比较详细 ...