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

1. 背景

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

2. 方法

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

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

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

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

sector_buff: times 512 db 1
demo_write_disk:pushamov edi, API_PARAMmov dword [fs:edi], API_WRITE_DISK_SECTORmov dword [fs:edi+4], 2		;2 parametersmov dword [fs:edi+8], 0		;parameter_1: sector no.xor eax, eaxmov ax, dsadd eax, SEG_BASEmov bh,byte [fs:eax+7]mov bl,byte [fs:eax+4]shl ebx,16mov bx,word [fs:eax+2]add ebx, sector_buffmov dword [fs:edi+12], ebx	;parameter_2: start address of buffercall pword [fs:OS_API]poparet

代码中先定义了变量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号扇区并打印到屏幕上,代码如下所示:

use32START:pushacall demo_read_diskcall demo_write_diskcall demo_read_diskpopairetinclude '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.mzph.cn/pingmian/52576.shtml

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

相关文章

STM32F103与ESP8266 WIFI模块的USART中断调试

本文概述了利用STM32F103的HAL库,通过USART中断方式调试ESP8266(ESP-01)WIFI模块的方法。首先介绍了开发环境和ESP-01模块的基本特点与功能,随后展示了如何通过电脑PC的串口助手进行初步调试与验证。最后,重点阐述了如…

SpringBoot-读取配置文件方式

前言 Spring Boot提供了多种灵活的方式来读取配置文件,以适应不同的开发和部署需求,SpringBoot启动的时候,读取配置文件的时候,首先获取的是file:/config/文件下的配置文件,也就是项目下config文件里面的配置文件&…

jmeter 响应乱码

Jmeter在做接口测试的时候的,如果接口响应的内容中有中文,jmeter的响应内容很可能显示乱码,为了规避这种出现乱码的问题,就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试,出现以下乱码问…

等保需要的设备部署vs网络安全域划分原则

等保需要的安全设备和部署 技术要点–等保2级 技术要点–等保3级 安全产品/服务全景图 选型产品说明 安全区域边界配置 资产探测及漏洞检测配置 网络安全域划分原则 网络安全域 定义 网络安全域是一种网络划分方式,将具有相同安全需求、访问控制、相同信任级别、…

【MySQL 14】用户管理

文章目录 🌈 一、用户管理⭐ 1. 用户信息⭐ 2. 创建用户⭐ 3. 修改密码⭐ 4. 删除用户 🌈二、数据库的权限⭐ 1. 权限列表⭐ 2. 查看权限⭐ 3. 授予权限⭐ 4. 回收权限 🌈 一、用户管理 MySQL 也会区分普通用户和超级用户。如果只是访问某一…

【云原生系列之SkyWalking的部署】

1、分布式链路追踪 1.1概念 在较大的web集群和微服务环境中,客户端的一次请求需要经过不同的模块,多个不同中间件,多个不同机器一起相互协作才能处理完成客户端的请求,而在这一系列的请求过程之中,处理流程可能是串行执行,也可能…

【微信小程序】全局数据共享 - MobX

1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 3.Mobx的使用 1.npm init -y(根据实际情况选择) 在小程序项目中,可以通过 npm 的方式引入 MobX 。 如果你还没有在小程序中使用过 npm ,那先在小程序目录中执行命令: npm init -y2. …

国内哪个期货程序化交易软件比较靠谱

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…

19.神经网络 - 线性层及其他层介绍

神经网络 - 线性层及其他层介绍 1.批标准化层–归一化层(不难,自学看官方文档) Normalization Layers torch.nn — PyTorch 1.10 documentation BatchNorm2d — PyTorch 1.10 documentation 对输入采用Batch Normalization,可…

[数据集][目标检测]光伏发电板红外图像鸟粪检测数据集VOC+YOLO格式173张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):173 标注数量(xml文件个数):173 标注数量(txt文件个数):173 标注类别…

sentinel安装

Releases alibaba/Sentinel GitHub java -jar sentinel-dashboard-1.8.8.jar 默认启动端口是8080 修改端口启动 java -jar sentinel-dashboard-1.8.8.jar --server.port8888 localhost:配置的端口 账密都是sentinel

本地部署Xinference实现智能体推理工作流(一)

提示:没有安装Docker的需要先提前安装好Docker 第一篇章 使用AutoDL平台快速部署xinference 备注:若使用AutoDL平台,以下过程使用无卡模型开机即可(省钱) 1. 下载Dify源码 Github下载Dify:https://github.com/langgenius/dify 2. 快速启动…

通过观测云 eBPF Tracing 实现无埋点的全链路追踪

前言 随着微服务架构的普及和系统复杂度的增加,对应用程序的可观测性要求也越来越高。传统的监控方法通常需要在应用程序中添加代码来记录和追踪重要信息,这种方法可能会增加系统的负担,并且在复杂系统中维护难度较大。 eBPF(Ex…

Linux 系统调优 2

### 4. **网络调优** - **TCP/IP 参数调优**: 调整 /etc/sysctl.conf 中的网络相关参数,如 net.core.somaxconn、net.ipv4.tcp_tw_reuse、net.ipv4.tcp_rmem 等,提高网络堆栈的效率。 - **网络队列管理**: 使用 tc(Traffic Control&…

【Yarn】Yarn的基本执行流程(二)AM Container的启动

Yarn的基本执行流程之AM Container的启动 文章目录 Yarn的基本执行流程之AM Container的启动AM Container(第一个Container)的启动NM RM心跳交互触发调度Container的启动流程RM中调度启动AM流程AMLauncher启动流程NM上容器的启动流程下载资源AM Containe…

告别PDF格式困扰,2024年PDF转换器推荐

PDF现在已经逐渐成为了文件传输的主流格式了,它有保存文件页面版式的优点,但是这个格式编辑对大部分人来说还是不那么方便,日常我们还是习惯将它们转换成我们常见的 文本格式来操作。今天我分享一下可以实现PDF格式转换的pdf转换器有哪些吧。…

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…

探索微服务架构中的动态服务发现与调用:使用 Nacos 与 Spring Cloud OpenFeign 打造高效订单管理系统

1. 背景 在现代微服务架构中&#xff0c;服务之间的通信与协作是非常重要的。Spring Cloud Alibaba 提供了一套完整的微服务解决方案&#xff0c;其中包括 Nacos 用于服务注册与发现&#xff0c;OpenFeign 用于声明式服务调用&#xff0c;Spring Cloud LoadBalancer 用于负载均…

FAISS 索引

FAISS&#xff08;Facebook AI Similarity Search&#xff09;是一个由 Facebook 开发的开源库&#xff0c;用于高效的相似性搜索和密集向量的聚类。它非常适合处理大规模的向量搜索任务&#xff0c;例如推荐系统、图像搜索、自然语言处理中的嵌入搜索等。 FAISS 文件概述 FAI…

vite 实现包的拆分

Vite 和 Rollup 是现代前端开发中两个非常流行的工具&#xff0c;它们各自有独特的用途和特点&#xff0c;但它们之间也存在一定的联系。 Vite Vite 是一个由 Vue 团队成员开发的前端构建工具&#xff0c;它的核心特点是在开发环境下提供极快的服务器启动和热模块替换&#x…