作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 NASM 和 gcc 编写多阶段引导加载程序。为此,我指的是 grub 引导加载程序源。
我写了一个 stage1 loader,但是卡在了 over writing partitionMBR表。
在 grub stage1.S 中,他们使用这样的代码来跳过分区表:
. = _start + STAGE1_PARTEND
.word STAGE1_SIGNATURE
我如何在 NASM 中做到这一点?
使用时间它将覆盖分区表。
所以请帮助我。
最佳答案
Assigning a value to . is treated the same as a .org directive(参见 this page)。
因此,您粘贴的代码正在更改 current origin到 _start + STAGE1_PARTEND
并在其中放置一个值为 STAGE1_SIGNATURE
的单词。
所以在 NASM 代码中你应该能够做类似的事情:
fill: times _start+STAGE1_PARTEND-$ db 0
dw STAGE1_SIGNATURE
; .word is 16 bits on x86 (regardless of .code16 / .code64)
另见 this example在 NASM 手册中展示了如何以这种方式填充 BIOS 引导扇区,作为 MASM 风格 org
或 GAS 风格 的替代品。 = new_position
实际上在平面二进制输出文件中寻找并填充填充。
关于gcc - 如何在 NASM 中编写 GRUB stage1.S?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294121/
我是一名优秀的程序员,十分优秀!