GOPHERSPACE.DE - P H O X Y
gophering on sdf.org
Elf (Executable and Linking Format) merupakan file objek yang dipakai di 
linux dan sistem operasi turunan unix lainya.
3 macem elf utama yang umumnya ada di sistem2 nix:
1. ELF LSB Relocatable
2. ELF LSB Executable
3. ELF LSB shared object

Seperti yang kita ketahui bersama bahwa Dari suatu source code misal dari 
bahasa c hingga menjadi elf executable 
akan melalui 3 proses:
1. Proses Kompile
2. Proses Assemble
3. Proses Linking

ok untuk jelasnya perhatikan permainan di bawah ini:
=============
root@jasaplus:~/elf# uname -a
Linux jasaplus ********** #1 SMP ********** MSD 2011 x86_64 
root@jasaplus:~/elf# file elz.c
elz.c: ASCII C program text
============

ok kita punya suatu source code c dengan nama file elz.c, selanjutnya kita 
akan kompile menjadi kode assembler dg gcc;
================================
root@jasaplus:~/elf# gcc -S elz.c
================================

setelah kita kompile terciptalah kode2 assembly dengan nama file elz.s:
=============
root@jasaplus:~/elf# head -20 elz.s
.file "elz.c"
.section .rodata
.LC0:
.string "/usr/bin/perl"
.text
.globl jalankan
.type jalankan, @function
jalankan:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
pushq %rbx
subq $712, %rsp
movl %edi, -708(%rbp)
movq $0, -416(%rbp)
leaq -408(%rbp), %rbx
===================

Selanjutnya kita akan melakukan assemble dari kode asm di atas menjadi 
suatu file elf lsb relocatable
==================
root@jasaplus:~/elf# as elz.s -o elz.o
root@jasaplus:~/elf# file elz.o
elz.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
=================

kita bisa lihat terciptalah suatu objek elf lsb relocatable setelah kita 
lakukan assemble dengan as.

nah file elf lsb relocatable yang tercipta di atas merupakan suaru objek 
elf yang isinya kode dan data
yang siap dilinking dengan objek file lainya untuk kemudian siap menjadi 
suatu elf lsb executable atau 
elf lsb shared object.
Proses terakhir adalah linking:
=============
root@jasaplus:~/elf# gcc -o elz elz.o
root@jasaplus:~/elf# file elz 
elz: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically 
linked (uses shared libs), not stripped
============

setelah dilinking terciptalah suatu elf lsb executable !

untuk mengetahui shared2 object yang dilinking bisa kita cek dg ldd:
==========
root@jasaplus:~/elf# ldd elz
linux-vdso.so.1 =>  (0x00007fff583fd000)
libc.so.6 => /lib64/libc.so.6 (0x00002b49a6d58000)
/lib64/ld-linux-x86-64.so.2 (0x00002b49a6b35000)
============