පහත තිබෙන්නේ 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 කරන්නේ කියලා
:)
ReplyDelete