You are on page 1of 5

1.4 Ghz, cukupkah?

+ Pembahasan Mode prosesor Protected Thursday, June 12, 2003- Jumlah Klik [2909] , Penulis : Onan Farabi Jasakom - Memang rasanya cukup aneh, ketika saya pertama kali mencoba komputer baru saya dengan prosesor 1.4 Ghz terlihat perbedaan yang jelas antara pentium 4 1.478 Ghz dengan pentium 2 400 Mhz.

Sengaja saya memakai OS win98 dan lebih memilih untuk tidak menggantinya lagi dengan OS Windows versi terbaru. Dari hasil yang saya lihat, sebuah mesin P4 diatas 1 Ghz dengan menggunakan OS WinXP tidak ubahnya sebuah mesin dengan OS Win98 dengan prosesor 266 Mhz. Dari informasi yang saya terima dari kawan sekampus saya dulu ( karena saya memutuskan untuk berhenti saja, tanpa hal yang jelas ), itu semua dikarenakan OS WinXP terlampau banyak me-load driver yang sengaja di tambahkan oleh Microsoft. Berbeda dengan ketika kita menggunakannya dengan OS yang cukup ringan seperti Win98.

Dalam perpindahan dari mode real ke mode Protected pun, windows membutuhkan waktu sedikit lebih lama daripada Pentium 2 400, entah masalah teknis perangkat lunak ( Software ) atau perangkat Keras ( hardware ). Tetapi untungnya untuk para pengembang tools kompilasi, masih bisa bernafas lega, biarpun sempat cemas dengan adanya perubahan pada arsitektur prosesor pentium karena Kode-kode hexa yang dihasilkan untuk prosesor pentium 2 pun ternyata masih bisa berjalan mulus ( compatible ) dengan pentium 4. Code hexa 0xCD yang biasa digunakan untuk keperluan interupsi pum ternyata tetap berjalan lambat dan kecepatannya tidak begitu banyak berubah.

Juga mengingat kesulitan para pengembang untuk berpindah ke mode Protected, tidak juga membuat pihak pembuat prosesor Jera, yang mungkin sekurang-kurangnya memberikan sebuah OS standar semisal IMB-PC DOS, yang sudah terdapat sebuah fungsi interupt khusus supaya memudahkan dalam pengembangan aplikasi komputer. Atau malah menuliskannya langsung pada BIOS.

Entah kenapa sampai sekarang pihak pembuat prosesor masih tetap ngotot mempertahankan mode Real pada default mode masing-masing prosesornya. Sekadar tambahan bagi nonpengembang, Real mode hanya mampu mengalamati memory sebesar 1 MB ( Mega Byte atau 1024^2 byte ) saja, lain halnya dengan mode P(rotected) yang sanggup mengalamati sampai 4 GB ( Giga byte atau ( 1024^4 ) * 4 byte ).

Juga kembali ke pembahasan perihal kecepatan prosesor, jelas saja prosesor pentium 4 mempunyai kecepatan yang lebih hebat dari prosesor yang saya pakai sebelumnya, yaitu Pentium 2 400 Mhz. Ketika menggunakan kumpulan fungsi yang dibuat oleh Windows yaitu GDI.dll, lebih lambat dan mempunyai nilai perlambatan sekitar sepersekian detik daripada ketika menggunakan fungsi yang sama dengan prosesor Pentium 4, biarpun kelambatan tersebut sebetulnya merupakan batas kemampuan saya selaku pengembang.

Sungguh, saya sebagai seorang pengembang (developer) software, menginginkan sebuah mesin linier yang sudah tidak mendukung real mode lagi yang dikarenakan sukarnya memahami cara berpindah dari mode R ke P ini. Saya terus terang saja baru bereksperiment dengan cara perpindahan tersebut, bisa anda bayangkan bagaimana pedih dan perihnya melakukan experiment Pmde switch di sebuah komputer Pentium 2 yang tengah sekarat karena kerusakan

fatal pada MotherBoard yang pada akibatnya komputer tersebut sukar untuk dinyalakan.

Langkah pertama yang harus anda perhatikan adalah:

1. 2. 3. 4.

Mematikan Flag interupt. Mengisikan nilai Global Descriptor Table. Merubah bit 0 nilai Status Machine Word. Berdoa, semoga tidak gagal.

