diff --git a/web/htdocs/c18.htm b/web/htdocs/c18.htm deleted file mode 100644 index 5440346..0000000 --- a/web/htdocs/c18.htm +++ /dev/null @@ -1,250 +0,0 @@ -Getting Started With ELFIO
ELFIO: Tutorial
PrevNext

Chapter 1. Getting Started With ELFIO

Table of Contents
Initialization
ELF File Sections
Section Readers
Finalization
- -

Initialization

-

The ELFIO library consists of two independent parts: ELF File Reader - (IELFI) - and ELF Producer (IELFO). - Each is represented by its own set of interfaces. - The library does not contain any classes that need to be explicitly - instantiated. ELFIO itself provides the interfaces that - are used to access the library's functionality. -

-

To make the program recognize all ELFIO interface classes, the ELFIO.h - header file is needed. This header file defines all - standard definitions from the TIS documentation. -

    #include <ELFIO.h>
-

-

This chapter will explain how to work with the reader component - of the ELFIO library. The first step is to get a pointer - onto the ELF File Reader: -

    IELFI* pReader;
-    ELFIO::GetInstance()->CreateELFI( &pReader );
-

-

Now, that there is a pointer on the IELFI - interface: initialize the object by loading the ELF file: -

    char* filename = "file.o";
-    pReader->Load( filename );
-

-

From here, there is access to the ELF header. This makes it possible to request file - parameters such as encoding, machine type, entry point, etc. - To get the encoding of the file use: -

    unsigned char encoding = pReader->GetEncoding();
-

-

Please note: standard types and constants from the TIS document are defined - in the ELFTypes.h header file. This file is included automatically into the - project. For example: ELFDATA2LSB and ELFDATA2MSB constants - define a value for little and big endian encoding. -

-
- - - - - - -

PrevHomeNext
Introduction ELF File Sections
diff --git a/web/htdocs/c63.htm b/web/htdocs/c63.htm deleted file mode 100644 index c62ba03..0000000 --- a/web/htdocs/c63.htm +++ /dev/null @@ -1,146 +0,0 @@ -ELFDump Utility
ELFIO: Tutorial
PrevNext

Chapter 2. ELFDump Utility

-

The source code for the ELF Dumping Utility can be found in the "Examples" - directory; included there are more examples on how to use different ELFIO - reader interfaces. -

-

PrevHomeNext
Finalization IELFO - ELF File Producer Interface
diff --git a/web/htdocs/c66.htm b/web/htdocs/c66.htm deleted file mode 100644 index 979279e..0000000 --- a/web/htdocs/c66.htm +++ /dev/null @@ -1,264 +0,0 @@ - IELFO - ELF File Producer Interface -
ELFIO: Tutorial
Prev 

Chapter 3. IELFO - ELF File Producer Interface -

-

The ELFIO library can help you build a very short ELF executable file. - This chapter shows how to build an executable file that will run on - x86 Linux machines and print "Hello World!" on your console. -

-

Just as with the reader, the first step is to get - a pointer onto the ELF File Writer (Producer): -

    IELFO* pELFO;
-    ELFIO::GetInstance()->CreateELFO( &pELFO );
-

-

Before continuing, the library must be informed about the main - attributes of the executable file to be built. To do this, declare - that the executable ELF file will run on a 32 bit x86 machine; has little - endian encoding and uses the current version of the ELF file format: -

    // You can't proceed without this function call!
-    pELFO->SetAttr( ELFCLASS32, ELFDATA2LSB, EV_CURRENT,
-                    ET_EXEC, EM_386, EV_CURRENT, 0 );
-

-

Some sections of an ELF executable file should reside in the program - segments. To create this loadable segment call the - AddSegment() function. -

    // Create a loadable segment
-    IELFOSegment* pSegment = pELFO->AddSegment( PT_LOAD,
-                                                0x08040000,
-                                                0x08040000,
-                                                PF_X | PF_R,
-                                                0x1000 );
-

-

The following segment serves as a placeholder for our code section. To create - this code section call the AddSection() function: -

    // Create code section
-    IELFOSection* pTextSec = pELFO->AddSection( ".text",
-                                   SHT_PROGBITS,
-                                   SHF_ALLOC | SHF_EXECINSTR,
-                                   0,
-                                   0x10,
-                                   0 );
-

-

Then, add the executable code for the section: -

    char text[] =
-    { '\xB8', '\x04', '\x00', '\x00', '\x00',   // mov eax, 4
-      '\xBB', '\x01', '\x00', '\x00', '\x00',   // mov ebx, 1
-      '\xB9', '\xFD', '\x00', '\x04', '\x08',   // mov ecx, msg
-      '\xBA', '\x0E', '\x00', '\x00', '\x00',   // mov edx, 14
-      '\xCD', '\x80',                           // int 0x80
-      '\xB8', '\x01', '\x00', '\x00', '\x00',   // mov eax, 1
-      '\xCD', '\x80',                           // int 0x80
-      '\x48', '\x65', '\x6C', '\x6C', '\x6F',   // db 'Hello'
-      '\x2C', '\x20', '\x57', '\x6F', '\x72',   // db ', Wor'
-      '\x6C', '\x64', '\x21', '\x0A'            // db 'ld!', 10
-    };
-    pTextSec->SetData( text, sizeof( text ) );
-

-

Next, this code section is put into the loadable segment: -

    // Add code section into program segment
-    pSegment->AddSection( pTextSec );
-    pTextSec->Release();
-    pSegment->Release();
-

-

Finally, define the start address of the program - and create the result file: -

    // Set program entry point
-    pELFO->SetEntry( 0x08040000 );
-    // Create ELF file
-    pELFO->Save( "test.elf" );
-    pELFO->Release();
-

-

Please note: Call the Release() functions - for each interface you have used. - This will free all resources the ELFIO library has created. -

-

Now compile the program and run it. The result is a new ELF file - called "test.elf". The size of this working executable file is only - 267 bytes! Run it on your Linux machine with the following commands: -

    [Writer]$ ./Writer
-    [Writer]$ chmod +x test.elf
-    [Writer]$ ./test.elf
-    Hello, World!
-

-

The full text for this program can be found in the "Writer" directory. - Also, in the "Examples" directory, two other programs "WriteObj" - and "WriteObj2" demonstrate the creation of ELF object files. -

-

PrevHome 
ELFDump Utility  
diff --git a/web/htdocs/f14.htm b/web/htdocs/f14.htm deleted file mode 100644 index 6af8bfe..0000000 --- a/web/htdocs/f14.htm +++ /dev/null @@ -1,151 +0,0 @@ -Introduction
ELFIO: Tutorial
PrevNext

Introduction

-

ELFIO is a C++ library for reading and generating files - in the ELF binary format. This library is unique and not based on - any other product. It is also platform independent. - The library uses standard ANSI C++ constructions and - runs on a wide variety of architectures. -

-

While the library's implementation does make your work easier: - a basic knowledge of the ELF binary format is required. Information about ELF - is included in the TIS (Tool Interface Standards) documentation you received - with the library's source code. -

-

PrevHomeNext
ELFIO Getting Started With ELFIO
diff --git a/web/htdocs/index.htm b/web/htdocs/index.htm deleted file mode 100644 index 337061c..0000000 --- a/web/htdocs/index.htm +++ /dev/null @@ -1,165 +0,0 @@ -ELFIO
-
SourceForge Logo
-

ELFIO

Tutorial

Allan Finch

-

Serge Lamikhov-Center

-
Table of Contents
Introduction
1. Getting Started With ELFIO
Initialization
ELF File Sections
Section Readers
Finalization
2. ELFDump Utility
3. IELFO - ELF File Producer Interface
- - - - -

  Next
  Introduction
diff --git a/web/htdocs/x35.htm b/web/htdocs/x35.htm deleted file mode 100644 index 9dd840a..0000000 --- a/web/htdocs/x35.htm +++ /dev/null @@ -1,187 +0,0 @@ -ELF File Sections
ELFIO: Tutorial
PrevChapter 1. Getting Started With ELFIONext

ELF File Sections

-

ELF binary files consist of several sections. Each section has it's own - responsibility: some contain executable code; others describe program dependencies; - others symbol tables and so on. See the TIS documentation for a full description of each section. -

-

To see how many sections the ELF file contains, including their - names and sizes, is demonstated in the following code: -

    int nSecNo = pReader->GetSectionsNum();
-    for ( int i = 0; i < nSecNo; ++i ) {    // For all sections
-        const IELFISection* pSec = pReader->GetSection( i );
-        std::cout << pSec->GetName() << '' ''
-                  << pSec->GetSize() << std::endl;
-        pSec->Release();
-    }
-

-

First, the number of sections are received; next, a pointer - on the IELFISection interface. Using this interface, - access is gained to the different section attributes: size, type, flags and address. - To get a buffer that contains the section's bytes use the - GetData() member function of this interface. - See the IELFISection declaration for a full - description of the IELFISection interface. -

-

PrevHomeNext
Getting Started With ELFIOUpSection Readers
diff --git a/web/htdocs/x45.htm b/web/htdocs/x45.htm deleted file mode 100644 index 22eba0a..0000000 --- a/web/htdocs/x45.htm +++ /dev/null @@ -1,214 +0,0 @@ -Section Readers
ELFIO: Tutorial
PrevChapter 1. Getting Started With ELFIONext

Section Readers

-

After the section data is received through the GetData() - function call, the data can be manipulated. - There are special sections - that provide information in predefined forms. The ELFIO library - processes these sections. The library provides a set of - section readers that understand these predefined formats and how to process their data. - The ELFIO.h header file currently defines the types of readers as: -

    enum ReaderType {
-        ELFI_STRING,     // Strings reader
-        ELFI_SYMBOL,     // Symbol table reader
-        ELFI_RELOCATION, // Relocation table reader
-        ELFI_NOTE,       // Notes reader
-        ELFI_DYNAMIC,    // Dynamic section reader
-        ELFI_HASH        // Hash
-    };
-

-

How to use the symbol table reader will be demonstated in the following example: -

-

First, get the symbol section: -

    const IELFISection* pSec = pReader->GetSection( ''.symtab'' );
-

-

Second, create a symbol section reader: -

    IELFISymbolTable* pSymTbl = 0;
-    pReader->CreateSectionReader( IELFI::ELFI_SYMBOL,
-                                  pSec,
-                                  (void**)&pSymTbl );
-

-

And finally, use the section reader to process all entries - (print operations are omitted): -

    std::string   name;
-    Elf32_Addr    value;
-    Elf32_Word    size;
-    unsigned char bind;
-    unsigned char type;
-    Elf32_Half    section;
-    int nSymNo = pSymTbl->GetSymbolNum();
-    if ( 0 < nSymNo ) {
-        for ( int i = 0; i < nSymNo; ++i ) {
-            pSymTbl->GetSymbol( i, name, value, size,
-                                bind, type, section );
-        }
-    }
-    pSymTbl->Release();
-    pSec->Release();
-

-

PrevHomeNext
ELF File SectionsUpFinalization
diff --git a/web/htdocs/x57.htm b/web/htdocs/x57.htm deleted file mode 100644 index b7cc6df..0000000 --- a/web/htdocs/x57.htm +++ /dev/null @@ -1,163 +0,0 @@ -Finalization
ELFIO: Tutorial
PrevChapter 1. Getting Started With ELFIONext

Finalization

-

All interfaces from the ELFIO library should be freed after - use. Each interface has a Release() function. - It is not enough to only free the high level interface because - one of the sections or readers will still be held and its resources will not be cleared. -

-

The interfaces are freed immediately after their use, in this - example we will free only the pReader object: -

    pReader->Release();
-

-

PrevHomeNext
Section ReadersUpELFDump Utility