diff options
author | norly <ny-git@enpas.org> | 2013-05-24 07:23:41 +0100 |
---|---|---|
committer | norly <ny-git@enpas.org> | 2013-05-24 07:23:41 +0100 |
commit | 264965b9323f90f1a834fb2d80c362aa91fbb5e5 (patch) | |
tree | 09fbfa898d674060970f5658b0c93b9a502d1693 /src/model/clone.c | |
parent | b7ab2674931f1bb9a7e6da594f587ae84c293238 (diff) |
Object file injection, first part
Diffstat (limited to 'src/model/clone.c')
-rw-r--r-- | src/model/clone.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/model/clone.c b/src/model/clone.c new file mode 100644 index 0000000..3dbbc54 --- /dev/null +++ b/src/model/clone.c @@ -0,0 +1,35 @@ +#include <assert.h> +#include <stdlib.h> +#include <string.h> +#include <libelfu/libelfu.h> + +ElfuScn* elfu_mCloneScn(ElfuScn *ms) +{ + ElfuScn *newscn; + + assert(ms); + + newscn = malloc(sizeof(ElfuScn)); + if (!newscn) { + ELFU_WARN("elfu_nCloneScn: Could not allocate memory for new ElfuScn.\n"); + return NULL; + } + + + + newscn->shdr = ms->shdr; + newscn->data = ms->data; + if (ms->data.d_buf) { + void *newbuf = malloc(ms->data.d_size); + if (!newbuf) { + ELFU_WARN("elfu_nCloneScn: Could not allocate memory for new data buffer.\n"); + free(newscn); + return NULL; + } + + memcpy(newbuf, ms->data.d_buf, ms->data.d_size); + newscn->data.d_buf = newbuf; + } + + return newscn; +} |