问题标签 [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 - 程序集 - 如何引导附加在内核末尾的内核?
我正在尝试在程序集引导加载程序/MBR 上启动我的程序集内核。我正在将内核从偏移 0x7e00 到偏移 0x8000(扇区 1)读取到内存中;和跳跃偏移0x7e00。为什么它不跳入我的内核?
~~~~
环境:NASM、QEMU、Windows 7 64 位。
linux - 无法格式化硬盘驱动器并将 linux 安装到戴尔混合超极本
OpenSUSE 13.2:将显示磁盘,允许删除和创建分区,甚至创建新的分区表。但不会格式化磁盘,对所有应该格式化的分区启动错误“无法挂载/dev/sda1:设备或资源忙”。
Debian 8/8.1、Ubuntu 15.04:根本不会显示硬盘!无法选择它们并管理分区
我很抱歉交叉发帖,但 stackoverflow 是我所知道的最有帮助和最活跃的论坛,我得到的唯一答案在这里(下面的评论)
linux - 如何确定分区的哪些扇区未使用?
我有一个安装了 Windows 8.1 的 MBR 分区(NTFS)。我想安装 Arch Linux 作为第二个操作系统。我需要从现有分区的未使用空间中创建新分区。可能吗?如果是这样,如何确定我需要指定现有分区的“开始”和“结束”扇区来创建新分区(不损坏现有分区)?
hex - 什么是 MBR 偏移 0x1C3,我该如何编辑它?
我在另一个网站上发布了这个问题,但在用户建议我在这里发布这个问题之前,没有人能够帮助我。所以...
如果我尝试使用英特尔控制器,我的 SSD 在我的旧 GA-P35-DS3 主板上发布时会遇到一些问题。
显然(经过多次谷歌搜索)我发现这是 BIOS 上的一个错误,可以通过对 MBR 进行一些快速编辑来修复。问题是,我不知道我该怎么做。我尝试了 010 Editor 和 HxD,但我完全不知所措,虽然我能够打开磁盘,但我找不到那个特定的“偏移量”(0x1C3)。
如果您好奇,这篇文章描述了我的问题(场景 1)以及修复它所需的步骤:http: //forum.giga-byte.co.uk/index.php?topic=8585.0
所以,如果有人能帮我弄清楚什么是“偏移”,以及我如何使用 010 Editor(或您认为合适的任何其他程序)找到它,那么我可以解决这些问题,我将非常感激!:)
编辑:我一直在环顾四周,如果我应该更改这些字节,我有点困惑:http: //i.imgur.com/Ys0gU3O.png
或者这些字节:j59ypS5.png(我需要更多的代表来发布第二个,这样你就可以将它复制粘贴到 imgur URL 中)
从其内容来看,第一个选项似乎没有意义。但由于第二个选项只有“00 00 00”,因为我也不知道这是否有意义......
如果有人可以请帮助我,我将永远感激不尽。
bootloader - 扩展引导记录 - 未使用的第 3 和第 4 个条目
为了使用 DOS/MBR 分区布局创建 4 个以上的分区,通常使用扩展分区。基本上,这意味着最后一个主分区在其第一个块中包含另一个分区表(与真正的 MBR 具有相同的布局)。
但是,不是使用所有 4 个分区表条目来定义其他分区,而是仅使用前两个条目(维基百科上的 EBR)。
这意味着定义许多辅助分区将导致分区表的链接列表而不是树结构。
我的问题是,为什么选择这种方法,因为我认为这种设计没有任何优势。
assembly - 闪存驱动器上的主引导记录不起作用
我学习纯硬件(无操作系统)编程,但从闪存驱动器启动时遇到问题(使用金士顿 DT101 G2 8Gb)。初始代码,没有备份,我现在无法完全复制它:(,在模拟器(最新的 Bochs)和实时硬件上都可以正常工作。之后添加了更多功能(转储输出子例程和加载使用 int 13h 的功能 42h 的闪存驱动器中的扇区)在 Bochs 中完美运行,但在实时计算机上完全无法运行 - 计算机在尝试运行时重新启动。所以,我已将代码简化为我拥有的一种最简单的形式在开始和修改的段寄存器初始化。这是现在的样子:
但这不能正常工作。它将一个字符放在第一个屏幕位置 (0, 0),但下一个位置只是黑色(但至少应该有蓝色背景,不管字符代码是什么)。此外,写在不同大小的闪存驱动器(金士顿 DT101 G2,32Gb)上的相同代码会给出“缺少操作系统...”消息。我尝试了不同的变体,但仍然无法完成这项工作,也无法弄清楚会发生什么。这是闪存驱动器的问题吗?可以回想一下,几个月前我用相同的闪存模型尝试了 LinuxLive,在 4 到 5 次启动后它就停止了启动。这里我用的是:电脑型号:HP EliteBook 8440p;(脱售);CPU:英特尔酷睿 i5 M520 2.40GHz 2 核;BIOS:惠普 68CCU 版本。F.0D, 14/07/2010(不知道有没有更新);编译器:NASM;
请帮助我了解会发生什么。非常感谢。
assembly - mbr 中的堆栈初始化
假设我正在编写自己的mbr
部分,并且想在哪里运行一些 C 代码。为此,我需要首先初始化堆栈,然后调用 C 代码。我以这样的方式做到了
boot.S
文件:
在我的 C 代码中,我有 function kmain
。
我的linker.ld
文件如下所示:
所以问题是内存部分.bootstrap_stack
放在哪里?我没有告诉链接器脚本任何关于它的信息。但如果我这样做,那么输出文件的大小将超过 512 个字节,我不能将其用作mbr
. 为什么在这个 C 堆栈正常工作之后?
c - 在 C 中编写引导扇区:防止生成堆栈指针初始化
在修改了在汇编中编写引导扇区代码之后,我想知道我是否可以在 C 中做同样的事情。到目前为止,空函数中的代码生成如下所示:
在 C 中:
后续汇编(由 GCC 生成):
但是,是否可以特别指定对于这个(入口)函数,我不希望基址和堆栈指针被初始化?BIOS 将控制直接转移到 0x7c00,因此设置堆栈指针的前两条指令是多余的。
我尝试添加__attribute__ ((always_inline, noreturn, regparm(0)))
到函数声明,但这似乎没有做任何事情。
partition - 为什么 MBR 的第一个分区设置在扇区 63?
如果我没记错的话,第一个扇区是 mbr 和引导代码,当 XT 刚推出时,DOS 就放在 MBR 之后,第一个分区位于第 63 扇区。
我还记得第一个柱面被保留,每个柱面有 63 个扇区,所以第一个分区从第二个柱面开始,因此是第 63 个扇区。
有人知道我是否记错了吗?
assembly - 重定位后的MOV绝对寻址
我正在 MBR(16 位)中编写一个 int 13h 挂钩。我将旧的 int 向量保存为:
因为我在运行时重新定位了代码,所以我必须计算 oldint13 变量的正确位置。一切都很好,当我检查重定位的 oldint13 变量的位置时,有正确的地址(0xf000e3f3)。现在,在我挂钩 int 13h 之后,我想将原始 int 13h 处理程序调用为:
但它会跳转到地址 0。如果我进行以下检查:
ax 变为 0。 (oldint13-cpy_original+0x7e00) 正确解析为正确的地址,并且该地址仍包含正确的原始 int 13h 向量。甚至反汇编代码也显示:
哪个是对的。
为什么它会返回 0 呢?16位有什么问题吗?
我的引导加载程序代码的完整副本如下: