Main Page   Modules   Data Structures   File List   Data Fields   Examples  

new.c

Generates a new ELF binary with a few different types of sections.

#include <stdlib.h>
#include <stdio.h>

#include "melf.h"

int main(int argc, char **argv)
{
        ELF_SPEC_HEADER *curr;
        MELF *melf = melf_new();

        if (!melf)
                return 0;

        fprintf(stdout, "creating new elf img called 'blank'...\n");

        melf_elfSetType(melf, ET_EXEC);
        melf_elfSetMachine(melf, EM_386);

        if ((curr = melf_sectionAdd(melf)))
        {
                melf_sectionSetName(melf, curr, "test-section");
                melf_sectionSetType(melf, curr, SHT_NOBITS);
        }
        
        if ((curr = melf_sectionAdd(melf)))
        {
                melf_sectionSetName(melf, curr, "bobby");
                melf_sectionSetType(melf, curr, SHT_NOBITS);
        }

        // Add a dynamic section
        
        if ((curr = melf_dynamicCreate(melf)))
        {
                ELF_SPEC_HEADER *dynstr = melf_sectionGetStringTableHeader(melf, curr);
                unsigned long index = 0;

                // Add DT_NEEDED for libc.
                if (dynstr)
                        index = melf_stringTableSetString(melf, dynstr, "/lib/libc.so.6");

                melf_dynamicAddTag(melf, curr, DT_NEEDED, index);
        }

        // Add a note section

        if ((curr = melf_noteCreate(melf, ".note", 1)))
        {
                melf_noteAdd(melf, curr, 1, "NAZI", "JONES", 6);
                melf_noteAdd(melf, curr, 0, "NAME", "DESC", 5);
                melf_noteAdd(melf, curr, 1, "JANE", "DESCZ", 5);
        }

        // Add a symbol table
        
        if ((curr = melf_symbolTableCreate(melf, ".symtab")))
        {
                Elf32_Sym *sym = melf_symbolTableAddSymbol(melf, curr, "tester");
                sym = melf_symbolTableAddSymbol(melf, curr, "shutup");

                melf_symbolSetType(melf, curr, sym, STT_OBJECT);
                melf_symbolSetBinding(melf, curr, sym, STB_GLOBAL);
        }

        melf_save(melf, "blank");

        melf_destroy(melf);

        return 1;
}

Generated on Tue Jun 3 00:01:35 2003 for libmelf by doxygen1.3-rc3