问题标签 [bochs]
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 - Bochs无法加载img文件并加载它
目前,我正在尝试从头开始编写一个微型操作系统。不幸的是,在第一步中,我遇到了一个让我发疯的问题。我编写以下代码作为我的引导加载程序。
在下一步中,我使用以下命令对其进行编译:
然后我使用以下命令创建一个 img 文件:
最后,当我在终端中运行 bochs 命令时,Bochs 只是向我显示了一个黑暗的窗口,并且什么也没有出现。怎么了?
另外,我尝试了以下代码作为引导加载程序,但结果与以前相同。
operating-system - GRUB 错误 13:自定义内核上的可执行格式无效或不受支持
我正在尝试学习 OS Dev,并开始根据The Little book about OS Development构建自己的内核。
当我使用 bochs 加载内核时,GRUB 抱怨:
我正在使用的文件:
加载器.s
链接.ld
bochsrc.txt
菜单.lst
要执行的命令:
我的文件结构是这样的:
文件 stage2_eltorito 是从https://github.com/littleosbook/littleosbook/blob/master/files/stage2_eltorito下载的
assembly - 无法读取引导代码上的扇区
我写了一个启动代码,在屏幕上打印一些东西,然后重新定位并加载下一个启动代码(VBR)。我使用 vmware 在虚拟机上测试了代码,它可以正常工作,我看到了 vbr 代码的正确输出。 单击此处查看代码的输出。
我希望能够调试我的代码,并且由于 vmware 没有此功能,我想使用可与 IDA 一起使用的 bochs。在 bochs 上运行代码后,我得到了错误:
调用处理扩展读取的中断(int 13h,函数 42)后发生错误。我检查了扩展并支持它们,因此我编写了另一个实模式程序,该程序仅使用相同的 bios 功能加载 1 个扇区,并且由于某种原因它起作用了。代码之间只有很小的差异。在引导代码中,我用获取参数的函数包装了加载扇区的代码,而在第二个代码中,它没有用函数包装。我将在这里发布代码。
启动代码(仅相关功能,完整版点击这里):
第二个代码:
我检查了内存中的 DAP 缓冲区中的两个代码,它是相同的。我无法弄清楚为什么在启动代码上我得到错误而在第二个代码上我没有。有什么我想念的吗?
assembly - 在保护模式下将字符打印到屏幕 ASM
我正在尝试进入保护模式,然后打印出“Hi”
但相反,它只是从我的 bios 中断调用(在进入 pmode 之前发生)打印“正在加载操作系统”,没有别的。
我的Bootloader.asm
内核.asm
和编译.bat
我用博克斯。我得到的只是: http: //prntscr.com/d24wmm
assembly - 为什么我使用 NASM 获得的操作码无法被 bochs i386 CPU 正确执行?
抽象的:
我发现 NASM 中支持的许多输出格式会生成非常稀疏的机器代码,并与 0 交错。最重要的是,bochs 的 i386 cpu 无法正确理解它们。
我相信错在我自己,但不知道在哪里以及为什么。
我的来源:
如果我输出“bin”格式:nasm -f bin boot.s -o boot.o
看起来很紧凑,不错!它可以正确执行。
这就是 NASM 认为应该为这种 bin 格式生成的内容:
好的!这就是我想要的!
但是当我生成其他类型时(因为 bin 不支持链接)
例如,ELF:nasm -f elf boot.s -o boot.o
NASM 认为它应该产生什么:
cpu是如何执行的:
此外,如果我生成其他输出格式,如 Mach-O 或 Obj:
还是错了。
我怎样才能使事情正确并生成可以由 bochs i386 cpu 正确执行的代码。或者我如何调整 bochs 以便它可以执行该代码。
assembly - 将字符串打印到 BIOS 视频内存不起作用
所以,我使用 Bochs 来运行我的引导加载程序和https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf 第 4.1 章。
我试图通过直接写入视频内存来打印到 BIOS 控制台,但是当我运行 Bochs 时,我看不到打印的字符串。该代码实际上与 PDF 上的代码相同。错过了什么吗?是否有我忘记的 Bochs 设置或 PDF 没有告诉我的内容?
这是包含函数的程序集文件
这是我的实际启动逻辑。
assembly - 软盘读取 (AH=0x2, int 0x13) 未完成
在我的引导加载程序的第二阶段,我试图将虚拟软盘上的一些扇区加载到bochs的内存中,但是在调用int 0x13
时,例程就不会返回。
我相信我第二阶段的相关代码是:
所有代码都可以在我的Github 存储库中找到。要构建,只需使用BOCHSmake all
,然后使用命令运行bochs
我做的第一件事是验证我确实得到了所有参数。r
在 bochs 的壳产量中:
ah = 0x2
(例程 ID)、al = 0x1
(扇区数)、(ch = 0x0
柱面编号的低字节)、cl = 0x5
(扇区编号和柱面编号的高两位)、dh = 0x0
(磁头编号)、dl = 0x0
(驱动器编号)。
sreg
打印es
:
并且,正如我所期望的那样bx = 0x0
,该扇区被加载到。0x0:0x0
我尝试了几件事:
加载到物理地址
0x600
我认为在执行 BIOS 中断例程期间覆盖 IVT 或 BDA 可能不是一个好主意,所以我尝试将扇区加载到
0x600
(es = 0x60
,bx = 0x0
) (我知道 BDA 的大小只有 256 字节)。结果相同。加载磁盘上的第一个扇区
也许阅读第五个部门以某种方式越界或其他什么?用于读取我的第二阶段的代码
int 0x13
按预期工作。在int 0x13
我的第二阶段是相似的,所以我希望它能够工作。作为测试,我将第二阶段更改为读取扇区 1,但仍然无法正常工作。将上半部分归零
eax
我想也许 BIOS 例程中确实存在一个错误,并且以某种方式
eax
使用而不是ax
。我尝试将 ... 的高 16 位部分归零,eax
但无济于事。
正如我之前所说,我已经将一些扇区从磁盘加载到内存中。之前的 GPR 的内容int 0x13
如下(r
在 bochs shell 中获得):
sreg
yield es:0x8f60
,它是 EBDA 之前的动态计算地址。
比较两者,我没有看到可能影响中断例程功能的显着差异,因此问题不在于通过寄存器传递的参数。
有人对该怎么做有其他建议吗?
c - load_seg_reg(ES, 0xfffc): 尝试从引导扇区运行内核代码时段无效
因此,我正在构建一个简单的操作系统,并且在从引导扇区调用内核代码时遇到了上述错误。我花了几天的时间挣扎,仍然处于死胡同。
代码在调用 KERNEL_OFFSET 时失败。我知道它失败了,因为我试图跳到一个无效的段,但我不知道如何以及在哪里。我还注意到它并没有真正读取磁盘。我的 load_kernel 代码要求读取 10 个扇区,但似乎只被读取了。该程序能够进入保护模式并能够加载我需要它从磁盘加载的内容,尽管加载行为很奇怪。
我还展示了我的makefile,因为我怀疑我可能没有正确链接东西。如果我使用的 shell 命令是正确的,我正在运行 OSX 顺便说一句。
我已经在这几天了,任何帮助将不胜感激。谢谢
引导扇区
switch_to_pm
加载内核
核心
生成文件
相关 bochs 控制台转储
assembly - 组装 - 在 bochs 中运行引导加载程序时出现问题
我目前正在尝试在 bochs 中编译和运行一个简单的引导加载程序。目前,这是我的 bootloader.asm 文件:
然后从我的 pragmalinux-img 目录中输入以下命令:
运行 bochs 后,我收到以下错误消息。(对不起文字墙)
我是组装和这种类型的新手,因此不胜感激。谢谢。