voila j' ai eu un problème avec certain de mes fichier.c qui se sont éffacés. Il me reste toutefois les fichier objets.Je n'ai pas le courage de retaper les prog perdus n y aurait il pas un moyen de récupérer les .c a partir des .o?
Merci
Version imprimable
voila j' ai eu un problème avec certain de mes fichier.c qui se sont éffacés. Il me reste toutefois les fichier objets.Je n'ai pas le courage de retaper les prog perdus n y aurait il pas un moyen de récupérer les .c a partir des .o?
Merci
Rien d'efficace.
C'est comme prendre trois tonnes de Hamburger et tenter de reconstruire la vache...
:':cry: merci quand meme...
Bonjour,
TOUJOURS faire des sauvegardes, suffisamment souvent, et en nombre suffisant également (pouvoir remonter de plusieurs versions, le cas échéant).
Tu veux dire un éléphant ?Citation:
Envoyé par Médinoc
Non, car je comptais tout le hamburger (pas que la viande) dans le calcul de la masse.
J'avais répondu ça à une question similaire :
La compilation est à sens unique, il y a perte d'information (notamment lorsqu'il y a des optimisations (genre fonction inline) ou dans les noms de variables, des tableaux).
Pour te donner une exemple, le code suivant :
Va déjà être passé en code 3 adresses (avant d'être compilé) qui ressemblent à ça :Code:
1
2
3
4
5
6
7
8
9
10
11 int a; a= 2; if(a==2*3+1) { int a = 1; } else { a = 2; }
Il a perte d'information : au niveau des structures de contrôles, au niveau du nom des variables. Et il y a ajout de variables temporaires. Evidemment l'exemple que j'ai donné dépend du code 3 adresses que l'on choisi.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 /*variable utilisateur*/ int u1, u2; /*variable temporaire*/ int v1,v2; bool v3; u1 = 2; v1 = 2; v2 = 3; v1 = v1 * v2; v2 = 1; v1 = v1 + v2; u1 = v1; v3 = u1==v1 if(!v3) goto else u2 = 1; goto fin else: u1 = 2; fin:
Tu pourras également remarquer que 2 variables déclarées dans deux blocs différents ont des noms différents.
D'ailleurs, si l'on compile avec -S -O0, on trouve le code assembleur suivant :
Ce qui serait équivalent au code 3 adresses :Code:
1
2
3
4
5
6
7
8
9
10
11
12 /*on met 2 dans a qui est représenté par un registre = la pile ici*/ movl $2, -4(%ebp) cmpl $7, -4(%ebp) /*on voit qu'il a optimisé la partie 2*3+1 que j'avais découpé*/ jne L2 /*on met dans une autre partie de la pile, pas comme a*/ movl $1, -8(%ebp) jmp L3 L2: /*on met bien dans a*/ movl $2, -4(%ebp) L3:
Si tu testes, tu peux te rendre compte que le code d'origine (je parle sans optimisation) est totalement équivalent dans le code exe à :Code:
1
2
3
4
5
6
7
8 v1 = 2; if(!v1==7) goto L2 v2 = 1; goto L3: L2: v1 = 2; L3:
Si tu fais une optimisation, tout le bloc des if/else va disparaitre...Code:
1
2
3
4
5
6
7
8 int d; int salut; d= 2; if(d==7) salut = 1; else d = 2;
je suis pas sur mais il existe pourtant des décompilateurs non ?
si elle compile son .o en éxecutable et qu'elle utilise un décompilateur elle ne pourra pas retrouver au moins une partie du code ?
Marche pas (EDIT) sur du code optimisé. Sinon, le code produit est difficile à lire. On a pas la sémantique des fonctions et des variables. On a que la structure du code (même pas des données).Citation:
Envoyé par NeMo_O
et en plus les commentaires ont disparus 8O
Normal cela ne sert strictement à rien de mettre dans un executable des commentaires puisqu'ils sont destinés au programmeur.Citation:
Envoyé par souviron34