Binary loader
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

Binary Loader PowerPoint PPT Presentation


  • 177 Views
  • Uploaded on
  • Presentation posted in: General

Binary Loader. Read executable from the filesystem Parse the binary header Copy all segments into addresses specified in the binary header text,data,bss Call binary “interpreter” to initialize the binary Jump to the entry point of dynamic linker, not executable.

Download Presentation

Binary Loader

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Binary loader

Binary Loader


What is done by binary loader

Read executable from the filesystem

Parse the binary header

Copy all segments into addresses specified in the binary header

text,data,bss

Call binary “interpreter” to initialize the binary

Jump to the entry point of dynamic linker, not executable.

What is done by binary loader?


Executable

a.out

The old and classic unix object format.

It contains text,data and bss sections plus one symbol table and one string table.

COFF

The SVR3 object format.

The header now comprises a section table

ELF

The successor to COFF

Make the support of shared library easier.

Executable


What s in the executable file

Headers

Architecture, version, entry point, index table

Object Code

Data or instructures

Relocation

Position Independent code(PIC)

Symbols

Index to the data inside object code.

Debug information

What’s in the executable file


Microsoft com format

0-0xff: PSP

0x100-xxxx

The whole .COM executable will be loaded here.

No headers, symbol table and debug information.

Microsoft .COM format


A out

Contains

a.out header

Text section

Data section

Other sections

The instruction(text) and data(data) section are seperated.

Multiple process can share the same text

A.out


Relocation

Mainly used by MMU-less system and some DLLs.

An relocation entry(fixups) contains

An address relative to the beginning of the section

Length of fixups

Index with different meaning according to

Extern: 1 if it is a external symbols

Pcrel: It is relative to the PC.

Others.

Relocation


Symbol and string table

Each entry in the symbol table represent either a function or variable in the program.

Each symbol entry hold a index to the string table.

Symbol and string table


Elf executable and linkable format

A ELF header

zero or more program tables

zero or more section tables

support dlopen,dlsym

Support real dynamic libraries

References

http://www.linuxjournal.com/article.php?sid=1059

ELF(Executable and Linkable Format)


Elf header

ELF magic

Type, machine,version

entry:start point of program

ehsize: the size of header(sizeof(struct elfhdr))

shnum: The number of sectionss.

shoff: The starting point of the section table

shentsize: The size of each section

phoff,shoff,flags

phentsize,phnum

ELF:header


Binary loader

largo% readelf -S hello.o

There are 11 section headers, starting at offset 1b8:

name type VM addr off size flag

[0] NULL 00000000 00000 00000 00 / 0 0 0 0

[1] .textPROGBITS 00000000 00040 00014 00 / 6 0 0 10

[2] .rel.textREL 00000000 00370 00010 08 / 0 9 1 4

[3] .dataPROGBITS 00000000 00054 00000 00 / 3 0 0 4

[4] .bssNOBITS 00000000 00054 00000 00 / 3 0 0 4

[5] .noteNOTE 00000000 00054 00014 00 / 0 0 0 1

[6] .rodataPROGBITS 00000000 00068 0000d 00 / 2 0 0 1

[7] .commentPROGBITS 00000000 00075 00012 00 / 0 0 0 1

[8] .shstrtabSTRTAB 00000000 00087 0004d 00 / 0 0 0 1

[9] .symtabSYMTAB 00000000 000d4 000c0 10 / 0 a a 4

[a] .strtabSTRTAB 00000000 00194 00024 00 / 0 0 0 1


Type of sections

PROGBITS: Program contents.

NOBITS: BSS

SYMTAB and DYNSYM: Symbol tables

STRTAB: A string table

REL and RELA: Relocation information. REL entries add the relocation value to the base value stored in the code or data, while RELA entries include the base value for relocation in the relocation entries themselves.

DYNAMIC and HASH: Dynamic linking information and the runtime symbol hash table.

Type of sections


Typical sections

.interp: The dynamic linker

.hash,.dynsym,.dynstr: tables used by DLL

.plt:jump tables to functions in libraries(RO)

items are point to the DLL

lazy binding(LD_BIND_NOW)

.got: The global offset table(RW)

the DLL will change the value of this section

.text,.data,.bss

Typical sections


Elf program headers

ELF:program headers

largo% readelf -l hello

Elf file is Executable

Entry point 0x8000400

There are 5 program headers, starting at offset 34:

PHDR 0x00034 0x08000034 0x000a0 0x000a0 R E

Interp 0x000d4 0x080000d4 0x00017 0x00017 R

Requesting program interpreter

[/lib/elf/ld-linux.so.1]

Load 0x00000 0x08000000 0x00515 0x00515 R E

Load 0x00518 0x08001518 0x000cc 0x000d4 RW

Dynamic 0x0054c 0x0800154c 0x00098 0x00098 RW

Shared library: [libc.so.4] 1


Plt and got

Procedure Linkage Table(PLT)

Function jump table

Global Offset Table(GOT)

Data jump table

PLT and GOT


Xip execute in place

Save memory(Especially for NOMMU system)

Fast startup time(less memory copy)

Requirements

no writable data in text segment

XIP(eXecute In Place)


Xip example

Eamples- uCLinux fs/binfmt_flat.c

Allocate the memory for

data segmenet

bss segment

stack

relocation entries

Shared Library headers

extra = MAX(bss_len + stack_len, relocs * sizeof(unsigned long));

down_write(¤t->mm->mmap_sem);

realdatastart = do_mmap(0, 0, data_len + extra +

MAX_SHARED_LIBS * sizeof(unsigned long),

PROT_READ|PROT_WRITE|PROT_EXEC, 0, 0);

up_write(¤t->mm->mmap_sem);

XIP Example


Relocation information

Global Offset Table(GOT)

Contains pointers to all global data and codes

We need to recalculate all addresses

Relocation Information

if (flags & FLAT_FLAG_GOTPIC) {

for (rp = (unsigned long *)datapos; *rp != 0xffffffff;rp++) {

unsigned long addr;

if (*rp) {

addr = calc_reloc(*rp, libinfo, id, 0);

if (addr == RELOC_FAILED)

return -ENOEXEC;

*rp = addr;

}

}

}


Header of flat binary

Text

MAGIC

version

entry

data start

data end

DATA

bss end

stack size

FLAT_FLAG_RAM

FLAT_FLAG_GOTPIC

FLAT_FLAG_GZIP

reloc start

Relocs

reloc count

flags

BSS

reserved

Stack

Header of FLAT binary

FLAT_FLAG_RAM


Relocation information cont

relocation table

This is created by elf2flt

The gcc will assume the following binary striucture

text segment

data segment

bss segment

The link script must implement this order

Relocation Information(Cont)


Xip relocation

Two memory segment

text segment: point to filesystem directly.

data,bss segment

The filesystem must put the entire binary in contiguous blocks.

Otherwise, do_mmap will copy all blocks into contiguous in the RAM.

The mmnommu/filemap.c: generic_file_mmap

XIP relocation


  • Login