问题标签 [mbr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 从硬盘读取字符串并使用程序集打印到 TTY 选项
我正在开发一个“只在过程中握住你的手,使用汇编编写你自己的操作系统”项目。除了硬盘读写之外,我已经用 MikeOS 之类的东西从头开始编写了所有内容。读写的重要性在于允许操作系统大于512长度的基本输入输出系统内存。
我编写了一个测试用例,用于从硬盘读取并在屏幕上打印第一个字符。使用qemu,我可以定义哪个文件用作硬盘驱动器,因为我定义了程序可以在读取函数中断期间使用 0x80 选项指向该硬盘驱动器的寄存器的位置。
第一个测试代码没有选择硬盘驱动器,因此读取代码将读取它自己的运行二进制文件并产生一个“a”,假设由于二进制文件在加载到的运行文件的开头产生了一个“a”(ascii)基本输入输出系统。_ _ _ _
所以我的问题是......
当我定义硬盘驱动器选择时,为什么它不像我没有定义硬盘驱动器时那样读取屏幕上文件中的字符串“Hello”?
我的代码开头是否正确,屏幕上生成的“a”是巧合,在模拟器中运行的生成的二进制文件的开头有一个“a”?
为了大家,请用解释和代码回复。我在 Stack Overflow 中发现了两个问题,它们都用英文解释来回答他们的代码有什么问题,但没有代码可以证明为什么他们的解释是正确的。解释但不展示你的工作是一个有争议的问题。
不要建议我使用 C、C++ 或除汇编之外的任何其他语言,如果您已经完成研究并且我已经完成研究并反汇编高级语言(如 C、C++ 或其他任何语言),您会看到一个简单的“定义并在控制台上读取字符串”不仅要大得多,而且在效率方面也很粗心。这些反汇编的 C 代码与手写汇编示例的比较也将在项目文件中发布。
感谢您的宝贵时间,当我将项目作为开源教程发布时,社会将感谢您为与我处于相同位置的其他人节省了多少时间。(人类知识属于世界——反垄断电影,2001 年)
c++ - C++ - 如何指定 MBR 的偏移量?
我已经能够进行修改,使得 MBR 被 0 值覆盖。但是,是否有可能使我只覆盖 MBR(引导签名)的最后 2 个字节(55h AAh)成为 00h 00h ?我的代码是:
结果证明是成功的,但是写入 MBR 的值是错误的。我对 C++ 比较陌生,因此对此有点困惑。任何帮助将不胜感激。谢谢
hex - MBR和幻数理解题
首先感谢您表现出对帮助我的兴趣,
所以我尝试了解引导加载程序是如何工作的,我搜索了一下,发现了以下内容。MBR 的大小为 512 字节,减去 4 个 64 字节的分区表,我们有一个 446 字节的分区加上 MBR 签名的 2 个字节。幻数。幻数是 0x55aa。但是这个幻数如何只适合 2 个字节呢?所以 0x55 和 0xaa 的大小为 255。它如何仅适合 2 个字节?
谢谢
function - 汇编命令在没有我明确调用的情况下运行
因此,当我遇到本教程的源代码时,我正在尝试学习一些汇编代码。现在我已经编译它并运行它并输出一个工作输出:
但问题是当我查看代码时,某些函数使用了调用命令,但其他函数没有显式调用。我想我的意思是 boot_sect_main.asm,函数 print 在 boot_sect_print.asm 文件中被调用,但没有调用start或done函数,但这两个函数仍在运行。有人可以解释为什么会这样。
boot_sect_main.asm
boot_sect_print.asm
boot_sect_print_hex.asm
operating-system - 主引导记录显示没有活动分区?
我使用以下命令检查十六进制的 MBR 代码
其中显示了这个:
在我看来,那里只有一个分区。我有linux和windows双启动,至少不应该有两个吗?
而且,根据这个网站
https://www.bydavy.com/2012/01/lets-decrypt-a-master-boot-record/
在地址 1bE,它应该是“80”而不是“00”,因为 80 表示它是可引导的。
x86 - Phoenix BIOS 跳过 MBR 代码,ACTUAL BIOS 标准是什么?
我想学习汇编程序以使用超最少的裸代码来运行任何 x86 兼容机器,以便在开机时在屏幕上显示硬编码文本。我关心与 x86/IBM 机器的完全兼容性。
我按照关于简单引导代码的教程进行操作,但惨遭失败,无法通过笔记本电脑上的 USB 物理运行它们。就像我的笔记本甚至没有触及 MBR 代码一样。我花了两个星期阅读大量文章,但结果一无所获。我学到了很多关于 BIOS 参数块、分区条目、这个旧的 Phoenix BIOS 规范和 UEFI 的东西。
我的笔记本电脑可以通过可启动的 FreeDOS USB 正确启动。这是我使用 MBR 的 FreeDOS USB 的第一个扇区: Nice and full of real useful codey-code
我尝试从带有 UEFI 的台式计算机启动它并且它工作正常。我尝试从带有 Phoenix BIOS 的笔记本电脑启动它,它工作正常。
然后我擦掉了所有的引导指令: Nice and full of NOTHING but one partition entry
我尝试使用 UEFI 从同一台台式计算机启动它,但它按预期失败。我尝试从带有 Phoenix BIOS 的笔记本电脑启动它,它工作正常。我发誓。
我想知道为什么有一个 BIOS 可以自行处理并跳过 MBR 指令,如果有更多类似的,我在哪里可以找到有关它们的文档,以便我可以使我的引导代码与所有 BIOS 完全兼容。
我笔记本的BIOS版本是1.08,EC版本是1.07。我不想更新它。如果 FreeDOS 可以正常启动,那么我希望我的引导代码也可以正常启动。
assembly - MBR 签名如何存储在硬盘上?
我有一个硬盘的转储,它在偏移量 510 处具有aa55。但是我读过它的地方说它在转储中是55aa 。
000001fe: aa55
所以,我想知道数据是存储在我的磁盘上的大端还是小端?
谢谢
hard-drive - x86 32位机器上操作系统启动过程的一些细节
我正在尝试编写一个供我自己使用的操作系统,我想显示一个带有 VGA 输出的空白(黑色)屏幕,但我有一些问题(问题):
在 FAT32 下,我有 MBR 引导加载程序从 Bochs 读取由 bximage 生成的虚拟磁盘映像的第一个扇区。我应该将显示黑屏的第二个编译代码放在哪里(哪个扇区)?如何使用 dd 实用程序来做到这一点?我的第二个编译代码文件只有 9 个字节。
是否需要 VBR?
我如何知道数据区域 (FAT32) 的开始和结束位置?
我重写了此链接提供的引导加载程序。
我的磁盘文件规格是:20M,CHS 40/16/63
linux - Windows MBR 被 linux 命令覆盖 dd if=/dev/zero of=/dev/sdb bs=512 count1
我知道我所做的事情很愚蠢:在 Linux 虚拟机中,我对包含 Windows 的外部硬盘执行了 dd if=/dev/zero of=/dev/sdb bs=512 count1
现在我无法在我的 Windows 机器中检测到外部硬盘驱动器。我觉得 MBR 分区不见了
现在要做什么 ?有什么方法可以在外部硬盘上恢复我的数据?