x = 0x12345678
Andaikan x adalah DWORD variable, dan data x di simpan di alamat 0x904F000
Jika dilihat dalam Virtual Memory(blh guna immunity debugger, windbg), yang disimpan adalah
terbalik, iaitu 78563412
atau lebih terperinci spt dibawah:
Bila guna winapi ReadProcessMemory
Lihat parameter ke-3, lpBuffer berjenis LPVOID, maksudnya boleh guna char, word, dword etc.
REadProcessMemory(-1, 0x904f000, [array of dword], 4, 0)
hasil >>
Tapi kalau lpBuffer berjenis word(array)
REadProcessMemory(-1, 0x904f000, [array of word], 4, 0)
hasil >>
RUMUSAN:
word[0] bersaiz 2 byte,(ambil data dari 2 alamat)
jadi word[0] diambil dari alamat 0x904F000 (0x78) dan 0x904F001 (0x56)
tapi sebab cpu ni litte endian, kena baca dari alamat secara terbalik
dan word[1] akan ambil data dari
Manakala
Andaikan x adalah DWORD variable, dan data x di simpan di alamat 0x904F000
Jika dilihat dalam Virtual Memory(blh guna immunity debugger, windbg), yang disimpan adalah
terbalik, iaitu 78563412
atau lebih terperinci spt dibawah:
alamat | data |
0x904F000 | 78 |
0x904F001 | 56 |
0x904F002 | 34 |
0x904F003 | 12 |
Bila guna winapi ReadProcessMemory
Syntax
BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess, __in LPCVOID lpBaseAddress, __out LPVOID lpBuffer, __in SIZE_T nSize, __out SIZE_T *lpNumberOfBytesRead );
Lihat parameter ke-3, lpBuffer berjenis LPVOID, maksudnya boleh guna char, word, dword etc.
REadProcessMemory(-1, 0x904f000, [array of dword], 4, 0)
hasil >>
dword[0] = 305419896 ; yg mana hex(dword[0]) akan dapat semula nilai > 0x12345678
Tapi kalau lpBuffer berjenis word(array)
REadProcessMemory(-1, 0x904f000, [array of word], 4, 0)
hasil >>
word[0] = 22136 ; yg mana hex(word[0]) akan dapat semula nilai > 0x5678dan
word[1] = 4660 ; yg mana hex(word[1]) akan dapat semula nilai > 0x1234
RUMUSAN:
word[0] bersaiz 2 byte,(ambil data dari 2 alamat)
jadi word[0] diambil dari alamat 0x904F000 (0x78) dan 0x904F001 (0x56)
tapi sebab cpu ni litte endian, kena baca dari alamat secara terbalik
0x904F001 (0x56)
0x904F000 (0x78) >> 0x5678
dan word[1] akan ambil data dari
0x904F003 (0x12) dan
0x904F002 (0x34) >> 0x1234
Manakala
dword pulak bersaiz 4 byte. (ambil data dari 4 alamat), so dword[0] akan ambil data dari
Bagaimana pula kalau char/byte ??
hint: char saiz 1 byte. (ambil data dari 1 alamat)
0x904F003 (0x12) dan
0x904F002 (0x34) dan
0x904F001 (0x56) dan
0x904F000 (0x78) >> 0x12345678
Bagaimana pula kalau char/byte ??
hint: char saiz 1 byte. (ambil data dari 1 alamat)
No comments:
Post a Comment
Terima kasih