ltrace
Last updated
Last updated
adalah alat di Linux yang digunakan untuk memantau interaksi program dengan shared library, yaitu melihat fungsi-fungsi library yang dipanggil program saat dijalankan.
Di Linux, shared library (yang dikenal sebagai dynamic library atau shared object) umumnya berekstensi .so
. Ketika sebuah library didekompilasi, biasanya hasilnya berupa pseudocode dalam format bahasa C. Hal ini terjadi karena decompiler mengubah kode mesin (assembly) yang kompleks menjadi pseudocode yang lebih mudah dipahami. Bahasa C dipilih karena strukturnya yang sederhana dan kedekatannya dengan kode assembly.
Sebelumnya dijelaskan bahwa ltrace
hanya memantau interaksi program dengan dynamic library. Jika ada dynamic library, maka ada static library. Apa perbedaannya?
Dynamic library adalah kode yang disimpan pada file terpisah (misalnya, file dengan ekstensi .so
) dan dimuat saat program utama dijalankan (runtime).
Berikut adalah karakteristik dari dynamic library:
Program utama hanya memanggil fungsi dari dynamic library, tidak menyimpan kode dari fungsi tersebut.
Fungsi pada library dapat diperbarui atau diganti tanpa perlu mengkompilasi ulang program utama.
Contoh dynamic library bawaan Linux:
ibc.so.6: Standar library untuk fungsi dasar bahasa C (misalnya, printf
, scanf
).
libm.so.6: Library matematika (misalnya, fungsi sin
, cos
, sqrt
).
Bisa juga berupa library custom buatan sendiri.
Dari penjelasan ini seharusnya kita sudah semakin paham fungsi ltrace
, yaitu memantau fungsi yang dipanggil oleh sebuah program ketika dijalankan.
Kita coba membuat program "Hello World" sederhana menggunakan bahasa C.
Kompilasi kode program tersebut, kemudian jalankan program menggunakan ltrace
:
Terlihat bahwa ketika program memanggil fungsi printf
, maka pemanggilan fungsi tersebut akan terlihat beserta parameter yang digunakan.
Kita coba membuat custom library yang berisi fungsi custom_func()
.
Kompilasi kode menjadi shared library (.so
):
Buat program utama yang menggunakan library custom.
Kompilasi program utama dengan me-link library custom.
Jalankan program dengan ltrace
:
Terlihat bahwa pemanggilan fungsi dari library custom custom_func()
berhasil terdeteksi oleh ltrace
.
Static library adalah kode yang disertakan langsung ke dalam file executable saat program dikompilasi, sehingga tidak ada pemanggilan fungsi dari file library terpisah saat program utama dijalankan (runtime).
Berikut adalah karakteristik dari static library:
Kode library menjadi bagian dari executable sehingga ukurannya lebih besar.
Tidak ada file library terpisah saat program dijalankan.
Fungsi pada library tidak bisa diperbarui secara terpisah dari executable.
Dari penjelasan ini, kita bisa mengetahui bahwa ltrace
tidak dapat memantau pemanggilan fungsi dari static library karena kode yang dieksekusi sudah melebur ke dalam executable.
Untuk membuat static library, kita akan membuat custom library dan mengintegrasikannya ke dalam program utama.
Untuk melakukannya, pertama-tama buat file custom library:
Jalankan perintah berikut untuk mengkompilasi dan menghasilkan file objek:
Buat static library (.a
) dengan menggunakan perintah ar
:
Buat file program utama:
Kompilasi program utama dengan static library:
Jalankan program dengan ltrace
:
Karena library sudah dimasukkan langsung ke dalam executable (sebagai static library), ltrace
tidak akan menampilkan pemanggilan fungsi dari libcustom.a
.