#include #include #include #include void elfu_copyEhdr(Elf *eo, Elf *ei); void elfu_copySections(Elf *eo, Elf *ei); void elfu_copySegments1(Elf *eo, Elf *ei); void elfu_copySegments2(Elf *eo, Elf *ei); void elfu_copyElf(Elf *eo, Elf *ei) { elfu_copyEhdr(eo, ei); elfu_copySections(eo, ei); elfu_copySegments1(eo, ei); /* Calculate file structure so we have section offsets */ if (elf_update(eo, ELF_C_NULL) < 0) { fprintf(stderr, "elf_update(NULL) failed: %s\n", elf_errmsg(-1)); } /* Update the segment offsets and lengths */ elfu_copySegments2(eo, ei); elfu_fixupPhdrSelfRef(eo); }