Assembler Dilinin Quruluşu – Buffer Overflow HazırlığıAssembler Dilinin Quruluşu – Buffer Overflow Hazırlığı
Prosessorun Registerləri nədir?Buffer Overflow nədir? Prosessorun Registerləri ilə Assembler dilini anlamaq? Register nədir?Assembler dili nədir? Assembler dilinin quruluşu necədir?
Telegram kanalına qoşularaq bu və digər mövzular üzrə quizlərdə iştirak edə bilərsiniz!
Telegram (Kanal): https://t.me/xakeraz_official
Assembler Dilinin Quruluşu
Assembler dilinin quruluşu aşağıdakı sxem kimi təqdim etmək mümkündür.
(adres) (əməliyyat kodu) (instruksiya) (operandlar)
Beləliklə Assembler dilinin quruluşu əməliyyat kodunun dəyərini daşıyan, sol tərəfdə yerləşən yaddaş adresindən ibarətdir. Daha sonra əməliyyat yerinə yetirmək üçün kommanda (MOV və ya JMP) daha ətrafı aşağıdakı cədvəldə görə bilərik. Əməliyyat kommandasından asılı olaraq dəyərlər fərqlidir: MOV kommandası üçün iki dəyər istifadə olunduğu halda, Push kommandasında 1 dəyər bəs edir. Aşağıdakı cədvəldə assembler dilində istifadə əsas əməliyyat kommandalarını görə bilərik.
| Təlimat (İnstruksiya) | Tərcüməsi / Məqsədi | Nümunə | İzahı |
|---|---|---|---|
mov | Məlumat köçürmək | mov eax, 5 | 5 ədədi eax registerinə yazılır |
add | Toplama | add eax, 1 | eax = eax + 1 |
sub | Çıxma | sub ebx, 2 | ebx = ebx - 2 |
inc | 1 vahid artırmaq | inc ecx | ecx = ecx + 1 |
dec | 1 vahid azaltmaq | dec edx | edx = edx - 1 |
push | Stack-ə dəyər atmaq | push eax | eax stack-in üstünə yazılır |
pop | Stack-dən dəyər oxumaq | pop ebx | Stack-dən çıxarılan dəyər ebx-ə yazılır |
lea | Ünvanı yükləmək (məzmun yox) | lea eax, [ebx+4] | eax-ə ebx+4 ünvanı yazılır |
xor | Bitwise XOR və sıfırlama | xor eax, eax | eax = 0 olur (çox istifadə olunur) |
1-ci əməliyyat kommandası olan MOV kommandası öz adından da göründüyü kimi mənbə məlumatı hədəf dəyərə qeyd edir.2-ci və 3-cü sətirlərdə riyazi əməliyyatların yerinə yetirilməsi üçün istifadə olunan add və sub kommandalarını görə bilərik. Diqqət yetirməli məqam budurki, riyazi əməliyyat zamanı əldə olunan nəticə yenədə eyni register dəyərində saxlanılır. 4-cü və 5-ci kommandalar olan inc dəyərin qiymətini bir vahid artırır.Daha sonra push kommandası veriləni stack (yığın) üzərinə yazır, pop isə stackin ən üst verilənini silir.Məsələn pop EBX stackin üst verilənini silir və onu EBX registerində yadda saxlayır. XOR kommandası isə əməliyyatı iki dəfə yerinə yetirmək üçündür. Məsələn: XOR EAX,EAX EAX registerindən verilənin dəyərini iki dəfə 0 bərabər edir, bu MOV EAX,0 kommandası ilə eynidir.
| Instruksiya | Tərcümə | Funksiya / İş prinsipi | Nümunə |
|---|---|---|---|
jmp label | Şərtsiz keçid | Heç bir şərt yox, birbaşa label-ə keçir | jmp end |
cmp op1, op2 | Müqayisə | op1 - op2 hesablayır, nəticəni saxlamır – bayraqları dəyişir | cmp eax, 0 |
test op1, op2 | Bitwise test | op1 & op2 → nəticə saxlanmır, sadəcə bayraqlar dəyişir | test eax, eax |
je label | Bərabərdirsə keç (ZF=1) | cmp sonrası op1 == op2 isə keçir | cmp eax, 0 → je done |
jz label | ZF=1 olarsa keç | ZF=1 olduqda (nəticə sıfırsa) — je ilə eyni şeydir | test eax, eax → jz zero |
jne label | Bərabər deyilsə keç | ZF=0 olduqda (nəticə sıfır deyil) | cmp eax, 1 → jne retry |
jnz label | ZF=0 olarsa keç | jne ilə tamamilə eynidir | test eax, eax → jnz not_zero |
1-ci kommanda heç bir şərt yaranmadan hədəf adresi keçməyə yarayır.5-ci kommanda şərti əgər 0-dırsa, yəni 0 flag birdirsə o zaman yerinə yetirilir.4-cü kommandada isə eynidirsə, yerinə yetiriləcəkdir.
| Instruksiya | Tərcümə / Məqsəd | İş prinsipi / Funksiyası | Nümunə |
|---|---|---|---|
call label | Funksiya çağırışı | label ünvanına jump edir və cari ünvanı stack-ə yazır (dönmək üçün) | call my_function |
ret | Funksiyadan dönüş | Stack-dən dönüş adresini oxuyur və o ünvana geri qayıdır | ret |
int num | Interrupt çağırışı | Sistemə və ya BIOS-a interrupt (siqnal) göndərir, int 0x80 → Linux syscalls | int 0x80 |
nop | Heç nə etmə | CPU 1 cycle boş işləyir. Boşluq qoymaq, alignment və ya bypass üçün istifadə olunur | nop |
RET kommandası qayıdış bildirir və funksiyanın bitməsi zamanı istifadə olunur.İNT 80 ilə BİOS üzərindən sistemə interrupt əmri verilir. CALL ilə isə həmin funksiya çağırılaraq icra edilir.
Bizi izləyin:
Telegram (Kanal): https://t.me/xakeraz_official
Paylaşımların səliqəli yığılmış halı: https://t.me/xakerazgroup
Fikir və şərhləriniz : https://t.me/xakerazchat