基于元神操作系统编程写硬盘扇区

news2024/9/23 21:21:19

1. 背景

本文介绍了“调用元神操作系统API向硬盘扇区写数据”的程序实现及测试结果。

2. 方法

(1)调用元神操作系统API读硬盘扇区

本部分内容已在前面的文章中进行介绍,详细内容请参考“编写程序调用元神操作系统的API”。

(2)调用元神操作系统API写硬盘扇区

本例通过调用系统API来向硬盘扇区写数据,代码如下所示:

sector_buff: times 512 db 1
demo_write_disk:
	pusha
	mov edi, API_PARAM
	mov dword [fs:edi], API_WRITE_DISK_SECTOR
	mov dword [fs:edi+4], 2		;2 parameters
	mov dword [fs:edi+8], 0		;parameter_1: sector no.
	xor eax, eax
	mov ax, ds
	add eax, SEG_BASE
	mov bh,byte [fs:eax+7]
    mov bl,byte [fs:eax+4]
    shl ebx,16
    mov bx,word [fs:eax+2]
	add ebx, sector_buff
	mov dword [fs:edi+12], ebx	;parameter_2: start address of buffer

	call pword [fs:OS_API]

	popa
	ret

代码中先定义了变量sector_buff,用于存储要写入硬盘扇区的数据,本例为512个1。然后在代码中如前述文章所描述的那般进行参数设置,将API类型设置为API_WRITE_DISK_SECTOR,该API需要2个参数,第一个参数是要写数据的扇区的LBA号(本例要写0号扇区),第二个参数为保存要写入数据的缓冲区起始地址(本例为sector_buff)。设置好参数后通过“call pword [fs:OS_API]”进行API调用、完成写扇区操作。

本例和前述系统API调用的主要差别在于新的API类型和缓冲区地址转换,新增的定义如下:


SEG_BASE     equ     0x00040000
API_WRITE_DISK_SECTOR	equ	0x00000008

其中,SEG_BASE表示的是保护模式下GDT的起始地址,通过它和DS中的段选择子定位到本demo程序加载到内存的位置,并提取出其起始地址,再加上sector_buff的偏移,得到该变量的真实地址,最后才将该地址赋给调用参数。

(3)附属程序

本例先读取0号扇区的内容并打印到屏幕上,然后将新的数据写入0号扇区,最后再重新读取0号扇区并打印到屏幕上,代码如下所示:

use32

START:
	pusha
	
	call demo_read_disk
	call demo_write_disk
	call demo_read_disk
	
	popa
	iret

include 'api_def.inc'

OS_API equ 0x00030C16
API_PARAM equ 0x03000000
SEG_BASE equ 0x00040000
cursor_x equ 0x02004B10
cursor_y equ 0x02004B12

代码中的demo_read_disk函数直接采用前述文章中的实现代码即可,具体可参考前述文章。

(4)运行程序

将以上的代码保存为DEMO.ASM,编译生成DEMO.BIN,并将该可执行文件复制到装有元神操作系统的U盘中,之后用该U盘开机进入元神系统并输入命令“ZX DEMO.BIN”执行程序如下:

可以看到,硬盘0号扇区的内容已经成功修改,改成了全1的512个字节数据。由于硬盘的0号扇区是MBR扇区,包含着启动操作系统的关键代码,所以修改后无法再从硬盘启动操作系统。拔掉装有元神操作系统的U盘,然后开机如下图所示:

可以看到,的确无法再从硬盘启动操作系统。使用上述代码将备份的MBR扇区内容重新写回0号扇区,然后拔掉装有元神操作系统的U盘并重新开机,发现可以从硬盘启动系统了,如下图所示:

3. 总结

本文介绍的方法成功地向硬盘的目标扇区写入了数据。但是,写扇区须谨慎,以免错写某些文件已经占用的扇区从而导致文件出错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树 - 二叉树的所有路径

257. 二叉树的所有路径 方法一:递归法: /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefi…

水下目标检测(低光照目标检测)方法-发表在Patter Recognition,代码已开源

这里写自定义目录标题 前言动机贡献Overview一些实验结果数据集主要实验结果实验结果展示 总结 前言 Hi,各位读者,好久不见!现在我已经从北大博士毕业,成为一名小青椒啦!工作还是需要宣传的。今天想分享我在水下目标检测的工作&a…

低代码技术:快速构建应用的未来

在当今快速发展的数字化时代,企业和个人对软件应用的需求不断增长。然而,传统的软件开发过程通常复杂且耗时。这使得低代码技术(Low-Code Technology)成为了越来越多人关注的焦点。本文将探讨低代码技术的基本概念、优势以及如何在…

贾湖刻符——汉字起源的重要线索

关注我们 - 数字罗塞塔计划 - 汉字是世界上唯一沿用至今的古老文字系统,其演变历程承载着中华文明的发展和赓续。那么汉字究竟源自何时?是古代神话传说的“昔者仓颉作书,而天雨粟,鬼夜哭”;还是由华夏先民创制的刻划符…

请你学习:前端布局3 - flex

Flexbox布局也叫Flex布局,弹性盒子布局。它的目标是提供一个更有效地布局、对齐方式,并且能够使父元素在子元素的大小未知或动态变化情况下仍然能够分配好子元素之间的间隙。主要思想是使父元素能够调整子元素的宽度、高度、排列方式,从而更好…

