Bagaimana file eksekusi biner disusun? Mari telusuri!
- File eksekusi bukanlah sesuatu yang tak bisa dipahami, melainkan format file yang teratur.
- Di Linux, kita membahas biner ELF dan menggunakan bahasa C, tetapi bahasa hasil kompilasi lain juga bisa.
- Mempelajari simbol(symbol), section, dan segmen(segment).
- Simbol mirip dengan nama fungsi, disusun dalam section, dan section membentuk segmen.
- Menggunakan alat
readelfuntuk menelitinya.
Langkah 1: Buka dengan editor teks!
- Ini adalah cara paling sederhana untuk melihat biner, dan Anda bisa menemukan teks "Penguin!" dan "ELF".
Langkah 2: Lihat tabel simbol dengan readelf
- Anda dapat melihat simbol dengan
readelf --symbols. - Anda bisa menemukan simbol seperti
main,puts, dan_start. - Program dimulai dari
_start, bukanmain.
Simbol
- Saat menulis program, simbol untuk fungsi akan dibuat.
- Ketika memanggil fungsi dari library, simbol diperlukan untuk menemukan kode fungsi tersebut.
- Proses linking dilakukan melalui static linking dan dynamic linking.
Langkah 3: Lihat biner dengan objdump dan pelajari section!
objdumpmenyediakan cara yang lebih baik untuk melihat biner.- Anda bisa melihat section seperti
.text,.rodata, dan.interp. - Section digunakan saat waktu linking, sedangkan segmen digunakan saat runtime.
Langkah 4: Lihat assembly!
- Section
.textberisi kode assembly. - Anda dapat melihat kode assembly dengan
objdump -d.
Langkah 5: Lihat segmen!
- Program terdiri dari segmen atau program header.
- Anda dapat melihat segmen dengan
readelf --segments. - Segmen menentukan bagaimana bagian-bagian berbeda dari program dipisahkan di memori.
Bukan sihir!
- File eksekusi bukan sihir, dan ELF sama seperti format file lainnya.
- Anda dapat menyelidiki biner Linux dengan
readelf,nm, danobjdump.
Pendapat GN⁺
- Tulisan ini sangat bermanfaat bagi insinyur perangkat lunak pemula untuk memahami struktur file eksekusi biner.
- Artikel ini memberikan informasi praktis tentang konsep simbol, section, segmen, dan alat untuk memeriksanya (
readelf,objdump). - Isinya membantu membangun pemahaman dasar tentang bagaimana program benar-benar dimuat ke memori dan dijalankan, sehingga dapat membangkitkan minat pada pemrograman sistem.
1 komentar
Komentar Hacker News
Seorang pengguna merekomendasikan untuk mencoba menulis ELF (Executable and Linkable Format) secara langsung, karena ini sangat membantu untuk memahami bagian-bagian dasar dari file executable. Ia juga mengatakan bahwa tulisan ini berguna bagi mereka yang menginginkan pendekatan top-down, bukan pendekatan bottom-up yang sudah umum.
Pengguna lain menjelaskan bahwa meskipun kita mungkin mengira program mulai berjalan dari
main, kenyataannya ia dimulai dari_start._startmelakukan sejumlah tugas penting, termasuk memanggilmain, dan ini bukan sesuatu yang khusus untuk bahasa C, melainkan titik masuk biner yang tidak bergantung pada bahasa.Seorang pengguna menyebut artikel Julia selalu luar biasa, dan mengatakan bahwa ia mendapat hasil yang baik saat mengajarkan kepada orang-orang bahwa kode yang sudah dikompilasi tidak menyimpan rahasia, dengan mendemonstrasikan perintah
strings.Seorang pengguna mengatakan bahwa ia pertama kali mempelajari topik ini ketika mengalihkan karier akademiknya dari matematika ke ilmu komputer, dan ia tidak pernah menyesali pendalaman tersebut. Julia juga memiliki latar belakang matematika, dan ia merasa dorongan untuk melakukan penalaran top-down seperti ini mungkin telah membawa para matematikawan ke eksperimen semacam ini.
Seorang pengguna membagikan pengalamannya yang menunjukkan bahwa file executable bersifat spesifik terhadap platform, sambil membuktikan bahwa “file executable yang benar-benar portabel” dapat berjalan di berbagai platform. Ini berarti solusi untuk masalah lintas platform—yang telah lama coba diatasi melalui Java, library lintas platform, dan berbagai cara lain—sebenarnya sudah lama ada di depan mata kita.
Seorang pengguna mengatakan bahwa pada awal 1990-an ia terpikat oleh format file executable dan menulis penampil file executable DOS dan Windows dalam Modula 2. Program ini dirilis sebagai shareware pada 1991 dengan nama VEXE, mendapatkan pengikut tersendiri di kalangan cracker, dan bahkan disebut dalam tutorial +ORC.
Seorang pengguna mengatakan bahwa mencetak file biner ke terminal adalah sumber kesedihan, dan lebih memilih menggunakan
hexdump -Csebagai gantinya.Beberapa pengguna menyebut ini sebagai thread yang sangat bagus tentang topik tersebut.
Seorang pengguna merekomendasikan kepada mereka yang tertarik pada topik ini untuk membaca Cosmopolitan dan RedBean, serta "αcτµαlly pδrταblε εxεcµταblε (2020)".