我们有一个没有ELF头部的Linux内核二进制文件,我们的引导加载程序将根据来自ELF头部的计算来加载内核映像(早期的QNX内核映像具有ELF头部),但是由于我们的Linux内核映像没有ELF头部,所以我们的引导加载程序拒绝将此内核映像加载到内存。
由于某些原因,我们没有更改引导加载程序代码的选项,因此我们唯一的选择是使用特定的入口点将ELF头插入到Linux BIN文件中。
实现这一目标的方法是什么?
发布于 2013-03-09 10:29:46
objcopy命令能够使用适当的ELF头包装二进制文件。例如,以下命令会将二进制文件input.in转换为i386目标文件output.o
objcopy -I binary -O elf32-i386 --binary-architecture i386 input.bin output.o在output.o中将定义三个符号:_binary_input_bin_start、_binary_input_bin_end和_binary_input_bin_size。此外,输入文件的数据将位于.data节中。
然后,您需要使用带有链接器脚本的ld来设置适当的加载/虚拟/物理地址和入口点。以下是一个最小的脚本:
ENTRY(_start);
SECTIONS
{
_start = 0x12000;
. = 0x10000;
.data : {
*(.data)
}
}但可能需要进行大量修改,具体取决于引导加载程序的工作方式、物理内存布局、内核位置、架构等。调整后,可以按如下方式生成最终的ELF文件:
ld -m elf_i386 output.o -T binary.ld -o output.elfhttps://stackoverflow.com/questions/15291168
复制相似问题