Tuesday, September 27, 2016

Boot loader සැකසීම - Assembly පරිගණක භාෂාව part 3


පහත තිබෙන්නේ Assembly පරිගණක භාෂාවෙන් ලියපු කේතයක් මෙම කේතය ඉලක්ක කරලා  තිබෙන්නේ පරිගණකයේ boot loader එකේ තිබෙන පළමු sector එකේ ධාවනය කිරීමට.මෙහිදී පහත 0x1BADB002 කියන memory sector එකේ තිබෙන

global loader
MAGIC_NUMBER    equ 0x1BADB002  
FLAGS equ       0x0  
CHECKSUM        equ -MAGIC_NUMBER

section .text:

align 4

 dd MAGIC_NUMBER
 dd FLAGS
 dd CHECKSUM

loader:
mov eax, 0xCAFEBABE 
.loop: 
     jmp .loop  
 
global loader ලෙස හදුන්වා දී තිබෙන්නේ එක සංකේතයක් ELF වල
MAGIC_NUMBER ලෙස අපි පළමු බූට් sector එක හදුන්වා දී තිබෙන්නේ 0x1BADB002 ලෙසයි.
FLAGS equ 0x0 ලෙස අපි හද්න්වාදී තිබෙන්නේ multiboot flag කියාවලියයි
තවද checksum කියාව්ලියට boot sector හි එකතුව විශ්ලේෂණය කරනවා.

එතැනදී අපි CHECKSUM equ -MAGIC_NUMBER කියන කේතනය හදුන්වා දේ තිබෙනවා ගණනය කරන්න magic number හි එකතුව සහ flag ගණනට

Section .text: ලෙස කේතනය කරන්නේ.text code සමුහය ආරම්භ කරන්නයි.මෙහිදී align 4 ලෙස අපි අපි byte 4එක ඉඩකඩක් හදුන්වාදීමක් කරනවා text හදුන්වාදීමට (මතක තබා ගන්න මෙය වැඩියෙන් ගන්න එපා එතකොට පරිගණකයේ boot loader එකේ දත්ත කිය්වවීමේ වේගය අඩාල වෙන්න පුළුවන්.

dd MAGIC_NUMBER සහ dd FLAGS කියන කෙතනයෙන් සිදුවන්නේ යාන්ත්‍ර කේතයන් හදුන්වාදීම සහ dd flags ලෙස හදුන්වන්නේ multi flag ගණන කියිමටයි
dd checksum කියන්න ඉහත සහදහන් කර විදිහට flags සහ dd MAGIC_NUMBER හි යාන්ත්‍ර කේතයන් ගණනය.මෙය checksum ක්‍රියාවලියෙන් boot sector වල තිබේ කීත අනුපිලිවෙල ගණනය කිරීමටයි යොදා ගන්නේ.

loader: කියන ක්‍රියාවලියෙන් සිදුවන්නේ ඊලග glub module එකට සියල්ල link කිරීමයි.මෙතනි mov eax, 0xCAFEBABE කේතය මගින් ඊලග ධාවනය ස්ථානගත කරනවා load කරන ඊලග මොඩියුලය.
.loop:එකේදී සිදුවන්නේ අපි හැමෝම දන්නා නොකඩවා ධාවන ක්‍රියාවලියයි.මෙතැනදී jmp .loop මගින් මෙය ධාවනය වෙනවා නොකඩවා 


ඊලග ලිපියෙන් කියලා දෙන්නම් කොහොමද මේ code compile කරන්නේ කියලා
 
 

1 comment: