Peraturan Forum
1. Sebarang [b]benda² illegal tidak dibenarkan dibincangkan (di mana-mana forum Putera.com)[/b]. Jika thread berkaitan illegal ini dibuka maka thread² ini akan dikunci / dipadamkan oleh moderator / supervisor / admin. 2. Pengguna [b]dilarang sama sekali SPAM[/b] dengan posting yang tidak mendatangkan faedah seperti smile, "betul tu" dan sebagainya. Jika masih membuat posting yang berbentuk SPAM, maka posting tersebut akan dipadamkan, dan jika kerap berlaku anda mungkin diberi warning. 3. Pengguna seharusnya [b]menggunakan fungsi search[/b] sebelum membuka sesuatu topik. Ini adalah untuk mengelakkan topik yang sama dibuka berulang kali. 4. Sila [b]gunakan PM[/b] jika mahu berkomunikasi secara persendirian dengan individu tertentu atau berkenaan sesuatu yang tidak dibenarkan secara umum.
![]() ![]() |
Reverse Code Engineering, tutorial... |
Aug 2 2006, 12:37 PM
Kiriman
#1
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 492 Penyertaan: 12-June 04 Dari: Kota Kinabalu Ahli ke- 857 |
intro
Assalamualaikum... Tutorial ni adalah mengenai Reverse Code Engineering (RCE). Ringkasnya, dalam tutorial ni aku akan cuba mendedahkan kepada korang bagaimana untuk menganalisis program binari, dalam kes di mana kita tidak mempunyai akses kepada kod sumber asal program tersebut. Aku hanya fokuskan tutorial ni kepada platform Windows. So kalau aku citer pasal kernel misalnya, aku maksudkan kernel Windows, bukannya Linux, BSD ataupun maner2 OS yang lain. Lebih spesifik lagi, aku personally hanya guna Windows XP Pro (dengan SP2), sebab OS lain.. secara ikhlasnya... takde umphhh! Dalam bahagian pertama ni aku akan citerkan mengenai beberapa jenis dan kategori tools yang akan kita gunakan dalam sesi menganalisis dan tugas asas setiapnya. Bahagian ni lebih kepada memberi gambaran kepada korang apa yang korang akan buat atau tengok kelak, iaitu apabila korang dah ader pengetahuan asas mengenai RCE. So korang bleh laa anggap bahagian ni sebagai pemanas otak untuk membuka minda korang supaya dapat menerima maklumat2 asas dalam bahagian2 seterusnya. Dalam bahagian2 seterusnya aku akan citer plak basic knowledge dalam RCE dan maklumat2 yang lebih spesifik. Pengetahuan ni amat penting untuk korang yang makan PC, tido PC, mandi PC dan kawin ngan PC korang. Tools yang aku citer kat sini digunakan untuk pelbagai tujuan, di mana asasnya sama sahaja, iaitu untuk membantu menganalisis carakerja program binari. Tools sebegini digunakan oleh security expert untuk mengkaji kod sistem operasi, server, dan komponen2 kritikal suatu program. Tools ni jugak digunakan oleh crackers untuk mengalahkan skim perlindungan suatu perisian. Tools yang sama juga digunakan untuk cheat dalam game. Tools yang sama jugak korang bleh gunakan untuk analisis virus atau aper2 "makhluk asing" yang selalu sangat singgah kat PC korang tuh. Ye laa.. kita sepatutnya jadik tuan kepada PC kita, PC tu cuma hamba abdi dan menatang ni sepatutnya ikut perintah kita, bukan sebaliknya. Tak perlu takut dengan program2 "hantu" yang berlambak2 tu selagi kita penuhkan kepala otak kita dengan ilmu2 ghaib pasal PC ni. Aper2 pun aku harap korang bleh mempelajari sesuatu daripada tutorial yang tak sebrape ni. disassembler First sekali aku nak citer pasal disassembler. Tugas asas sebijik disassembler adalah menerima program binari sebagai input dan menghasilkan perwakilan program tersebut dalam bahasa himpunan sebagai output. Output yang kita dapat dari disassembler blehla dikatakan "kod sumber" program tersebut, cuma ia bukannya dalam bentuk yang asal, tapi dalam bahasa himpunan. Contoh2 disassembler adalah IDA (Interactive DisAssembler), PEBrowse Professional, BDASM, W32DASM dan lain2. Untuk mendapat sedikit idea mengenai menatang bahasa himpunan ni, kat bawah aku tunjukkan screenshot dari PC aku, di mana IDA dan Minesweeper tengan berjalan, dan aku tengah analisis kod Minesweeper menggunakan IDA (errr.. kotak2 dan garis2 kaler merah, kuning, ping dan hijau tu aku tambah laaa). ![]() Baris2 teks "push ...", "mov ...", "call ..." dan lain2 tu laa yang kita panggil sebagai bahasa himpunan. Nanti aku citer details lagi pasal ni. Cebisan kod dalam gambar di atas merupakan kod yang digunakan oleh Minesweeper untuk memaparkan "about box" game ni (iaitu menu help->About Minesweeper). Simbol2 teks "LoadIconW", dan "ShellAboutW" dalam prosedur tersebut adalah 2 daripada ribuan Windows API (Application Programming Interface). Semer Windows program gunakan Windows API untuk berinteraksi dengan Windows dan kebanyakannya didokumenkan dalam Platform SDK (Software Development Kit). Memahami Windows API merupakan salah satu kunci untuk memahami fungsi suatu prosedur dalam program Windows. Contohnya, dalam prosedur di atas, kod yang ditandakan dalam petak merah digunakan untuk load string dari string table resource program tersebut (bleh dilihat dengan mana2 program resource viewer, seperti Resource penggodam) ke ruang alamat (virtual memory) winmine dan string tersebut adalah "Minesweeper". Kod yang ditandakan dengan warna kuning plak sama dengan kod sebelum ni, tapi string yang dimuatkan ke memori adalah "by Robert Donner and Curt Johnson". Kod bertanda pink plak digunakan untuk load icon Minesweeper (jugak dari resource) dan akhir sekali, fungsi ShellAboutW digunakan untuk memaparkan "about box" Minesweeper. Kod yang aku tak tanda tu merupakan prolog dan epilog untuk prosedur tersebut, untuk setup storage untuk local variables. Seperti yang dapat dilihat, prosedur ni dinamakan secara automatik oleh IDA dengan nama sub_1003D1D. Bila dah dapat kesan tugas suatu prosedur tu, biasanya kita akan namakannya dengan nama yang lebih bermakna, e.g "DisplayAboutBox" atau sebagainya. IDA dipanggil "interactive" disebabkan kebolehannya menerima input dari kita untuk membantu dalam analisis di mana kebanyakan disassembler lain tidak mampu lakukan. Kolum yang ader teks ".text:xxxxxxxx" tu adalah virtual address untuk kod ni, ".text" means ia ader dalam seksyen bernama ".text". Teks yang ditandakan dengan semikolon tu adalah komen (biasa digunakan dalam pengaturcaraan bahasa himpunan). Note that IDA secara automatik membantu memberikan komen untuk setiap cebisan kod yang dia tahu maknanya. Bukan tu ajer, kita bleh masukkan komen kita jugak. Biasanya dalam RCE kita akan convert laa prosedur ni dalam bentuk yang lebih kita fahami (biasanya high-level language yang kita familiar atau pseudocode). Contohnya, aku bleh convert prosedur ni ke bahasa C seperti berikut : void DisplayAboutBox() { TCHAR str1[128], str2[128]; sub_10039E7(12, str1, 128); sub_10039E7(13, str2, 128); ShellAbout(hWnd, str1, str2, LoadIcon(hInstance, 100)); } Akhir sekali, untuk memahami output disassembler ni kita kena laa faham mengenai pengaturcaraan. Untuk contoh ni, kita kena faham pengaturcaraan bahasa himpunan, pengaturcaraan Windows dan juga struktur fail format PE (Portable Executable), iaitu format rasmi program executable dalam Microsoft Windows. Ni laa benda yang kita akan pelajari dalam bahagian2 seterusnya. Korang tak paham penerangan di atas sekarang ni takpe. Lain kali korang akan paham. Kita perlu menggunakan disassembler yang betul untuk sistem yang betul kerana terdapat pelbagai senibina pemproses untuk komputer, begitu juga dengan format fail program yang biasa disertakan dengan pengepala (header) untuk membantu OS melaksanakan fail program tersebut dengan betul. Kebanyakan disassembler adalah spesifik kepada satu fail format dan satu senibina. IDA pula menyokong pelbagai jenis fail format dan senibina pemproses. Ini bermakna jika kita menggunakan IDA versi Windows, kita masih boleh memproses fail program ELF, yang biasa digunakan dalam Linux, ataupun fail program class, iaitu format yang digunakan oleh Java, dan bermacam-macam lagi laaa... Satu perkara yang perlu diingati adalah disassembler hanya memproses isi fail program seperti mana ia terdapat dalam fail tersebut (analisis statik). Disassembler sesuai digunakan untuk analisis kod program yang "normal" dan linear. Kebanyakan virus zaman sekarang biasanya encrypt diaorang nyer code, atau guna poly/metamorphic engine yang surely disassembler takleh nak analisis. Untuk melakukan analisis secara dinamik, di mana kita bleh mengawal aliran kod dan ruang alamat sesuatu program, kita perlukan debugger. debugger Debugger ni memang tak asing laaa untuk para programmers, sebab ia salah satu tools yang digunakan oleh programmer dalam sesi debugging. Istilah "bug" ni digunakan untuk merujuk kepada "kesilapan" dalam program binari. Tapi tak semestinya ia disebabkan oleh kod program tu. Bleh jadik disebabkan oleh program lain yang berinteraksi dengan program tu, atau bleh jadik kod sistem operasi jugak. Kalau kod program tu tak dapat handle pelbagai cara bagaimana pengguna menggunakannya pun dikira mempunyai bug jugak. Bila dah nampak kesan kesilapan ni (e.g keluar error message ke, tiba2 hang ke), programmer biasanya gunakan debugger untuk kesan punca masalah. Debugger ni basically cam disassembler laaa.. bezanya kita laksanakan program tu di bawah kawalan debugger, maknanya kita bleh tengok setiap baris kod dilaksanakan dan setiap variable atau register berubah in real time. Contoh2 debugger yang biasa digunakan untuk analisis program binari adalah seperti SoftIce, WinDbg (Platform SDK), OllyDbg, PEBrowse Professional Interactive dan lain2 laaa.. Kalau korang tanya mana2 cracker kat dunia nih, diaorang tentu kenal ngan SoftIce. Rasanya development SoftIce dah stop dah, maknanya takde laa lagi SoftIce baru dari company yang bikin menatang ni. Tapi ader gak rasanya bakal pengganti SoftIce, yang dipanggil Syser. Ni screenshot dari PC aku - SoftIce, tengah stop kat entrypoint (permulaan kod program) Minesweeper. ![]() Seperti yang korang dapat lihat di atas, bahagian yang ditandakan dengan no. 3 tu adalah perwakilan kod program tersebut dalam bahasa himpunan. No. 1 plak tunjukkan registers (storan sementara dalam CPU). No. 2 plak adalah ruang ingatan dan no. 4 tempat kita berikan arahan untuk SoftIce (contohnya arahan "cls" tu laaa). Dari permulaan kod program ni, aku bleh "single step" setiap baris kod assembly ni atau modify kod ni untuk mengubah kelakuan program. Actually ader lagi resources lain yang aku tak tunjuk, contohnya FPU registers, MMX, XMM registers dan lain2 lagi. Dengan debugger, aku bleh execute program arahan demi arahan, modify memory dan variables yang digunakan dalam program malah mengubah arahan dan banyak lagi laa. Biasanya programmer nyer debugging session disertakan dengan kod sumber dan basically dia debug kod dalam high level language, bukannya level assembly. Dan most programming language system ader debugger khas, terutamanya yang tak kompil ke native machine code. Nanti laa aku citer lagi banyak pasal ni. hex editor/viewer hex editor/viewer membolehkan kita melihat isi kandungan sebenar (mentah) sesuatu fail dalam sistem. Kita tau yang setiap fail, tak kira la fail imej ke, audio ke, video ke, exe ke semernya terdiri daripada nombo2 binari 0 dan 1 sahaja. Nombor2 ni mempunyai makna kepada program2 yang memahaminya, memprosesnya dan menterjemahkannya kepada bentuk yang lebih bermakna (e.g Winamp untuk mp3 files). Hex editor/viewer tidak memproses isi kandungan fail ni dan hanya memaparkan nombor2 binari yang membentuk fail tersebut. Contoh2 hex editor adalah seperti WinHex, Hex Workshop, BIEW, AXE, 010Editor dan banyak lagi. Kebanyakan hex editor bukan hanya mampu memaparkan isi kandungan fail, tapi juga disk dan memori. Sebagai contoh, screenshot di bawah adalah dari 010Editor (feveret aku) yang tengah memaparkan isi kandungan sektor pertama hard disk aku, atau yang kita kenali sebagai Master Boot Record (MBR). ![]() Tetingkap utama dalam hex editor tu laa yang ader 3 kolum tu. Yang first untuk address/offset, yang kedua adalah isi kandungan fail dalam asas perenambelas (hex) dan yang ketiga adalah perwakilan ASCII (control character ngan ascii code > 127 dia wakili dengan dot jer). Hex editor/viewer memang sesuai laa kalau nak kaji format2 fail tertentu. Daripada gambar di atas, aku bleh nampak yang hard disk 40 GB aku cuma ader 1 partition jer, dengan ID 7 (NTFS filesystem). Ader jugak hex editor yang bleh paparkan isi fail selain daripada asas perenambelas (yang biasa adalah asas 2, 8 dan 10), dan kebanyakan hex editor jugak sediakan data interpreter (cam 010Editor Inspector kat sebelah kiri tu) untuk memudahkan analisis. Lain kali aku citer plak lebih details lagi mengenai hex editor feveret aku, terutama mengenai "template" feature. monitoring programs Program2 yang monitor system resources ni memang sangat berguna laa terutama untuk detect masalah dalam sistem dan melakukan pra-analisis. Terdapat banyak jenis resources yang kita bleh monitor, bergantung kepada keperluan kita. Contoh paling mudah adalah task manager di mana kita bleh tengok pelbagai maklumat mengenai proseses, users dan network connections dalam sistem. Dalam bahagian ni aku citer sikit jer dulu.. First sekali, aku perkenalkan korang dengan tools feveret aku, iaitu Process Explorer. Process Explorer ni bleh dikatakan cam Task Manager laa, cuma dia fokus kepada proses monitoring. Maknanya kita bleh dapatkan pelbagai maklumat mengenai setiap proses yang wujud dalam sistem, termasuklah fail program dan dll yang terlibat dan handles yang dipegang oleh setiap proses. Aku akan sentuh lagi pasal ni nanti. Then kita ader File Monitor, yang monitor aktiviti filesystem, so kalau ader program sentuh fail2 sensitif korang bleh nampak laa dalam log File Monitor ni. Kemudian kita ader Registry Monitor, yang monitor aktiviti registry, so kalau korang nak tau samada suatu program simpan data dalam registry korang, bleh laa tengok dengan Registry Monitor. Contohnya, dalam screenshot di bawah adalah tetingkap Registry Monitor tengah monitor registry access oleh Minesweeper. ![]() Kita bleh nampak Minesweeper simpan settings kat subkey "HKCU\Software\Microsoft\winmine\" (HKCU means HKEY_CURRENT_USER). Dan nampak gayanya dia try QueryValue ke atas Tick dan Menu value tapi tidak berjaya (dua2nya takde dalam registry). Kita jugak bleh nampak kegunaan key lain seperti Time*, Name*, Height dan yang pastinya Minesweeper menggunakan registry untuk menyimpan setting dia. Bila kita ubah setting dalam game, ia akan menulis ke registry setting yang baru. Actually ader banyak lagi monitoring programs yang lain yang sangat2 laa berguna dalam menganalisis program binari. Errr.. antivirus pun monitor gak, tapi ni menatang lain sama sekali, sebab virus bukan system resources. Dan sebenarnya ader banyak lagi tools yang tugasnya very specific dan sangat membantu dalam keje2 kotor kita ni. Tapi aku cuma akan perkenalkan korang kepada tools ni bila kita nak gunakannya dalam analisis contoh2 program dalam bahagian2 seterusnya. ----- tamat bahagian 1 ----- bersambung... Kiriman ini telah diubahsuai oleh Ancient One: Aug 2 2006, 12:44 PM |
|
|
|
Aug 2 2006, 12:45 PM
Kiriman
#2
|
|
|
Ahli Sangat Rajin ![]() ![]() ![]() ![]() ![]() ![]() Grup: Members Kiriman: 3,988 Penyertaan: 19-November 04 Dari: teka la sampai dapat!!! Ahli ke- 3,979 |
menarik gak ni ..
-------------------- Selamat Hari Raya Maaf Zahir Batin
|
|
|
|
Aug 2 2006, 12:57 PM
Kiriman
#3
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 350 Penyertaan: 30-December 05 Dari: peN drIve Ahli ke- 13,332 |
ilmu tu..okie gak klu try
-------------------- ..aKu buDak baRu bLajar..
|
|
|
|
Aug 2 2006, 01:01 PM
Kiriman
#4
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 126 Penyertaan: 17-April 06 Ahli ke- 16,231 |
akhirnya muncul juga ilmu ni dalam BM.Kalau baca english memang pening tak faham.
PUSH PUSH MOV CALL PUSH PUSH = buffer overflow -------------------- http://www.blogeek.net
だってお腹がすいたもん |
|
|
|
Aug 2 2006, 01:39 PM
Kiriman
#5
|
|
|
Ahli ![]() Grup: Learning Kiriman: 28 Penyertaan: 14-July 06 Ahli ke- 18,299 |
Sapa-sapa yang dapat menguasai assembler/disassembler (ASM), nanti senang je nak reverse program (krack), terutamanya menerusi penggunaan OllyDBg. Belajar dari asasnya supaya dapat memahami setiap kod binary dan bagaimana program berfungsi. Kebanyakkan cracker hari ini menggunakan tools tersebut untuk menganalisa program untuk dibuat kracknya. Kalau dulu SoftIce yang paling masyhur sekarang OllyDbg pulak.
Reverse Engineering ni dianggap satu 'seni' juga, bukannya untuk melakukan krack semata2. Ini yang perlu diambil perhatian oleh setiap orang yang berminat dalam bidang ni. Sebaiknya kena ada asas untuk programming juga( samada VB, C, C++, Java, Delphi/Borland, Pascal, .Net dan lain-lain) bagi mereka yang berminat untuk belajar disassembler atau debugger. Walaubagaimanapun seseorang masih boleh menguasai Disassembler atau Debugger walaupun tidak tahu langsung bahasa programming kerana ilmu ini boleh berdiri dengan sendirinya. Sekadar pendapat, betul tidak aku mana tau, aku sendiri pun tak tau. |
|
|
|
Aug 2 2006, 04:19 PM
Kiriman
#6
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 304 Penyertaan: 5-October 05 Dari: Mutiara Damansara, PJ Ahli ke- 11,013 |
hmmm gogogo ader jgk org yang bijok hal2 reverse-mereverse ni .....ok2.....dah lama tak main kut blkg nih...hahaha
leh gak refresh skit2 hehe -------------------- it's me: slvrchair[at]multive.com.my
//Training/Class Booking [Private/Group Adobe Flash 8/9 Training] : training[at]multive.com.my //Product & Services [Enquiry/Request] : sales[at]multive.com.my |
|
|
|
Aug 3 2006, 12:25 PM
Kiriman
#7
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 137 Penyertaan: 2-April 06 Ahli ke- 15,918 |
fuhh,best r ko Ancient One..
ko tau sume tuh..blaja dr ko r..buat la byk2 sket tutorial.. bley aku tumpang belajar..aku xtau apekebenda pun sal tuh.. |
|
|
|
Aug 3 2006, 02:26 PM
Kiriman
#8
|
|
|
Ahli Rajin ![]() ![]() ![]() ![]() ![]() Grup: Members Kiriman: 1,807 Penyertaan: 1-June 05 Dari: Johorian Ahli ke- 8,198 |
wohoo.. mmg best
-------------------- http://fiviobusiness.qassia.com/
|
|
|
|
Aug 4 2006, 05:17 PM
Kiriman
#9
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 304 Penyertaan: 5-October 05 Dari: Mutiara Damansara, PJ Ahli ke- 11,013 |
leh bagi jadual?takut terlepas kelas tutorial la.....
-------------------- it's me: slvrchair[at]multive.com.my
//Training/Class Booking [Private/Group Adobe Flash 8/9 Training] : training[at]multive.com.my //Product & Services [Enquiry/Request] : sales[at]multive.com.my |
|
|
|
Aug 8 2006, 12:20 PM
Kiriman
#10
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 492 Penyertaan: 12-June 04 Dari: Kota Kinabalu Ahli ke- 857 |
Bahagian I : Asas pengaturcaraan
intro Sebelum ni aku citer mukadimah jer (bahagian 0). Sekarang meh kita start dengan basic. RCE, secara umumnya bleh laa dikatakan songsangan untuk proses pembinaan program. Kalau dalam proses pembinaan program kita bermula daripada kod sumber dan berakhir menjadi program binari, songsangannya plak adalah untuk mendapatkan semula kod sumber daripada program binari ni. So, tak dapat dinafikan lagi memahami proses pembinaan program adalah sangat penting untuk memahami RCE. Tu sebab dalam bahagian ni kita akan belajar mengenai asas pengaturcaraan, khususnya untuk PC kita. Tapi sebelum aku citer pasal pengaturcaraan, meh kita kembali semula ke sekolah untuk belajar matematik. Ni kira matematik tahap tadika laa ni, sebab sebenarnya kita nak belajar mengira semula. sistem pernomboran Aku tak tau laa brape banyak bangsa manusia yang wujud kat dunia nih, tapi aku rasa laa kebanyakannya (kalau tak semer) sekarang mengira menggunakan sistem pernomboran asas 10 (decimal). Dalam sistem decimal, 10 simbol digunakan untuk mewakili kuantiti, iaitu angka 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (ni kita nyer simbol laa.. lain bangsa lain plak simbolnya). Walaupun kecik2 dulu kita selalu start kira dengan nombor 1, rasanya sekarang ni kita tau laa yang simbol pertama dalam sistem ni adalah 0. Untuk mewakili nombor yang lebih besar dari 9 plak, kita cuma recycle simbol2 0 hingga 9 ni, iaitu turutan simbol ni kita ulang semula tapi dengan bilangan digit yang semakin bertambah. Contohnya penambahan sebanyak 1 kepada 9 kita tulis sebagai 10. "1" dalam "10" tu maksudnya turutan simbol asas dah disempurnakan sekali, dan "0" dalam "10" tu plak menandakan kita sedang berada pada simbol pertama untuk turutan yang baru nih. sistem binary. Dalam sistem binary, kita hanya gunakan dua simbol asas, iaitu 0 dan 1. Dengan mengikut konsep yang aku sebut kat atas tadi, jadual di bawah menunjukkan 10 nombor pertama dalam sistem decimal dan perwakilannya dalam sistem binary : kenali PC kita Errr.. tak masuk lagi sebenarnya topik pengaturcaraan. Kita berkenalan dulu dengan lebih rapat dengan PC kita. Ye laa.. orang cakap... tak kenal maka tak cinta konsep pengaturcaraan Pengaturcaraan komputer, bagi aku maknanya ringkas jer, iaitu mengarahkan komputer untuk melakukan sesuatu. Secara tradisionalnya, kita mengaturcara dengan membina program yang mengandungi arahan2 untuk dilaksanakan oleh CPU. Proses pembinaan program bleh diringkaskan seperti yang ditunjukkan dalam rajah di bawah : bersambung..... -------------------- NOTE: pengguna ini telah meninggal dunia. kepada sesiapa yang tau kewujudan user ini dalam forum ini, sila doakan kesejahteraan dia. sesiapa yang pernah berdendam dengannya, pohon ampunkan sahaja dia semoga dia dan anda tergolong dalam manusia yang baik dan mulia
(edited by moderator) |
|
|
|
Aug 8 2006, 02:39 PM
Kiriman
#11
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 304 Penyertaan: 5-October 05 Dari: Mutiara Damansara, PJ Ahli ke- 11,013 |
wahh kelas dah start...harap tak lmbt cikgu
-------------------- it's me: slvrchair[at]multive.com.my
//Training/Class Booking [Private/Group Adobe Flash 8/9 Training] : training[at]multive.com.my //Product & Services [Enquiry/Request] : sales[at]multive.com.my |
|
|
|
Aug 12 2006, 09:24 AM
Kiriman
#12
|
|
|
Ahli ![]() ![]() Grup: Members Kiriman: 62 Penyertaan: 3-April 05 Dari: Kuantan Ahli ke- 7,176 |
Ok! kelas dah bermula. Saya ikutinya dengan penuh minat. Harap sifu bagilah alamat e-mail untuk tanya soalan yang tak faham...
|
|
|
|
Aug 15 2006, 11:41 AM
Kiriman
#13
|
|
|
Ahli ![]() ![]() ![]() Grup: Members Kiriman: 492 Penyertaan: 12-June 04 Dari: Kota Kinabalu Ahli ke- 857 |
Bahagian I.I : Pengaturcaraan Bahasa Himpunan intro Sebelum ni aku tekankan kepentingan memahami bahasa himpuan (asm) dalam RCE. Oleh sebab tu kat sini kita akan belajar mengenai asm. Menatang yang kita panggil sebagai bahasa himpunan ni sebenarnya hanyalah perwakilan simbolik arahan2 dalam set arahan suatu CPU. Tak lebih dari tu. So, instead of tulis 11000001010000000.... yang takde kesudahan atau tulis tambah nilai pada lokasi 100 ke register eax, kita bleh tulis sebagai add eax, [100]. Bila belajar mengaturcara dengan asm, kita sebenarnya mempelajari menggunakan suatu assembler yang khusus. Maknanya kat sini assembler yang berlainan bleh mempunyai sintaksis yang berbeza untuk mewakili arahan mesin yang sama. Hanya sebagai contoh, katakan kita ingin menulis arahan untuk menyalin suatu nombor bersaiz 4 bytes pada alamat memori x kepada register bernama eax. Dengan assembler tertentu kita akan tulis arahan ni sebagai mov eax, dword [x] tapi dengan assembler tertentu yang lain plak, kita kena tulis mov eax, dword ptr x ader plak satu assembler tu kita kena tulis sebagai mov eax, d$x dan lebih teruk lagi, ader yang terima arahan asm camni movl x, %eax Ni laa kita punya standard sintaksis asm, iaitu takde standard. Kalau korang develop assembler korang sendiri, bleh laa cipta sintaksis yang korang suka. Tapi secara umumnya, sintaksis pertama dan kedua biasa digunapakai oleh assembler yang popular dan jugak output dari disassembler atau debugger. Sintaksis yang ketiga tu actually untuk RosAsm dan yang kedua plak untuk GAS (GNU nyer assembler) dan sintaksisnya diaorang panggil sebagai sintaksis at&t. Penting gak untuk kenali sintaksis yang berbeza ni sebab kadang2 kat internet ader kod asm atau senarai disassembly yang ditulis dengan sintaksis tah aper2 so kalau kita tak paham sintaksis ni payah laaa. Tapi oleh kerana dalam asm kita ader sedikit rules (e.g takleh mov data dari memori ke memori) so sesetengah sintaksis ni kita bleh paham laa maknanya secara automatik. Oleh kerana menatang ni takde sintaksis piawai, ader baiknya aku terhadkan tutorial ni dengan mempelajari satu assembler jer, iaitu assembler feveret aku yang dipanggil sebagai Flat Assembler (FASM). Kalau korang rasa2 korang dah expert tang asm ni bleh laa melarikan diri dari bahagian ni. Sedikit mengenai FASM SEMUA sample kod asm (bukan senarai disassembly) dalam seluruh tutorial ni adalah menggunakan sintaksis FASM, so aku harap korang bleh download FASM dan install kat sistem korang. FASM bleh dimuatturun dari download section laman web rasmi FASM kat http://flatassembler.net/download.php. Note that ader 4 jenis pakej bleh korang download iaitu untuk DOS, Windows, Linux dan UNIX/libc (dalam bentuk object file, bukan exe). Aku nak korang download versi untuk Windows (fasmwxxx.zip, di mana xxx adalah version number). Maser aku taip ni, latest version adalah 1.67.7. Bila korang dah download, cara nak install mudah jer - just extract ke mana2 folder yang korang suka, aku assume ke folder C:\Dev\FASM\. Bila dah extract tu, dalam folder C:\Dev\FASM\, bleh laa nampak senarai fail dan subfolder berikut : <EXAMPLES> <INCLUDE> <SOURCE> FASM.EXE FASMW.EXE FASM.PDF LICENSE.TXT WHATSNEW.TXT FASM.EXE adalah assembler berasaskan command line, i.e kena run dari command prompt. FASMW.EXE plak penyunting kod yang dilengkapi dengan assembler. Fail FASM.PDF tu manual untuk FASM, kat sini korang bleh bacer laa arahan2 yang berkaitan dengan assembler ni dan camne nak gunakannya. Lain2 tu paham2 sendiri laa yer. Folder SOURCE mengandungi kod sumber untuk FASM, yang korang bleh modified dan assemble semula dengan FASM, dan cipta assembler korang sendiri Bermain dengan FASM Run FASMW.EXE dan taip teks (italic) berikut : mov ax, 100. Save sebagai fail test.asm kat desktop atau kat maner2 laa yang korang suka. Then tekan CTRL+F9 (compile). Fasm akan hasilkan fail bernama test.bin dalam folder yang sama dengan fail test.asm tadi. Fail test.bin ni bersaiz 3 bytes dan kalau korang tengok isinya dengan hex editor, isinya adalah B8 64 00. Dengan merujuk kepada rajah kod sumber->compiler->program sebelum ni, fail test.asm adalah kod sumber, fasm sebagai compiler dan test.bin plak sebagai program, iaitu output. Kalau korang rename test.bin ke test.exe dan cuba execute fail ni, Windows akan detect fail ni sebagai program binari DOS (plain binary) dan cuba muatkannya ke dalam memori dan melaksanakan kod program ni. Dalam cara yang paling ringkas, camni laa proses pembinaan program berlaku. Tapi realitinya takde laa ringkas camni, dengan melibatkan fail2 kod sumber dan fail sumber yang lain dan memerlukan compiler system yang terdiri daripada beberapa program khas, seperti compiler dan linker. Sekarang cuba plak taip db "ABC" (padam yang sebelum nih) dan compile. Output test.bin sekarang bersaiz 3 bytes dan isinya adalah 41 42 43 (hex). Bukak dengan notepad kita akan nampak teks ABC[/i]. Kita bleh lihat FASM sebagai byte generator dari satu perspektif di mana kita menggunakan arahan2 tertentu untuk menjana nombor dan FASM jugak adalah assembler sebab ia menterjemahkan arahan asm kepada arahan mesin. Sekarang taip plak format pe dan kita akan dapat output file dengan nama test.exe bersaiz 512 bytes! Ni menunjukkan FASM jugak adalah compiler/linker sebab dia bleh hasilkan format2 tertentu. Arahan2 bukan arahan asm yang mengarahkan assembler untuk melakukan sesuatu, seperti db, format dan lain2 adalah arahan untuk assembler, bukannya arahan asm. Dengan db 0 misalnya, kita mengarahkan FASM untuk meletakkan 1 byte data yang mempunyai nilai 0 pada output file tersebut. Assembler takde laa suka2 nak terima aper2 arahan yang kita tulis. Kalau dia takleh proses arahan yang dia tak paham, assembler akan paparkan mesej kesilapan dan takleh laa dia hasilkan output. Contohnya, bila kita tulis dx 0 FASM akan paparkan mesej kesilapan error: illegal instruction. sebab dia tak paham arahan ni. [b]Pengaturcaraan Asm dengan FASM Actually kat atas tadi aku cuma nak korang familiar dengan FASMW. Takde tujuan lain. Kalau korang nak guna console version (FASM.EXE) bleh laa bukak command prompt dan execute fasm.exe. Console version ni terima paling sikit satu parameter (iaitu nama fail input) dan bleh jugak berikan satu lagi parameter (iaitu nama fail output). Sekarang meh kita belajar camne nak tulis program dengan asm menggunakan fasm sebagai assembler. Kat sini aku cuma citer pasal CPU 32-bit. Kalau ader orang sedekah x86-64 machine kat aku bleh laa plak aku citer pasal pengaturcaraan asm dengan CPU 64-bit First sekali aku nak bagitau cara nak tulis nombor dalam kod asm. Untuk tulis |




Aug 2 2006, 12:37 PM







