Si consideri il seguente codice, compilato su un 32 bit Ubuntu 14.04.2
con gcc 4.8.2
Che significato ha, se esiste, il byte Mod R/M per l'istruzione di salto incondizionato 0xFF?
#include <unistd.h>
int main(){
_exit(0);
}
Se apro questo codice in gdb
e corro disas /r _exit
, ricevo il seguente.
(gdb) disas /r _exit
Dump of assembler code for function [email protected]:
0x080482f0 <+0>: ff 25 0c a0 04 08 jmp *0x804a00c
0x080482f6 <+6>: 68 00 00 00 00 push $0x0
0x080482fb <+11>: e9 e0 ff ff ff jmp 0x80482e0
End of assembler dump.
(gdb)
Il manuale di Intel ci dice che ff
è il codice operativo per JMP
, mentre gli ultimi quattro byte sono chiaramente l'indirizzo di destinazione. Dopo alcune ricerche sulla struttura delle istruzioni Intel, lo 25
sembra essere un byte Mod R/M
, ma non sono riuscito a trovare il modo in cui il byte Mod R/M
deve essere interpretato rispetto all'istruzione JMP
.
Ho già letto su general interpretation of the Mod R/M byte, ma non capisco quale significato specifico il byte porti nell'output disas
in alto.
Qual è il significato specifico di 0x25
qui e qual è l'interpretazione generale del byte Mod R/M
rispetto a JMP
?