This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:laborator-03 [2015/10/27 21:36] vladimir.diaconescu [JMP și JMP-if-condition] |
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 242: | Line 246: | ||
</code> | </code> | ||
- | <note important>Ce reprezintă $ în exemplul de mai sus? Dar valoarea 0x1c?</note> | + | <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 324: | 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]] |