User Tools

Site Tools


laboratoare:laborator-03

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator-03 [2015/10/27 21:17]
vladimir.diaconescu [Resurse utile]
laboratoare:laborator-03 [2016/10/16 23:51] (current)
mihai.tiganus [[10p] BONUS: Lab 2, Reloaded (in Assembly)]
Line 29: Line 29:
  
 <code asm> <code asm>
-mov al, 12 <-> \xB0\x0C +mov al, 12 <​-> ​'\xB0\x0C' 
-xor dx, dx <-> \x66\x31\xD2 +xor dx, dx <​-> ​'\x66\x31\xD2' 
-jmp esp    <-> \xFF\xE4+jmp esp    <​-> ​'\xFF\xE4'
 </​code>​ </​code>​
  
Line 75: Line 75:
  
 Există cazuri în care se impun constrângeri asupra dimensiunii codului și/sau datelor, cum este cazul device-urilor specializate pentru un singur task, având puțină memorie. Din această categorie fac parte și driverele pentru dispozitive. Există cazuri în care se impun constrângeri asupra dimensiunii codului și/sau datelor, cum este cazul device-urilor specializate pentru un singur task, având puțină memorie. Din această categorie fac parte și driverele pentru dispozitive.
 +
 +=== Fun ===
 +
 +Pentru mai multe detalii, discutați asistentul vostru de laborator pentru a vă împărtăși experiența lui personală în materie de limbaj de asamblare și cazurile practice de utilizare folosite.
  
 ===== Familia x86 ===== ===== Familia x86 =====
Line 207: Line 211:
     ret     ret
 </​code>​ </​code>​
 +
 +Așa cum am precizat, instrucțiunile de tip **jmp** pot primi ca argument un registru care să conțină adresa la care se va face salt, sau un offset relativ față de poziția curentă în program (sau, mai bine spus, față de registrul **eip**).
 +
 +Puteți urmări aceste două aspecte în exemplul de mai jos.
 +
 +<code asm>
 +%include "​io.inc"​
 +extern puts
 +
 +section .data
 +    string1: db "This looks convoluted",​0
 +    string2: db "Where are we going?",​0
 +
 +section .text
 +global CMAIN
 +CMAIN:
 +    mov ebp, esp
 +    mov eax, zone2
 +    jmp eax       ; jmp to whatever eax contains
 +zone1:
 +    lea eax, [string2]
 +    push eax
 +    call puts
 +    pop eax
 +    jmp exit
 +zone2:
 +    lea eax, [string1]
 +    push eax
 +    call puts
 +    pop eax
 +    jmp $-0x1c ​   ; relative offset jump
 +exit:
 +    ret
 +</​code>​
 +
 +<note important>​Ce reprezintă **$** în exemplul de mai sus? Dar valoarea **0x1c**?</​note>​
  
 Instrucțiunile de tipul **jump-if-condition** se aseamănă cu **if** din C. Aceste instrucțiuni folosesc drept condiții indicatorii de stare din registrul ''​%%EFLAGS%%''​. E foarte important de ținut minte faptul că acest registru indică contextul de execuție al instrucțiunii curente și se modifică după fiecare instrucțiune. Instrucțiunile de tipul **jump-if-condition** se aseamănă cu **if** din C. Aceste instrucțiuni folosesc drept condiții indicatorii de stare din registrul ''​%%EFLAGS%%''​. E foarte important de ținut minte faptul că acest registru indică contextul de execuție al instrucțiunii curente și se modifică după fiecare instrucțiune.
Line 288: Line 328:
   - [30p] Modificați-l astfel încât la rularea lui să se afișeze mesajul ''​%%Well done!%%''​. Urmăriți comentariile marcate cu ''​%%TODO%%''​   - [30p] Modificați-l astfel încât la rularea lui să se afișeze mesajul ''​%%Well done!%%''​. Urmăriți comentariile marcate cu ''​%%TODO%%''​
   - [10p] De ce, în continuare, se afișează și mesajul greșit? Ce lipsește?   - [10p] De ce, în continuare, se afișează și mesajul greșit? Ce lipsește?
 +==== [10p] BONUS: Fibonacci ====
 +Calculați al ''​eax''​-lea număr Fibonacci.
 ===== Resurse utile ===== ===== Resurse utile =====
 +* [[http://​savannah.nongnu.org/​projects/​pgubook/​|Programming from the Ground Up]]
 +* [[http://​beginners.re/​|Reverse Engineering for Beginners]]
 * [[http://​www.intel.com/​content/​dam/​www/​public/​us/​en/​documents/​manuals/​64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf|Intel 64 and IA-32 Architectures Software Developer Manual]] * [[http://​www.intel.com/​content/​dam/​www/​public/​us/​en/​documents/​manuals/​64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf|Intel 64 and IA-32 Architectures Software Developer Manual]]
 * [[http://​css.csail.mit.edu/​6.858/​2015/​readings/​i386.pdf|Intel 80386 Programmer'​s Reference Manual]] * [[http://​css.csail.mit.edu/​6.858/​2015/​readings/​i386.pdf|Intel 80386 Programmer'​s Reference Manual]]
 * [[http://​cs.stanford.edu/​people/​eroberts/​courses/​soco/​projects/​risc/​risccisc/​|RISC vs. CISC]] * [[http://​cs.stanford.edu/​people/​eroberts/​courses/​soco/​projects/​risc/​risccisc/​|RISC vs. CISC]]
 * [[http://​unixwiz.net/​techtips/​x86-jumps.html|Intel x86 JUMP Quick Reference]] * [[http://​unixwiz.net/​techtips/​x86-jumps.html|Intel x86 JUMP Quick Reference]]
laboratoare/laborator-03.1445973448.txt.gz · Last modified: 2015/10/27 21:17 by vladimir.diaconescu