【问题标题】:Including a separate binary into an ELF executable将单独的二进制文件包含到 ELF 可执行文件中
【发布时间】:2016-02-08 09:05:58
【问题描述】:

我正在开发一个操作系统。我想在我的主内核elf 中包含一个小的asm 程序,它可以作为第一个加载的进程。我无法让这个工作。程序是initcode.s。我使用了以下Makefile,我为此任务从 xv6 操作系统源修改:

initcode:
    $(AS) $(ASFLAGS) initcode.s -o initcode.o
    ld $(LDFLAGS) -N -e start -Ttext 0 -o initcode initcode.o
    objcopy --input binary --output elf32-i386 --binary-architecture i386 initcode.out initcode


kernel.elf: $(OBJECTS) initcode
    ld -T link.ld -melf_i386 $(OBJECTS) -o kernel.elf initcode

内核编译和链接正常。 objcopy 还创建标记,使我能够从内核代码中找到二进制文件。但是initcode 的内容被丢弃了。内容与initcode.out 中生成的汇编步骤不同。

如何实现将initcode.s 作为一个单独的二进制文件包含在我的主kernel.elf 中的某个位置,并生成一些标记,以便我可以从我的内核中找到它?有什么建议吗?

【问题讨论】:

    标签: makefile linker osdev objcopy


    【解决方案1】:

    我能想到两种简单的方法。如果您愿意,当然还有更复杂的方法。

    1. 编写一个小实用程序,将 initcode 二进制文件转换为包含 GAS 数据部分的 asm 文件(甚至是 C 文件)。然后组装该文件并将其与您的内核链接。然后,您的 initcode 将作为变量出现在您的内核中。

    1. 在链接步骤之后,只需将 initcode 二进制文件“cat”到内核精灵的末尾即可。这个方法取决于你的加载器是否愿意支持这个。

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 2013-08-26
      • 2015-07-20
      • 2018-06-29
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多