bahasa C/C++ bahasa C/C++ Muchammad Aiman islamthink@gmail.com http://islamthink.wordpress.com Kali ini kita akan membahas tentang open- source programming menggunakan bahasa pemrograman C. Ini tentunya karena Linux yang open-source sudah banyak menggunakan C untuk membangun sistemnya. Tentunya jika kita menggunakan C dalam program open kita, maka itu akan disupport penuh oleh Linux (nix! dan team de"elopernya. #ks. Index $. #"er"ie% &. 'embangun #pen-(ource )rogram *. +uild and run ,. 'embuat )acket -. )enutup .. /e0erensi $. #"er"ie% Kali ini kita akan masuk ke pembahasan yang rupanya agak penting bagi kita komunitas Linux-er dan sistem administrator. 1al ini tentunya karena kadang kita membutuhkan program untuk membantu pekerjaan sehari-hari kita sbg sistem administrator atau sekedar untuk coba-coba membuat tools kecil untuk pentest. 2ah, tentunya menggunakan bahasa C karena 3its po%er0ul3. C di Linux bagai keju dalam roti ta%ar, %e% 4o (angat support satu dengan yang lain. Lihat saja source linux di 5usr5src5... . (emuanya dibangun dengan bahasa pemrograman C. 6ah, tentunya kalau kita sudah memahami cara kerja C di LInux, kita juga bisa menggunakan source-source itu untuk kepentingan kita Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com $ Lisensi Dokumen: Copyright 200!200" IlmuKomputer.Com #eluruh dokumen di IlmuKomputer.Com dapat digunakan$ dimodi%ikasi dan dise&arkan secara &e&as untuk tu'uan &ukan komersial (nonpro%it)$ dengan syarat tidak menghapus atau meru&ah atri&ut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. *idak diper&olehkan melakukan penulisan ulang$ kecuali mendapatkan i'in terle&ih dahulu dari IlmuKomputer.Com. sendiri. 'enggunakan source orang lain untuk memperkaya program buatan kita. +ayangkan saja, banyaknya program yang dibuat untuk jalan di Linux, seperti 6map, #pen((L, binutils, 7''(, ')layer, dan koleksi program-program yang lain. (emuanya itu dibuat dengan C. 8engan sources yang sudah ada itu, kita benar- benar bisa membuat program baru yang lebih unik dan penuh 0ungsionalitas tergantung keinginan kita. 'isalnya Clama", salah satu anti"irus yang jalan di Linux-like #(. 8i dalamnya ada banyak sekali library dan sources yang bisa kita gunakan ulang pada program- program kita. (eperti source untuk compressing 0ile5direktori dan exstraksi. (ources untuk meng-inspeksi berbagai tipe 0ile seperti )89, :7:, C1', 1T'L, dan lainnya. Tentunya semua itu bisa dengan lebih mudah kita lakukan jika kita paham konsep dasa #pen(ource )rogramming, sekarang dengan Linux. &. :lemen #pen-(ource )rogram )erlu sekali kita mengetahui lingkungan dan elemen-elemen yang akan sering sekali kita temui pada programming open-source. :lemen-elemen di sini adalah poin-poin seperti (ource 0iles, Include 0iles, dan 'ake0ile. Ketiganya memiliki manajemen sendiri yang saling berhubungan sehingga program C kita terbentuk. ;;;;;;;;;;;;;;;;;;;;;; ; (ource 9iles ; ;;;;;;;;;;;;;;;;;;;;;; ; Include 9iles ; ;;;;;;;;;;;;;;;;;;;;;; ; 'ake0ile ; ;;;;;;;;;;;;;;;;;;;;;; &.$ (ource 9iles dan Include 9iles (ource program adalah 0ile-0ile sumber dimana kita menuliskan program kita di dalamnya. )erlu diketahui, (ource 9ile ((9! tidak harus ditulis semua pada satu 0ile. 6ah, inilah yang disebut me-manage source 0ile. 8engan memanage ini lah kita bisa membuat program yang layak disebut sebagai opensource. Karena orang lain yang membaca sourcenya dapat dengan mudah memahami jalannya program, dan memodi0ikasinya. <ntuk contoh arsitektur source 0ile yang lumayan baik, lihat contoh di ba%ah. 5 )rogram =irus (canner 5 =(can5 --------------------------- include5 "scan-con0.h tipe0ile.c tipe0ile.h options.c options.h readdb.c readdb.h Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com & scan.c scan.h --------------------------- "scan.c 'ake0ile (ekilas melihat arsitektur di atas, terlihat sederhana. 'enyederhanakan masalah akan mempermudah menyusun logika. +egitu katanya. )ada susunan di atas, kita mempunya 0ile source utama (main! yaitu "scan.c. Kemudian, "scan.c ini sangat tergantung (terikat! dengan 0ile-0ile lain yang dibuat pada direktori include. 9ungsi-0ungsi yang dijalankan oleh "scan.c telah dideklarasikan dan dide0inisikan pada 0ile-0ile yang ada pada direktori include, baik 0ile .c maupun 0ile .h. >pa yang perlu diperhatikan dengan 0ile .c dan .h di dalam include directory. Lihat schema di ba%ah 4 include?0ile.h ----@ menuliskan hanya prototipe-nya saja ----@ prototipe ; Atipe@ nama?0ungsi(arguments!B ----@ (;deklarasi! include?0ile.c ----@ menulis kembali prototipe 0ungsi dan kode lengkap pembentuknya ----@ (;de0inisi! <ah, belum ngantuk kanC 9ile .h hanya berisi deklarasi 0ungsi dan macro de0ine yang dibutuhkan. Lihat contoh di ba%ah untuk 0ile scan.h dan scan.h . 5 9ile scan.h akan berisi macro de0ine dan nama?0ungsi(argumen! saja 5 Dinclude E"scan-con0.hE Dde0ine /:C</(I=:?8I/:CT#/2 $FF Dde0ine 9IL:T2):?#6: Fx$ Dde0ine 9IL:T2):?TG# Fx& Dde0ine 9IL:T2):?T1/:: Fx* Dde0ine 9IL:T2):?H>+<6H>6 Fx$ I Fx& I Fx* static int scandesc(int deskriptor, const char opsi!B int scan0ile(const char nama0ile, const char opsi!B int scandir(const char namadir, int recursi"e, const char opsi!B 5 (elesai sudah untuk 0ile scan.h 5 5 9ile scan.c akan berisi program lengkap dari 0ungsi-0ungsi yang 5 5 sudah dideklarasikan sebelumnya, yaitu pada scan.h 5 Dinclude Astdio.h@ Dinclude Astdlib.h@ Dinclude Atime.h@ Dinclude Adirent.h@ Dinclude Etipe0ile.hE Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com * Dinclude Eoptions.hE 55 masuk ke 0ungsi-0ungsinya ya... static int scandesc(int deskriptor, const char opsi! J 5 0ile ini akan men-scan deskriptor dari 0ile yang sudah dibuka sebelumnya 8eskriptor biasanya bertipe integer, biasa dikasih nama desc, 0d, sock0d, dll 5 int i;F %hile (Ceo0(deskriptor!! J cari?"irus(deskriptor!B K 5 Contoh scandesc selesai 5 K int scan0ile(const char nama0ile, const char opsi! J int descB desc ; open(nama0ile, #?/8#6L2!B i0(scandesc(desc, 9IL:T2):?H>+<6H>6!! J print0(E>da "irus pada LsMnE, nama0ile!B return (-*!B 55kenapa -* N bebas, bungC K return FB K int scandir(const char namadir, int recursi"e, const char opsi! J struct dirent dirB dir ; opendir(E5etcE!B %hile(readdir(dir!! J i0( scan0ile(dir.0?name, opsi! ;; -*! J print0(E8irektori ga amanMnE!B return (--!B K K return FB K 5 6ah, selesai untuk scan.c 5 Lihat pada dua 0ile scan.h dan scan.c di atas. +agaimana hubungan antara keduanya. Coba dilihat-lihat dulu beberapa kali. 'aka anda bisa mengetahui apa bedanya sekarang. 9ile .c berisi 0ungsi lengkap yang kita inginkan untuk melakukan tugas-tugas yang diinginkan. Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com , )erlu diketahui, sebenarnya menulis program tanpa membuat 0ile .h boleh-boleh saja. 8an program pun masih bisa di-compile dan di-run. Tetapi kayaknya kurang asyik dan menyalahi standar open-source C programming Bp 'asukkan saja semuannya ke 0ile .c kemudian compile, kompilasi pun selesai tanpa error. Tapi 0ile ini akan jadi sangat panjang dan susah untuk didebug. Kecuali memang program kita sangat sangat sederhana atau kecilC >pa isi main 0ile .c , yang mana di atas kita beri nama "scan.c N 9ile "scan.c adalah 0ile utama, program yang akan kita jalankan setelah selesai di-compile. Kita akan mengkompile 0ile "scan.c dan menghasilkan 0ile program executable "scan. (ecara manual ini bisa dilakukan dengan menjalankan perintah seperti di ba%ah 4 gcc -o "scan "scan.c -Iinclude5 Kurang lebih begitu. Coba saja, pasti errorC Karena memang source kita di atas tidak lengkap dan hanya contoh saja. Tapi jika program kita lengkap, baris perintah di atas Insya >lloh berjalan normal- normal saja. Tambahan -IAdirektori@ akan memberi in0ormasi ke compiler gcc untuk mencari 0ile-0ile include pada direktori include5 . (edangkan -o akan memberikan keluaran program setelah dikompile, yaitu "scan. +ebas kok, "scan bisa diganti dengan apapun, yang harus benar adalah 0ile sourcenya, yaitu "scan.c &.& 'ake0ile 'ake0ile adalah 0ile bantuan untuk melakukan instalasi program kita. Instalasi untuk source packet kita terdiri dari 4 - Compile 4 meng-compile 0ile source - Copy (install! 4 meng-copy 0ile program ke direktori path Linux (5usr5local5bin! - /emo"e (uninstall! 4 meng-uninstall 5 menghapus 0ile program dari direktori path - Clean 4 membersihkan 0ile-0ile object dari source direktori - >ll (optional! 4 melakukan compile, copy, dan clean pada satu perintah make
6ah, kita akan membahas elemen-elemen yang berhubungan dengan 'ake0ile. 'ake0ile sudah digunakan oleh <nix dan Linux sejak lama untuk membantu instalasi program pada sistemnya. Karena program buatan kita adalah berbasis source , bukan binary, maka harus ada tahapan bernama Compile atau kompilasi. Tahap ini sama dengan baris perintah yang sudah kita tulis di atas 4 gcc -o nama?program nama?program.c -Iinclude Tidak harus seperti di atas, tetapi sepertinya itu bentuk paling sederhana. +isa saja ditambah opsi seperti untuk load library dengan opsi -lAnama?library@. +aris kompilasi ini tentunya akan Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com - kita masukkan, bersama baris-baris yang lainnya di dalam 'ake0ile. (ebenarnya untuk membuat 'ake0ile sudah ada tool-tool bantuannya. Tetapi agar lebih memahami konsep 'ake0ile, lebih baik kita menuliskannya sendiri dari a%al. Tool yang biasa digunakan untuk membuat 'ake0ile di Linux adalah automake. 8i ba%ah ini adalah contoh 'ake0ile berhubungan dengan program =(can buatan kita di atas yang ditulis menggunakan editor biasa, misalkan "im, emacs, atau editor lainnya. @@@@@@@@@@@@@@ contoh 'ake0ile I baris ini jangan ditulis lho AAAA "scan4 "scan.c tipe0ile.o options.o readdb.o scan.o AT>+@gcc -o "scan "scan.c tipe0ile.o options.o readdb.o scan.o tipe0ile.o4 AT>+@gcc -c include5tipe0ile.c options.o4 AT>+@gcc -c include5options.c readdb.o4 AT>+@gcc -c include5readdb.c scan.o4 AT>+@gcc -c include5scan.c install4 AT>+@cp "scan 5usr5local5bin uninstall4 AT>+@rm 5usr5local5bin5"scan clean4 AT>+@rm .o include5.o all4 AT>+@make install AT>+@make clean @@@@@@@@@@@@@@@@ selesai sudah 'ake0ile kita AAAAAAAAAAAAAAAAAAAAAAA (imbol AT>+@ bukan ditulis seperti adanya, melainkan adalah tabulasi yang ada di keyboard kita, di atas CapsLock. Oika baris tidak diberi AT>+@, maka proses make akan errorC (impan 0ile di atas dengan nama 'ake0ile pada direktori utama dimana terdapat main 0ile. *. +uild and /un Cara menggunakan 0ile 'ake0ile adalah dengan memanggil perintah 3make3 pada console (command prompt! dari direktori dimana padanya terdapat 0ile 'ake0ile. )ada kasus kita, kita memanggil 3make3 dari direktori =(can. Oika kita sudah membuat sourcenya dengan benar dan disimpan pada Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com . direktori utama =(can dan include juga 'ake0ile-nya, maka program open-source kita sudah selesai. <ntuk melakukan installasi seperti di ba%ah4 D make D make install D (tidak harusC! make clean atau -------- D make all Oika kita akan membuat paket program kita, gunakan tar dan bPip& untuk mengkompress menjadi satu 0ile saja. Oika dibutuhkan, tinggal diekstrak lagi oleh pengguna. ,. 'embuat )acket (etelah kita selesai membuat source dan 'ake0ile dan mencoba menginstallnya pada sistem kita sendiri, maka sekarang saatnya membuatnya satu paket sendiri. Tujuannya tentu agar bisa diupload dan digunakan oleh siapapun yang mem- butuhkannya. Ikuti baris-baris berikut 4 (Oika anda sedang berada di direktori =(can5 D cd .. (ini untuk keluar dari direktori utama! D ls =(can D tar c"0 "scan-F.$.tar =(can D bPip& "scan-F.$.tar D ls =(can "scan-F.$.tar.bP& 6ah, kita sudah memiliki paket lengkap program kita disimpan pada 0ile bernama vscan-0.1.tar.bz. -. )enutup Ternyata membuat program open-source tidak sesulit yang kita bayangkan. 2ang perlu diperhatikan adalah pertama, logika atau konsep membuat program yang akan kita terapkan selama membuat program. 8itambah banyak latihan, maka insya >lloh kita akan lebih mudah dan terbiasa membuat tool dan program- program pada sistem Linux dan Linux-like buatan kita sendiri. Insya >lloh pada kesempatan lain kita akan belajar membuat program open-source secara li"e, dengan menggunakan library-library ba%aan dan library milik tools lain pada program kita. .. /e0erensi (childt, 1erbert. T1: >66#T>T:8 >6(I C (T>68>/8. 'cHra%-1ill. $QQF Hkioulekas, :le0therios. 8e"eloping (o0t%are %ith H6<,.<ni"ersity o0 Gashington. $QQQ Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com R !iogra"i Penu#is Muchammad Aiman. )enulis adalah seorang mahasis%a tingkat akhir pada )erguruan Tinggi Institut Teknologi Telkom Ourusan Teknik In0ormatika. Tengah menyusun tugas akhir tentang keamanan komputer dengan judul )erancangan dan Implementasi >nti"irus <pdate dengan <ni"ersal )acket <pdate. 8i sela-sela kesibukan mengerjakan Tugas >khir masih berusaha menyempatkan menulis artikel-artikel dalam bidang sistem operasi dan keamanan sistem komputer. +rtikel!artikel yang lainnya dapat didapat gratis di http://islamthink.wordpress.com. Komunitas eLearning IlmuKomputer.Com Copyright 200!200" IlmuKomputer.Com S