objcopy -o binary

1. 这里所谓的“二进制”,英文称为raw binary。这种程序只包含机器码。而ELF程序还包含有其它额外的信息,如段的加载地址,运行地址,重定位表,符号表。
2. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
    FILE *fp = fopen("vmlinux.bin", "rb");
    fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
    ((void (*)(void))VMLINUX_START)();
但是执行ELF程序则需要一个ELF Loader。
Linux内核启动的时候往往是没有ELF Loader的,所以,只能采用raw binary格式。

你可能感兴趣的:(android)