#include #include #include #include void elfu_copyEhdr(Elf *eo, Elf *ei) { int elfclass; GElf_Ehdr ehdr, ehdrOut; elfclass = gelf_getclass(ei); if (elfclass == ELFCLASSNONE) { fprintf(stderr, "getclass() failed: %s\n", elf_errmsg(-1)); } if (!gelf_getehdr(ei, &ehdr)) { fprintf(stderr, "gelf_getehdr() failed: %s\n", elf_errmsg(-1)); return; } if (!gelf_newehdr(eo, elfclass)) { fprintf(stderr, "gelf_newehdr() failed: %s\n", elf_errmsg(-1)); } if (!gelf_getehdr(ei, &ehdrOut)) { fprintf(stderr, "gelf_getehdr() failed: %s\n", elf_errmsg(-1)); return; } ehdrOut.e_ident[EI_DATA] = ehdr.e_ident[EI_DATA]; ehdrOut.e_type = ehdr.e_type; ehdrOut.e_machine = ehdr.e_machine; ehdrOut.e_version = ehdr.e_version; ehdrOut.e_entry = ehdr.e_entry; // FIXME /* e_phoff */ /* e_shoff */ ehdrOut.e_flags = ehdr.e_flags; /* e_ehsize */ /* e_phentsize */ /* e_phnum */ /* e_shentsize */ /* s_shnum */ ehdrOut.e_shstrndx = ehdr.e_shstrndx; // FIXME if (!gelf_update_ehdr(eo, &ehdrOut)) { fprintf(stderr, "gelf_update_ehdr() failed: %s\n", elf_errmsg(-1)); } }