|----------------| |IMPORTANT: | |ssh 172.16.3.173| |----------------| 1) uname -a système d'exploitation = 64 bits 2)lscpu architecture = x86_64 3) as -gstabs -o exe.o test.s ld -O0 -o exe exe.o ./exe file exe l - = affiche les lignes de code de n1 à n2 i r = information X / = examine = string [s / step] = suivant = décomposition du string b = breakpoint ---------------------------------------- adr , = met une variable dans une addresse ldr ,[] = load (charge dans un registre la valeur stocké dans une adresse) str ,[] = store (décharge la valeur stocké dans un registre à une adresse) sxtw = Sign eXTend Word (étend le bit de signe dans à la destination dans le registre d'origine) sxts --> 64 bits sxtw --> 32 bits sxth --> 16 bits sxtb --> 8 bits uxt? --> Unsigned eXTend * xzr = 0 add = met le resultat de nb1 et nb2 dans dest adds .. = parreille sauf que ça met à jour les flags NZCV flags: N = négatif Z = si résultat nul V = en cas de débordement C = retenus sortante nrs x4, nzcv = met dans x4 les flags nzcv lsl = logical shift left (décale les bit vers la gauche (multiplie)) lsr = logical shift left (décale les bit vers la droite (divise)) asr = (décalage à droite, plus met le bit de signe sur les bits libérer à gauche) ont peut faire une addition et un décalage en une seul opération. ex: add x1,x0,x0,lsl #4 => x0 + x0*2**4 => x0 + 16*x0 => 17*x0 ex:sub x1,xzr,x2,lsl #3 => 0 - x2*2**3 => -8*x2 Les registre vont de 1 à 12 (et ont une lettre devant x,w,h,b) objdump -d exe => traduit l'exécutable en language machine (chaque instruction à un codage binaire) ex: 8b001001 add x1, x0, x0, lsl #4 Une instruction est donc codé sur 32 bits "8b001001" codage: add {, #} ex: add w1,w4,w7,asr #8 0 0001011 00 0 00111 001000 00100 00001 --------------------------------------------------------------------------- TP19 -------------------------------------------------------------------------- test: gt > ge >= lt < le <= eq == ne !=