Untuk tools, saya menggunakan Perangkat Lunak buatan saya sendiri dengan harapan, para pembaca sanggup untuk (meng)hidup(kan, komputer) di dalam kondisi ekstrim, sekaligus sebagai pelajaran untuk mengetahui bagaimana mendapatkan shell code di OS windows. Perangkat lunak saya bisa menampilkan shell code, yang terletak di sebelah kanan Jendela untuk menampilkan shell code, sehingga memudahkan C-coder untuk mengadaptasikan fungsi tersebut. Mematikan flag interupt bisa dengan mudah dengan memberikan shell code 0xFA atau cli, dan untuk menyalakan-nya lagi dengan menggunakan shell code 0xFB atau sti. Pastikan anda mempunyai sisa tempat untuk Nilai GDT sepanjang sekurang-kurangnya 40 byte, dan definisikan seperti berikut ini.

Db FF FF FF FF FF FF FF FF Db FF FF 00 00 00 9a cf 00 Db FF FF 00 00 00 92 cf 00 Db FF FF 00 00 00 9a cf 00

Menghitung offset GDT. Semisal GDT dibuat di alamat CS:IP + 9 maka langkah yang harus didahulukan adalah mendapatkan nilai offset dengan menggunakan fungsi DptIP seperti berikut ini:

Pop Ax Push Ax Ret

Dengan melakukan pemanggilan terhadap fungsi ini dengan mudah kita bisa mendapatkan nilai IP sekarang, Ini sangat manguntungkan bagi anda yang ingin membuat sebuah Portable Software, seperti yang sudah pernah saya bahas sebelumnya, yaitu Com32. Setelah kita mendapatkan nilai IP tersebut, hilangkan nilai bit terbawah dengan menggunakan perintah:

And Ax,FF00

Semisal ax bernilai 120 maka sekarang nilai ax dengan sendirinya akan berubah menjadi 100 karena kita sudah mengisolasi nilai bawah pada word ax. Sekarang kita akan memasukan nilai GDT diatas menjadi seperti ini :

Jmp #30 Db 1f00

; Melompat melewati Data ; 001f-FFFFFF batas GDT 32-Byte di alamat 0xFFFF

Db FFFFFFFF ; GDT register. Db FFFFFFFF Db FFFFFFFF Db FF Db FF000000 Db 9acf00 Db FF Db FF000000 Db 92cf00

Sengaja susunan-nya dijadikan sedemikian rupa karena kelemahan saya sebagai manusia, sehingga belum sempat menyelesaikan dan memperbaiki kembali software buatan saya tersebut. Setelah kita mendapatkan nilai IP dari software kita di load, dan mengisolasi nilai tersebut, maka langkah kedua yang harus kita lakukan adalah menghitung. Shellcode dari Jmp #30 adalah E8 1e, yang berarti sepanjang 2 byte. Maka untuk meload GDT gunakan instruksi seperti berikut ini:

Mov si,ax Add si,2 Lgdt [si]

Tetapi apakah itu akan berjalan dengan sempurna? Jawabannya adalah tidak. Nilai GDT info pada alamat 2 menunjuk pada alamat yang salah, yaitu 001f-FFFFFFFF. Karena alamat FFFFFFFF adalah alamat batas terakhir yaitu 4 GB, dan untuk beberapa komputer nilai tersebut tidaklah sah, dan akan mengakibatkan komputer mereset dirinya sendiri. Maka sebelum itu anda harus memasukkan nilai linier dari alamat GDT tersebut seperti ini:

Mov si,ax Mov bp,ax Add si,2 Add si,2 Mov ax,dx Shl eax,4 Add eax,Bp Mov [si],eax

; Dimana Ax sudah menyimpan nilai IP. ; kopikan nilai IP ke BP. ; GDT Info. ; Alamat nilai FFFFFFFF. ; Data Segment. ; Geser bit ke kiri 4 buah. ; Tambahkan dengan nilai IP. ; Ganti.

Jika sudah, karena nilai si kelebihan 2 byte maka anda harus mengurangkan-nya secara langsung.

Sub si,2 Dan meload GDT: Lgdt [si]

Sekarang nilai GDT sudah diload, dan diterima oleh prosesor. Matikan Interupt dan nyalakan bit PE.

Cli Smsw ax Or al,1 Lmsw ax

Selamat datang ke P mode. Apakah hanya segitu saja? Tidak juga, masih banyak lagi yang

masih belum dibahas, dan hanya itu saja sejauh yang saya pahami. Karena pada hasil percobaan saya, pada saat saya meload selector, terjadi kesalahan system seluruhnya yang mengakibatkan komputer mati dengan sendirinya, dan belum saya ketahui penyebabnya.

Onan Farabi.

You might also like