diff options
author | norly <ny-git@enpas.org> | 2013-01-28 02:14:24 +0000 |
---|---|---|
committer | norly <ny-git@enpas.org> | 2013-02-11 01:32:32 +0000 |
commit | a78f477fc5a2327118bb129026e18ba8302ec7aa (patch) | |
tree | 11a97c329660ffe4cf77ba8f3749be1d4d388fc9 /src/copy/elf.c | |
parent | d9eb4398773cbda1dc185f4cf7b1b0e4cb9fb135 (diff) |
Initial work on copying an ELF file
Diffstat (limited to 'src/copy/elf.c')
-rw-r--r-- | src/copy/elf.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/copy/elf.c b/src/copy/elf.c new file mode 100644 index 0000000..445f98c --- /dev/null +++ b/src/copy/elf.c @@ -0,0 +1,30 @@ +#include <stdio.h> + +#include <libelf.h> +#include <gelf.h> + +#include <libelfu/libelfu.h> + + +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); +} |