@hanbul
1.
pointer yah.. kl dari yang aku belajar, sebenrnya pointer itu adalah salah satu tipe data.
hanya value dari tipe data pointer ini adalah alamat (address) dari variabel lain.
misal dlm c:
b = 5;
a = &b; // a di assign dengan value dari alamat b, a tidak akan berisi 5.
salah satu kegunaan penggunaan pointer ini adalah, untuk alokasi memory dinamis.
berhubungan dengan suatu struktur data,, misal kita membuat kumpulan data hari.
maka kita tinggal membuat struktur data yang berisi array berukuran 7 (senin - minggu),
karena kita sudah tau nama2 hari hanya ada 7.
nah bila kita akan membuat suatu struktur data yang kita sendiri tidak akan tau berapa ukurannya.
alias ukuran akan ditentukan kemudian. tipe pointer ini berguna disini. apa untungnya?
agar pemesanan memory lebih efisien. dlm kasus diatas, bila dari awal kita atur ukuran array misalnya
10, ternyata yang digunakan hanyalah 2, terjadi pemborosan 8 tempat bukan?
hal ini dinamakan DMA => Dynamic Memory Allocation.
misal dlm c:
int a[10]; // inisialisasi array a dengan ukuran 10 (statik)
int *b;
b = (int *) malloc(sizeof(int) * var); // inisialisasi array b dengan ukuran var (dinamis tergantung value dari var)
kadang dlm bahasa pemrograman tertentu, kita tidak perlu menggunakan pointer, compiler yang akan
secara otomatis menggunakan tipe data ini. bahkan si pembuat program pun tidak perlu tau isi dari pointer tsb.
nah ini jadi bagian kita (reverser) bila kita ingin membuat suatu trainer yang mengambil data yang ternyata dibentuk oleh tipe data pointer. atau dlm bahasa singkatnya, addresnya berubah2, alias DMA, nah kita harus
berbekalkan pengetahuan pointer agar dapat membuat trainer yang dinamis terhadap adanya address2 yg DMA tsb.
dlm contoh di thread ini, hanya menggambarkan adanya pointer level 1. dlm arti kita punya base adress + offset jadilah alamat yang kita cari. ada kalanya kita menemukan pointer menunjuk ke pointer, apa artinya itu?
(((base address + offset) + offset) + offset) baru merupakan alamat yang kita cari.. ini adalah cth level 3.
sebenrnya di game pangya ini pun ada contoh2 pointer level >1, hanya blm sempat dituliskan tutornya.
2.
kl soal eax / ebx / ecx / edx / dsb, itu merupakan register / variabel. kenapa harus eax?
itu ditentukan oleh compiler, karena masing2 ada kegunaannya. yang membuat program sendiri pun
tidak tau kenapa eax yang digunakan. apalagi yang berkutat di level atas, alias bahasa pemrograman spt:
c, c++, pascal, vb, dll. kecuali kita memprogram dlm bahasa level rendah (low level), cth : asm.
dlm contoh diatas memang digunakan register EAX, karena memang alur programnya menggunakan EAX kan?
kl misal digunakan register EBX, saya akan tulis EBX juga. kebetulan contoh diatas diambil dari sebuah
asm code yang menggunakan register EAX.
nah kl soal call, itu pemanggilan fungsi. itupun diatur oleh compiler yang tentunya sesuai dengan alur program yg dibuat. dlm contoh diatas karena kita ingin mencari kpn terakhir kali EAX diakses, maka kita harus mentrace
satu2 tiap asm code yang ada, kenapa satu2 karena alur program dari atas ke bawah. dan kebetulan ada fungsi call,
yang bisa saja ada pengaksesan register EAX disana, dan ternyata memang ada.
Dlm prakteknya tidak harus call, bisa saja jmp, jne, atao apapun. untuk itu diperlukan pengetahuan ttg ASM pula.
mudah2an bermanfaat..
regards
1642EQ