问题标签 [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 - `call far TSS descriptor:offset`之后的异常
我有一个大问题让我卡了一个月!我正在编写汇编代码来执行任务切换call far [es:esi + TCB.addr_tss]
,如图 1 所示。
现在我进入了新任务,所以我在 bochs 中输入 's',如图 2 所示:
目前看来一切正常,通用寄存器 CS、SS,控制寄存器 CR0、CR3,LDT 也正常。但是你知道如果我再迈一步会发生什么吗?见下图:
怎么了?!我不知道。我检查了 DPL,段限制,似乎没有错。哦,上帝保佑我...
linux - 了解汇编代码
任何人都可以对以下汇编代码提供一些见解:
更多信息:
引导加载程序实际上是一个小的 16 位引导加载程序,它使用 Xor 解密,一个更大的引导加载程序,一个位于扇区 3 到 34 的 linux 引导加载程序。(该磁盘中的 1 个扇区是 512 字节)
整个事情是一个运行在嵌入式 Linux 上的 exec 的保护系统。
删除保护的版本已经破译了 linux 引导加载程序(我们可以使用 IDA 将其反转),因此我们假设 xor 密钥必须在没有保护的版本中仅使用零。
如果我们在删除保护的版本中查看偏移量 0x800 到 0x8FF,它不会填充零,因此这不能成为关键,否则无法加载此版本,它将异或纯数据并且只加载垃圾。
扇区 3->34 在原始版本中是加密的,在我们的版本中是明确的(保护已删除),但 MBR 代码(小型预引导加载程序)在两个版本中是相同的。
那么会不会是 MBR 的汇编代码中有一个小细节稍微改变了 xor 键的位置呢?
这只是我为了更好地理解汇编代码加载器而做的一个练习,我发现这是一个相当大的挑战。到目前为止,我感谢您的意见!
windows - VirtualBox:将 Win XP 迁移到 Virtualbox 后出现“磁盘读取错误”
我尝试按照https://www.virtualbox.org/wiki/Migrate_Windows将旧的 Win XP Compaq 桌面迁移到 Ubuntu (12.04.1) 下的 VirtualBox (4.2.12)
在 createfromraw 步骤之后,我创建了虚拟机,并尝试启动。启动时立即显示以下消息:
我曾尝试从故障恢复控制台使用 FIXBMR 和 FIXBOOT,但这似乎使情况变得更糟(屏幕上的一些字符已损坏,并出现相同的错误消息)。
我怎样才能让这个虚拟机启动?
nasm - 引导加载程序跳转到下一个引导设备
到目前为止,我已经设法使用 NASM 编写了一个简单的引导加载程序,它会打印“Hello world”然后挂起。这个引导加载程序有 512K 长,它存储在 pendrive 的 MBR 中。BIOS 配置为首先启动 USB 外部设备,然后启动具有相应操作系统的硬盘驱动器。就像我之前说的,引导加载程序在打印“Hello world”后只是挂起,因为一个永无止境的循环指令 (jmp $)。所以,我想知道在引导加载程序完成执行后是否可以继续引导序列(跳转到下一个引导设备)。从笔式驱动器打印“Hello world”后,有没有办法继续执行操作系统(从 HD)?哪个指令或中断会完成这个?
提前致谢。
assembly - 在 nasm 中写入并保存 MBR
我想在我的操作系统上编写自己的MBR boot.Mbr 在不同的文件中 Bootloader 在不同的文件中我想用 int 13h 将 mbr 加载到内存中,但它只加载 bootloader。我认为这是因为 org 示例代码:
我想在那里写 Mbr 但它正在写 Bootload
我在 Windows nasm 中进行编译,我准备了 iso miso.exe 和 copy.exe 谢谢。
linux - 使用vi和hexedit打开一个二进制文件,为什么内容不同?
我正在尝试直接编辑二进制文件,我知道两个编辑器,vi 和 hexedit。但是当我使用它们单独打开一个二进制文件时,cotens 是不同的。下面是我所做的。
首先我使用“dd if=/dev/sda of=mbr bs=512 count=1”来生成包含mbr数据的二进制文件。然后我使用“hexedit mbr”打开它,它显示:开始:
结尾:
我使用“vi mbr”打开它并输入“:%!xxd”,它显示:开始:
结尾:
hexedit 显示是我在 mbr 中所期望的。但是 vi 显示该说些什么呢?而且 vi 显示似乎是错误的,因为有超过 512 个字节。
感谢您的任何解释!
assembly - 我无法将 cpu 从实模式切换到保护模式
我是根据 Nick Blundell 的一本书来做的。我写了一个MBR程序,它首先在实模式下运行,程序中的一些指令会将cpu切换到保护模式。首先,我这样设置 GDT:
然后cpu运行以下指令:
该指令jmp CODE_SEG:init_pm
将导致cpu崩溃并重新启动。如果我将其更改为jmp init_pm
,则以下指令mov ax,10
将导致 cpu 崩溃并重新启动。而且书上说切换操作需要跳远。
你能帮我做切换操作吗?
bash - 如何使用 bash 脚本获取分区的偏移量?
我可以用它parted
来找出我的图像的偏移量。
例如,分区从 开始2097152
。
如何2097152
使用 bash 脚本获得?
我可能可以解析输出,但也许有更合适的方法?
c - 如何在 C 中“读取”MBR(主引导记录)?
我只想写一个程序来分析C中的MBR。
我知道一些通过 Windows 上的 API 或 Linux 上的命令来阅读它的方法。
但是,我可以在没有任何依赖于平台的限制的情况下在 C 中做到这一点吗?
如果我不能,有什么理由吗?