Anda di halaman 1dari 9

Pengenalan Objdump dan GDB EL2010/Organisasi dan Arsitektur Komputer

Objdump dan GDB EL2010/Organisasi dan Arsitektur Komputer Dipersiapkan oleh: Iskandar Setiadi / 13511073 Sekolah

Dipersiapkan oleh:

Iskandar Setiadi / 13511073

Sekolah Teknik Elektro dan Informatika - Institut Teknologi Bandung Jl. Ganesha 10, Bandung 40132

- Institut Teknologi Bandung Jl. Ganesha 10, Bandung 40132 Sekolah Teknik Elektro dan Informatika ITB Nomor

Sekolah Teknik Elektro dan Informatika ITB

Nomor Dokumen

Halaman

EL2010 - Orkom

1 / 9

Revisi

0

Maret 2013

Pengenalan Objdump dan GDB

I. Pengenalan Objdump

Objdump, atau dikenal sebagai Object Dump, merupakan sebuah tool debugging yang mencetak berbagai informasi tentang suatu file ke layar. Secara singkat, syntax yang digunakan untuk menjalankan perkakas ini adalah:

$ objdump <option> <file>

Pada

Operating

System

FreeBSD,

/bin/bash

tersimpan

dalam

direktori

/usr/local/bin/bash, sehingga kita dapat menggunakan syntax berikut pada terminal:

objdump x /usr/local/bin/bash

berikut pada terminal: objdump – x /usr/local/bin/bash Gambar I-1 Penggunaan Objdump pada /bin/bash dengan OS

Gambar I-1 Penggunaan Objdump pada /bin/bash dengan OS FreeBSD

Syntax x digunakan untuk menampilkan semua object yang tersimpan dalam bash pada operating system berbasis UNIX, dalam kasus ini FreeBSD. Berikut ini adalah hasil lengkap dari operasi command tersebut:

STEI- ITB

EL2010-

Orkom

Halaman 2 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.
Gambar I-2 Dynamic Section dari Objek /bin/bash Gambar I-3 Section dari Objek /bin/bash Selain itu,

Gambar I-2 Dynamic Section dari Objek /bin/bash

Gambar I-2 Dynamic Section dari Objek /bin/bash Gambar I-3 Section dari Objek /bin/bash Selain itu, kita

Gambar I-3 Section dari Objek /bin/bash Selain itu, kita dapat memecah file objek hasil kompilasi menjadi bahasa assembly dengan syntax:

$ objdump S /usr/local/bin/bash

STEI- ITB

EL2010-

Orkom

Halaman 3 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

Hasil dari operasi tersebut dapat dilihat seperti screenshot dibawah ini:

tersebut dapat dilihat seperti screenshot dibawah ini: Gambar I-4 Bahasa Assembly dari file objek /bin/bash Gambar

Gambar I-4 Bahasa Assembly dari file objek /bin/bash

Gambar I-1 merepresentasikan program header dari bash yang kita debug menggunakan Objdump. Cara lain untuk mendapatkan hanya header file dari suatu file objek adalah menggunakan syntax $ objdump f file.

Header file terbagi atas beberapa bagian. Pada baris pertama, kita dapat melihat mesin yang digunakan yaitu i386-freeBSD. Selain itu, ditampilkan pula flags dari representasi memori library yang digunakan (libbdfd). Baris selanjutnya merepresentasikan properties yang dimiliki, seperti EXEC_P yang merupakan executable. Sedangkan start address merupakan alamat awal penyimpanan dalam memori.

STEI- ITB

EL2010-

Orkom

Halaman 4 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

Dynamic Sections merepresentasikan kebergantungan jalannya executable bash ini dengan library luar. Flags yang terdapat pada bagian sections adalah sebagai berikut:

- LOAD yang artinya isinya dapat diakses dari file yang disimpan dalam memori ketika proses diciptakan

- CODE yang artinya bagian tersebut memiliki executable code

- DATA yang artinya bagian tersebut bukan executable (tidak dapat dieksekusi) namun dapat ditulis (writable)

- READONLY yang artinya bagian tersebut hanya dapat diakses (tidak dapat diubah isinya)

- ALLOC yang artinya bagian tersebut mengambil bagian dalam memori selama proses eksekusi berlangsung

STEI- ITB

EL2010-

Orkom

Halaman 5 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

II. Pengenalan GDB

