Je comprends l'assemblage et le code C. J'ai le programme C suivant, compilé pour générer le fichier objet seulement.Quelles valeurs numériques définit dans le code C dissimulé?
#include <stdio.h>
int main()
{
int i = 10;
int j = 22 + i;
return 0;
}
J'ai exécuté la commande suivante
objdump -S myprogram.o
Sortie de commande ci-dessus est:
objdump -S testelf.o
testelf.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
#include <stdio.h>
int main()
{
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 10 sub $0x10,%esp
int i = 10;
6: c7 45 f8 0a 00 00 00 movl $0xa,-0x8(%ebp)
int j = 22 + i;
d: 8b 45 f8 mov -0x8(%ebp),%eax
10: 83 c0 16 add $0x16,%eax
13: 89 45 fc mov %eax,-0x4(%ebp)
return 0;
16: b8 00 00 00 00 mov $0x0,%eax
}
1b: c9 leave
1c: c3 ret
Qu'est-ce que l'on entend par numérique numéro avant que les commandes mnémoniques -à-dire "83 CE10" avant " commande "sub" ou "c7 45 f8 0a 00 00 00" avant la commande "movl"
J'utilise la plate-forme suivante pour compiler ce code:
$ lscpu
Architecture: i686
CPU op-mode(s): 32-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Vendor ID: GenuineIntel
Ce sont les séquences de codes machine dans lesquelles les instructions d'assemblage ont été assemblées. Voir [Manuels Intel] (http://www.intel.com/content/www/fr/processors/architectures-software-developer-manuals.html) pour une référence complète du jeu d'instructions et des informations sur la façon de mapper les instructions à code machine (et vice versa). – Michael
Notez que, si vous voulez étudier la sortie de l'assemblage d'un petit programme de test comme celui-ci, le compilateur peut optimiser le code inutile. Dans ce cas probablement tout parce que j n'est jamais utilisé. – Unimportant
Notez que ceci est [syntaxe AT & T] (http://www.imada.sdu.dk/Courses/DM18/Litteratur/IntelnATT.htm), donc il ne correspond pas directement à la syntaxe représentée dans les manuels Intel. –