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)
============