最近我一直想进入汇编编码,只是为了获得一些经验。我决定研究它并获得了一些好的结果(尽管它很简单),但是一切仍然模糊不清,我非常感谢其他人就如何正确地将多个.asm 文件构建到.. &.. & ..完成Oracle VM的.vfd或.img文件。
所以在过去几周的空闲时间里,我一直在网络上进行研究,试图找到一种工作方法,使我能够:
1. Compile my .asm files into individual .obj files
2. Link these multiple files into one .bin
3. Place this .bin into a .vfd or .img
4. Finally ran on the Oracle VM.
我目前在Windows 7 64 位系统上使用的程序是:
(全部通过MinGW)
1. nasm - to compile the asm to .obj / .bin files
2. ld - to link .obj files into a .bin (I think)
3. dd - to create a .img file from a .bin file
经过一段时间的混乱,我已经能够将单个 .asm文件编译为.bin 文件,然后使用dd将其放入.img(以下来自在线教程):
(按以下顺序执行这些命令的 bat 文件)
1. nasm -f bin -o bootloader.bin bootloader.asm
2. dd if=bootloader.bin of=output.img count=1440
然后我只运行读取 output.img 并正确显示它的 Oracle VM。耶。
现在。我已经用 Visual c++编码了好几年了,我通常在单个解决方案中使用许多文件。我觉得在asm编码的时候,我应该也可以有多个文件。所以我已经阅读了很多人使用'ld' - 一个将 .obj 文件“连接”到 .bin 文件的链接器?
所以我将上面的bat文件编辑为以下内容:
1a. nasm -f bin -o bootloader.bin bootloader.asm
1b. nasm -f bin -o kernel.bin kernel.asm
2. ld -o link.bin bootloader.obj kernel.obj
3. dd if=link.bin of=output.img count=1440
我得到的第一个错误是:“无法对非 PE 输出文件执行 PE 操作”。在我用谷歌搜索..和谷歌搜索......和谷歌搜索......和谷歌搜索......(一个链接到下一个)之后,我找不到任何其他有效的方法 - 我只是遇到了更多错误!我真的迷路了。- 我尝试了几个不同的程序(例如 objcopy)、许多不同的参数等。但我没有取得太大进展。我需要指导。:)
这是我最后的问题。将这些文件与ld一起“链接”会给我想要的结果吗?(一个最终二进制文件中的多个文件)以及如何在我的Windows 系统上正确执行此操作?
我对 asm 或这些程序并不深入,所以在我来到这里之前,我已经尽可能多地阅读了。所以,如果你能保持解释清楚明了。对不起,如果它有很多要求,请不要烧烤。:)
谢谢!