如何从目标文件生成纯二进制文件?

Pra*_*hal 5 c gcc binaryfiles ld

我应该如何从两个对象(.o)文件生成原始二进制文件?

我想要nasm -f bin在编译.asm文件时生成的纯二进制格式,但是对于.o文件.

通过一个简单的二进制文件,我的意思是只包含的说明,而不是一些额外的信息,尽可能多的可执行文件包含了很多额外的有用信息的文件.

有关该信息,请参见http://www.nasm.us/doc/nasmdoc7.html.

PS:我想在QEMU中制作一个"普通二进制" .

Chr*_*oph 6

这带回了回忆.我确信有更好的方法可以使用链接器脚本来实现这一点,但这就是我在年轻和愚蠢的时候做到的:

# 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
Run Code Online (Sandbox Code Playgroud)

该文件kernel.c

__asm__("call _kmain");
__asm__("ret");

void kmain(void) { ... }
Run Code Online (Sandbox Code Playgroud)

有趣的部分是在汇编程序中编写加载程序.