首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >程序集-读取虚拟磁盘的下一个扇区

程序集-读取虚拟磁盘的下一个扇区
EN

Stack Overflow用户
提问于 2012-06-17 12:18:30
回答 2查看 3.1K关注 0票数 4

作为世界上任何一位程序员,在他/她的生命中至少有一次,我试图创建我的“革命性”,新的,也是唯一的一个操作系统。:D

嗯,我使用的是一个虚拟模拟器(Oracle VM virtual ),我为它创建了一个新的未来得及的操作系统,其中有一个vmdk磁盘。我喜欢vmdk,因为它们只是普通的文件,所以我可以将引导加载程序粘贴到虚拟硬盘的前512字节上。

现在,我正在尝试读取这个虚拟磁盘的下一个扇区,我将粘贴一个显示消息的简单内核。

我有两个问题:

  • 是否正确地读取了第二个段(第一个-512字节-被引导加载程序占用)?代码:

ReadDisk: mov bx,0x8000;段mov es,bx mov bx,0x0000;偏移量mov ah,0x02;读取函数mov al,0x01;扇区--这可能是错误的,尝试从hd mov读取,0x00;柱面mov cl,0x02;扇区mov dh,0x00;磁头mov dl,0x80;驱动器-试图从hd int 0x13读取;磁盘int jc ReadDisk jmp :bx;缓冲区

在这里,在检查CF之后,我得到了错误消息。然而,如果我使用INT 13,1来获取最后的状态消息,AL是0-所以没有错误保存。

  • 是我粘贴我的简单内核在正确的位置在vmdk?我所做的是在文件的512字节之后粘贴它,正如我所说的,前512字节是引导加载程序。该文件如下所示:

AC 45 7C E8 16 00 EB FE B4 0 E B7 00 B3 07 CD 10 <-第一扇区C3 08 C0 74 05 E8 EF E8 F6 C3 B4 00 B2 80 CD 13是5D 7C 72 F5 BB 00 80 8E C3 BB 00 B4 02 B0 06 B5 00 B1 01 B0 00 07 CD 13 e 4E 7C 72 CF 26 FF 57 65 6C 63 6F 65 6D 21 52 65 64 69 6E 67 65 72 6F 72 21 65 65 65 74 74 6E 67 67 65 72 72 72 21 00 00 0000 00 0000 00 0000 00 0000 00 00 -启动-载入者签署的B4 0E B0 2E CD 10 B0 00 00 00第二区00 00 00

所以,这就是我试图将内核添加到第二个扇区的方式。你觉得这有什么不对?谢谢!

更新

好的,我现在没有看到任何错误,但我没有看到加载的代码正在执行。它应该在窗口上显示一个点:

代码语言:javascript
运行
AI代码解释
复制
;--------------------------------------------
; 'load.asm'
; loaded from 'boot.asm'

[org 0x8000]
[bits 16]

;--------------------------------------------

main:
mov ah, 0x0E  ; print function
mov al, '.'   ; ascii char
int 0x10   ; IO int

jmp $    ; hang
EN

回答 2

Stack Overflow用户

发布于 2012-06-21 01:56:04

一个问题是:

代码语言:javascript
运行
AI代码解释
复制
jmp [es:bx]

这将从寄存器es (段部分)和bx (偏移部分)中包含的地址的内存位置读取地址,即16位偏移量,然后将ip设置为16位偏移量。

您可能想要使用的是:

代码语言:javascript
运行
AI代码解释
复制
jmp some_constant1:some_constant2

这将将cs设置为some_constant1,将ip设置为some_constant2。毫不奇怪,这两个常量的候选值分别为0x8000和0,因为这是加载代码的位置。

现在,第二个问题是:

代码语言:javascript
运行
AI代码解释
复制
[org 0x8000]

这个org告诉NASM生成代码的方式是,如果在偏移量0x8000处加载,它就能工作。现在,偏移量0x8000与段0x8000不一样。如果使用jmp 0x8000:0,那么还应该使用:

代码语言:javascript
运行
AI代码解释
复制
[org 0]
票数 6
EN

Stack Overflow用户

