99 lines
2.3 KiB
Plaintext
99 lines
2.3 KiB
Plaintext
|
|
||
|
|----------------|
|
||
|
|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 <nb1>-<nb2> = affiche les lignes de code de n1 à n2
|
||
|
i r <registre> = information
|
||
|
X /<type> <adresse> = examine
|
||
|
<type=s> = string
|
||
|
[s / step] = suivant
|
||
|
<type=14cb> = décomposition du string
|
||
|
b <numLigne> = breakpoint
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
adr <addresse>,<variable> = met une variable dans une addresse
|
||
|
ldr <registre>,[<valeur>] = load (charge dans un registre la valeur stocké dans une adresse)
|
||
|
str <registre>,[<valeur>] = store (décharge la valeur stocké dans un registre à une adresse)
|
||
|
|
||
|
sxtw <registreDest> <registreSrc> = 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 <dest><nb1><nb2> = 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 <rd><rn><rm>{, <shift> #<amount>}
|
||
|
ex: add w1,w4,w7,asr #8
|
||
|
0<sf si l'opération se dait sur 64 bits, 0 si elle se fait sur 32>
|
||
|
0001011<add>
|
||
|
00<shift ex:lsl/lsr>
|
||
|
0<toujours 0>
|
||
|
00111<rm>
|
||
|
001000<amount>
|
||
|
00100<Rn>
|
||
|
00001<Rd>
|
||
|
|
||
|
---------------------------------------------------------------------------
|
||
|
TP19
|
||
|
--------------------------------------------------------------------------
|
||
|
test:
|
||
|
gt >
|
||
|
ge >=
|
||
|
lt <
|
||
|
le <=
|
||
|
eq ==
|
||
|
ne !=
|