我应该如何从两个目标(.o)文件生成原始二进制文件?
我需要nasm -f bin
编译.asm文件时产生的纯二进制格式,但要使用.o文件。
用普通的二进制文件表示我的文件仅包含指令,而不包含一些额外的信息,因为许多可执行文件都包含许多额外的有用信息。
有关此信息,请参见http://www.nasm.us/doc/nasmdoc7.html。
PS:我想制作一个“普通二进制文件”以在QEMU中启动。
这带回了回忆。我敢肯定有一种更好的方法可以通过链接描述文件来做到这一点,但是这是我年轻愚蠢的时候做的:
# compile some files
gcc -c -nostdlib -nostartfiles -nodefaultlibs -fno-builtin kernel.c -o kernel.o
gcc -c -nostdlib -nostartfiles -nodefaultlibs -fno-builtin io.c -o io.o
# link files and place code at known address so we can jump there from asm
ld -Ttext 0x100000 kernel.o io.o -o kernel.out
# get a flat binary
objcopy -S -O binary kernel.out kernel.bin
文件kernel.c
开始于
__asm__("call _kmain");
__asm__("ret");
void kmain(void) { ... }
有趣的部分是用汇编器编写加载程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句