发布于 2012-06-17 13:33:41

失败后再试一次。我认为当磁盘旋转时,您将收到没有消息的错误指示,因此模拟器可能第一次故意失败。在bochs和qemu中,四次尝试对我都很有效,但我没有在任何其他方面尝试过。您还可能希望在读取之前重置驱动器控制器以清除任何先前的错误。使用al清除和dl中的驱动器号的中断0x13。

注意:硬编码驱动器号可能暂时有效,但不允许您支持从其他驱动器启动。在启动引导加载程序时,BIOS应该将驱动器号保留在dl中,因此您可以保存它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11074483

复制
相关文章
4KB 扇区磁盘上的 Linux:实际建议
为何更改为 4096 字节扇区? 如果您熟悉磁盘结构,就知道磁盘是被分解成扇区 的,大小通常是 512 字节;所有读写操作均在成倍大小的扇区中进行。仔细查看,就会发现硬盘事实上在扇区之间包括大量额外数据,这些额外字节由磁盘固件使用,以检测和纠正每个扇区内的错误。随着硬盘变得越来越大,越来越多的数据需要存储在磁盘的每一单位面积上,导致更多低级别错误,从而增加了固件纠错功能的负担。 解决该问题的一个方法是将扇区大小从 512 字节增加为更大的值,以使用功能更强大的纠错算法。这些算法可使每个字节使用较少的数据,从
小小科
2018/05/02
3.5K2
4KB 扇区磁盘上的 Linux:实际建议
磁盘管理无法连接虚拟磁盘服务_diskpart虚拟磁盘服务错误
在Parallels Desktop中,将新的空白虚拟硬盘添加到虚拟机配置后,对于安装在虚拟机中的操作系统来说它将不可见,直至将其初始化。
全栈程序员站长
2022/11/08
2.5K0
主引导扇区程序代码优化-2
movsb,movsw 这里有两个同样功能的指令区别在于,一次转移内存的大小,movsb 的传送是以字节为单位的,而 movsw 的传送是以字为单位的。 从ds:si地址复制到es:di,复制字节数由cx指定。
多凡
2021/12/06
2.6K0
主引导扇区程序代码优化-2
Linux操作_磁盘管理_增加虚拟磁盘
环境:虚拟机 VM 12,Linux版本号 CentOS 7.3 1,在当前的虚拟机选项卡点击鼠标右键,选择“设置” 2,在弹出的对话框中左侧选中“磁盘”->点击下方“添加”按钮,在弹出的“添加硬件向
Zoctopus
2018/06/04
6.3K0
Linux操作_磁盘管理_增加虚拟磁盘
环境:虚拟机 VM 12,Linux版本号 CentOS 7.3 1,在当前的虚拟机选项卡点击鼠标右键,选择“设置” 2,在弹出的对话框中左侧选中“磁盘”->点击下方“添加”按钮,在弹出的“添加硬件向
Zoctopus
2018/06/20
6.4K0
CentOS挂载读取ntfs格式的磁盘
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:zbxhhzj@qq.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。 转载本站文章请保留原文链接,如文章内说明不允许转载该文章,请不要转载该文章,谢谢合作。
会长君
2023/04/26
3.9K0
VirtualBox 虚拟磁盘的UUID修改
个人测试环境,想构建一套Standby RAC环境,不想再重复去安装系统浪费时间,直接复制之前安装RAC前的一套VirtualBox的虚拟环境,不过打开时报错:
Alfred Zhao
2019/05/24
2.4K0
硬盘的读写原理详解
硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的 Ultral-160就是基于SCSI-3标准的;IDE 遵循的是ATA标准,而目前流行的SATA,是ATA标准的升级版本;IDE是并口设备,而SATA是串口,SATA的发展目的是替换IDE;
黄规速
2022/04/14
2.4K0
硬盘的读写原理详解
五分钟聊完磁盘
盘可以说是硬件里面比较简单的构造了,同时也是最重要的。下面我们从盘谈起,聊聊它的物理构造
cxuan
2020/06/19
1.1K0
终于知道为什么片子太多会导致硬盘变慢了
硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的 Ultral-160就是基于SCSI-3标准的;IDE 遵循的是ATA标准,而目前流行的SATA,是ATA标准的升级版本;IDE是并口设备,而SATA是串口,SATA的发展目的是替换IDE;
架构师修行之路
2021/06/09
1.6K0
终于知道为什么片子太多会导致硬盘变慢了
MySQL索引底层的数据结构
这里有一篇关于存储引擎的文章:https://blog.csdn.net/qq_41618510/article/details/84680226
Java廖志伟
2021/01/29
6470
Linux基础知识
软件运行时输入单元输入内容,进入内存,CPU由控制单元和算术逻辑单元组成,控制单元控制算术逻辑单元从内存中读取数据,内存和外部存储设备进行交互,运算完毕以后输出到输出单元,完成软件的运行。
mySoul
2018/10/15
1.5K0
虚拟机-新增磁盘
一般我们新建一个虚拟机的时候,都是只分配一个磁盘,当我们想增加磁盘做存储的时候该怎么办,下面是讲解步骤,由于是远程录制,所以没有声音。截图的时候由于分辨率问题会有点低,结合视频就可以了。
时代疯
2021/07/22
8940
虚拟磁盘工具vmkfstools的使用
给虚机VM1精简配置了1TB空间,经过长期的运行,现在在VM1的windows系统里看到数据只有200GB左右,但是vmdk文件已有1TB。我觉得,形成的原因是精简配置只增长不收缩。
孙杰
2019/10/29
5.5K0
虚拟磁盘工具vmkfstools的使用
从硬件+操作系统的角度解释为什么操作系统的IO单位是磁盘块
不同版本的操作系统的 buffer_head 代表的大小可能不一样,但是都是内存和硬盘交换数据的基本单元。
执生
2020/11/24
8960
从硬件+操作系统的角度解释为什么操作系统的IO单位是磁盘块
[记录]虚拟硬盘的压缩|磁盘写零
用虚拟机软件虚拟出来的硬盘文件会随着使用而变大,因为磁盘碎片的产生,这个文件里也有很多的没用的空闲空间,为了节省空间,可以对虚拟硬盘文件进行压缩。
owent
2018/08/01
1.8K0
[记录]虚拟硬盘的压缩|磁盘写零
心情大好,给VPS升级了一下系统,然后自己配了LNMP安装脚本,用yum源安装的话更新比较方便点哈 ​​这个过程挺麻烦啊,所以果断要记下来,以防以后要用到 如果是其他系统的话,几个配置路径和软件源地址还有yum指令替换掉,应该就可以了
owent
2023/03/06
3990
虚拟机虚拟磁盘恢复案例教程
本次小编分享的是存储突然断电之后,ESXi系统连不上存储,在FreeNAS中发现UFS2文件系统出现问题,随后用fsck 修复好了文件系统。 此时ESXi 系统可以连上存储,但发现ESXi系统未能识别到原来的数据存储和VMFS文件系统,格式化VMFS后发现里面什么也没有,当遇到这种情况如何操作才能最大程度的挽救数据呢?
北亚数据安全与救援
2021/04/26
2.1K0
虚拟机虚拟磁盘恢复案例教程
主引导扇区程序在屏幕显示文字-1
指的是处理器加电或者复位后,ROM-BIOS读取启动硬盘的第一个扇区,512字节。该扇区的最后两个字节必须 是0x55 0xaa。
多凡
2021/12/06
9260
主引导扇区程序在屏幕显示文字-1
硬盘分区 mbr gpt_磁盘阵列如何分区
硬盘的物理结构是比较复杂的,这里我们只需要知道最常用到的几个术语即可,也就是chs寻址中所涉及到的结构
全栈程序员站长
2022/09/22
3.4K0
硬盘分区 mbr gpt_磁盘阵列如何分区

相似问题

从磁盘读取单个扇区

512

(Windows)用C读取磁盘的引导扇区

12

Python - Windows原始磁盘无法读取最终扇区

15

无法用汇编语言读取磁盘扇区

12

如何使用ATA命令读取磁盘的特定扇区?

310
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档