4/23/10

Assembly පාඩම 12

file සමග වැඩ කරමු

අද මම කියන්න යන්නේ ජනෙල් මත file සමග වැඩ කිරීම පිලිබදවයි
මෙහිදී මූලික පියවර 3 නක් අනුගමනය වෙනවා,ඒ තමා
  1. CreateFile-[File එක සෑදීම හෝ පවත්නා File එකක් විවෘත කොට එහි පාලකය (handle) එක  ලබා දීම]
  2. ReadFile\WriteFile [File එකෙන් දත්ත කියවේම හෝ File එකට දත්ත ලිවීම]
  3. CloseHandle – [සෑදූ පාලකය (handle) එක  වසා දමා File එක නිදහස් කිරීම ]
Memory (මතකය)
File එකක් අඩංගු දේ කියවීමට අපිට RAM එකෙන් මතකය අවශ්‍ය වෙනවා.මේ මතකය මුලින් allocated කරන්න ඕනෙ ඊට පසුව lock  කරලා කැමති ආකරයකට පාවිචි කරන්න පුලුවන් ඊට පසුව  unlock කිරීම හා free කිරීම කලයුතුයි
මේ සදහා භාවිතා වෙන functions පිලිවෙලින් ගත්තොත්
  1. GlobalAlloc
  2. GlobalLock
  3. GlobalUnlock
  4. GlobalFree
දැන් අපි වැඩේට බහිමු :D මේතනදි මම කරන්නේ boot.ini file එක MessageBox එකක් තුල පෙන්වීමයි
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;මේවා නම් දැන් කියන්න ඕන් නෑ නෙ
.data
FileName db "c:\boot.ini", 0
.data?
hFile HANDLE ?
hMemory HANDLE ?
pMemory DWORD ?
ReadSize DWORD ?
;FileName හා තවත් variables 4 අපි define කරගන්නවා
.const
MEMORYSIZE equ 65535
;File එක තාවකාලිකව තබා ගන්න භාවිතා කරන memory ප්‍රමානය මෙතන දක්වනවා
.code
start:
invoke CreateFile, addr FileName, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
mov hFile, eax
;CreateFile invoke කරලා සෑදෙන handle එක hFile තුල ගබඩා කර ගැනීම මෙහිදී සිදුවෙනවා
invoke GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, MEMORYSIZE
mov hMemory, eax
invoke GlobalLock, hMemory
mov pMemory, eax
;Memory Allocate කිරීම හා lock කිරීම සිදුකරනවා
invoke ReadFile, hFile, pMemory, MEMORYSIZE-1, addr ReadSize, NULL
;File කියවා එය pMemory තුල ගබඩා කරගන්නවා 
invoke MessageBox, NULL, pMemory, addr FileName, MB_OK
;MessageBox තුල පෙන්වීම සිදු කරන්නේ මේ line එකෙන්
invoke GlobalUnlock, pMemory
invoke GlobalFree, hMemory
invoke CloseHandle, hFile
;Unlock කිරීම Free කිරීම හා File Handle එක වසා දැමීම සිදු කෙරෙනවා
invoke ExitProcess, NULL
end start

2 comments:

හසිත ජයසූරිය said...

නියමයි....ඒත් ඉතින් මට තාම මේව කරන්න තේරෙන් නෑනෙ

Confiuzd ප්‍රෝග්‍රැමර් said...

@හසිත:මුල ඉදන් සෙට් වුනා නම් මේක හරි ලේසියි
http://lnhomez.blogspot.com/search/label/Assembly

Post a Comment