AI变现之Midjourney头像定制

前言 Midjourney | 头像定制 1.项目介绍 个性化头像在如今的社交媒体时代变得越来越重要。传统头像照片有时显得普通,而AI绘画头像则能为自己的社交账号增加独特性和吸引力。 通过AI绘画工具制作头像,可以获得一个充满创意和个性的头像,让…

湖南的智榜样网络安全公司开的培训学校参加学习成为网络安全工程师

学习网络安全可以通过以下步骤进行: 获取基础知识:开始学习网络安全之前,建议先获取一些计算机基础知识,包括计算机网络、操作系统、编程语言等方面的知识。这些基础知识将为你理解和学习网络安全提供必要的背景。 学习网络安全基…

数据中台即将消亡,数智基建取而代之?

数据中台即将消亡,数智基建取而代之? 前言数智基建 前言 在当今数字化浪潮汹涌澎湃的时代,企业的发展如同在浩瀚海洋中航行的巨轮,而数据则是推动这艘巨轮前行的强大动力。然而,如何有效地管理和利用数据,…

2024年第十四届APMCM亚太地区大学生数学建模竞赛思路

2024年第十四届亚太地区大学生数学建模竞赛(以下简称“竞赛”)是由中国国际科技促进会物联网工作委员会和北京图象图形学学会联合主办的亚太地区大学生学科类竞赛,竞赛由亚太地区大学生数学建模竞赛组委会负责组织,欢迎各高等院校按照竞赛章程及有关规定…

MySQL:SQL调优的简单实践

记一次简单的SQL优化实践。 一、初始化数据 1.1 初始化数据-课程表 #课程表 create table Course(c_id int primary key,name varchar(10) );#存储过程:增加课程表100条数据DROP PROCEDURE IF EXISTS insert_Course;DELIMITER $CREATE PROCEDURE insert_Course()…

[线程]***多线程带来的风险-线程安全问题

文章目录 一. 什么是线程安全二. 线程不安全一个经典的例子三. 对上述例子的理解四. 出现线程不安全的原因1. 线程在操作系统中是随机调度, 抢占式执行的2. 当前代码中, 多个线程同时修改同一变量3. 线程针对变量的修改操作, 不是"原子"的4. 内存可见性问题, 引起线程…

使用gradle 移除敏感权限

前言 最近要上架Google Play 但是因为有个敏感权限很容易被拒。 想着把权限依赖的库去掉就行了,但是遇到一个恶心的问题。就是这个权限在Android Studio的Merged Manifest 视图中没有,但是在生成的apk中却包含。这样的就不能通过Android Studio来定位权…

一文搞懂 js 原型和原型链

文章目录 一、前言二、原型2.1 概念2.2 获取原型的方法2.2.1 __proto__获取方式2.2.2 通过构造函数prototype 属性获取2.2.2 ES6 class 通过Object.getPrototypeOf()获取类原型 2.3 通过原型实现继承2.4 原型的作用 三、 原型链四、ES6实现继承五、综述 一、前言 原型和原型链…

计算机网络面试真题总结(七)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 什么是对称加密、非对称加密? 对称加密是一种常用的加…

C语言 之 自定义类型:结构体、结构体内存对齐、修改默认对齐参数 详细说明 可以来看看哟

结构体类型的声明 结构体的声明 struct tag {member-list; //结构体中的成员,可以有多个 }variable-list; //这里是直接创建结构体的变量,但是不一定要在这里声明变量 //不能把后面这个 ; 省略了例如结构体用于描述一个学生: struct Stu…

MySQL内部临时表(Using temporary)案例详解及优化解决方法

目录 前言 一.场景案例 二、什么是内部临时表? 三、哪些场景会使用内部临时表? 四、内部临时表如何存储? 1)使用内存 2)先使用内存,再转化成磁盘文件 3)直接使用磁盘文件 五、如何优化…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:一致性角色就这么简单

IP-Adapter 更新了全新的模型—FaceID plus V2 版本,同时还支持 SDXL 模型。 FaceID plus V2 版本的优点: 解决任务一致性 一张图生成相似角色 其中,两个 Lora文件 放置在:SD安装目录\models\Lora 两个 bin文件 放置在&#x…

三、IIC 总线协议——1、IIC总线协议介绍

IIC总线协议介绍 1、IIC介绍: Inter Integrated Circuit,同步、串行、半双工通信总线。 2、IIC总线结构图 ① 由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空闲状态为高电平。 ②总线支持多设备连接,允许…

SSM电动车智能充电桩管理系统 项目源码24481

摘 要 随着社会对环保和可持续发展的关注不断增加,电动车作为清洁能源交通工具受到了广泛关注和推广。然而,电动车充电设施的建设和管理面临着诸多挑战,如充电效率低下、管理繁琐等问题。为解决这些问题,本研究设计开发了一款电…

揭秘无线领夹麦克风五大行业隐秘:音质失真、隐私泄露需警惕!

​无线领夹麦克风是演讲、教学、直播等场合的得力助手,然而市场上品牌众多,产品质量参差不齐,安全隐患层出不穷。作为一名音频设备评测师,我近期入手了多款无线领夹麦克风进行测评,下面就来为大家揭秘无线领夹麦克风行…