GDB merupakan sebuah debugger yang berfungsi untuk melakukan proses debugging pada file executable sesuai dengan keinginan pengguna. GDB merupakan sebuah perkakas yang sangat handal karena kita dapat mengecek pemrosesan yang terjadi di memori setiap waktunya. GDB dapat digunakan untuk melacak setiap eksekusi yang dilakukan dalam lingkup variabel, register, maupun memori yang digunakan. Pada studi kasus kali ini, kita akan melakukan pengecekan terhadap file executable yang telah disiapkan sebelumnya. Dengan asumsi bahwa g++ telah ter- install, kita cukup menggunakan perintah berikut pada terminal:

g++ o test Soal%20GDB.cpp

Maka akan terbentuk suatu file executable bernama test. Untuk menjalankan GDB pada OS berbasis UNIX (dalam kasus ini praktikan menggunakan FreeBSD melalui Putty), kita dapat langsung mengakses gdb dengan perintah terminal:

gdb

Karena kita akan menggunakan sebuah file executable bernama test, langkah selanjutnya yang perlu kita lakukan adalah dengan menggunakan syntax gdb <file>pada terminal:

gdb test

STEI- ITB

EL2010-

Orkom

Halaman 6 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.
Gambar II-1 Penggunaan GDB versi 6.1.1 & Breakpoint pada FreeBSD Untuk memudahkan pengamatan, kita mengatur

Gambar II-1 Penggunaan GDB versi 6.1.1 & Breakpoint pada FreeBSD

Untuk memudahkan pengamatan, kita mengatur dua buah breakpoint, yaitu bagian yang akan diberhentikan sementara selama eksekusi program berlangsung untuk dianalisis. Kedua breakpoint tersebut akan di-set pada fungsi printf, yang terdapat pada lines 12 dan lines 24 dari Gambar II-1 diatas. Kita menggunakan perintah dengan syntax break <function>pada terminal:

(gdb) break printf

Dengan menggunakan perintah run, eksekusi akan dilakukan sampai menemui breakpoint sesuai dengan posisi yang telah kita atur, baik lines maupun function name yang sesuai.

(gdb) run

Perhatikan gambar II-2 dibawah ini. Pada eksekusi lines 12, kita akan mencetak nilai dari variabel nim yang telah di acak menggunakan fungsi rand pada lines 11. Untuk melihat semua nilai yang disimpan dalam registers, kita dapat menggunakan syntax:

STEI- ITB

EL2010-

Orkom

Halaman 7 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

(gdb) info registers

(gdb) info registers Gambar II-2 Informasi Register pada lines 12 Perhatikan bahwa %eax yang menunjuk alamat

Gambar II-2 Informasi Register pada lines 12

Perhatikan bahwa %eax yang menunjuk alamat 0xce2995 memiliki value / nilai 13511061. Cara lain untuk melihat nilai yang tersimpan dalam suatu register adalah menggunakan fungsi print pada gdb. Sebagai contoh, syntax berikut akan menampilkan nilai register %eax dengan tipe desimal:

(gdb) print /d $eax

Untuk melanjutkan jalannya program, kita dapat mengetikan:

(gdb) continue

Perhatikan bahwa nilai yang tercetak sama dengan besarnya nilai yang tersimpan dalam register %eax. Dengan cara yang sama, kita akan mengecek isi dari variabel hello yang akan dicetak pada baris ke 24. Breakpoint selanjutnya dari GDB adalah pada printf yang telah dideklarasikan sebelumnya.

STEI- ITB

EL2010-

Orkom

Halaman 8 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.
Gambar II-3 Informasi Register pada lines 24 Nilai dari alamat yang ditunjuk register %eax adalah

Gambar II-3 Informasi Register pada lines 24

Nilai dari alamat yang ditunjuk register %eax adalah -1077941238. Seperti yang kita ketahui, data yang akan ditampilkan memiliki format string yang direprensentasikan dengan karakter dari array [0] sampai [9] (10 karakter). Kita dapat menggunakan syntax berikut untuk menampilkan isi register dalam bentuk string:

(gdb) x /s $eax

Hasil yang ditampilkan adalah 16 karakter yang tersimpan, yaitu someoeywws\225)f. Padahal, array hello hanya berisikan karakter dari array [0] sampai [9], sehingga yang ditampilkan ke layar adalah 10 karakter pertama yaitu someoeywws. Beberapa karakter random yang muncul dibelakang hello dikarenakan kita belum melakukan inisialisasi terhadap array tersebut.

STEI- ITB

EL2010-

Orkom

Halaman 9 dari 9 halaman

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB
Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB

Template dokumen ini dan informasi yang dimilikinya adalah milik Sekolah Teknik Elektro dan Informatika ITB dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.

dan bersifat rahasia. Dilarang me-reproduksi dokumen ini tanpa diketahui oleh Sekolah Teknik Elektro dan Informatika ITB.