Comment déceler un langage
Résolu/Fermé
A voir également:
- Comment déceler un langage
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Débuter langage batch windows - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
22 juin 2015 à 23:23
22 juin 2015 à 23:23
Bonjour,
"comment par exemple, savoir qu'une application est développée en Java ou en C ?"
La structure des fichiers de résultats sont clairement différents, en C tu auras un .exe (sous Windows), en Java tu auras des .class rien que ça laisse peu d'ambiguïté entre les deux langages !
"comment par exemple, savoir qu'une application est développée en Java ou en C ?"
La structure des fichiers de résultats sont clairement différents, en C tu auras un .exe (sous Windows), en Java tu auras des .class rien que ça laisse peu d'ambiguïté entre les deux langages !
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
23 juin 2015 à 22:11
23 juin 2015 à 22:11
Vous parlez beaucoup de théorie :-). En pratique, il est souvent possible de deviner le langage et même le compilateur utilisé. Les compilateurs engendrent une empreinte reconnaissable entre tous. Par exemple, en regardant les sections, on apprend pas mal de chose sur le langage utilisé.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 juin 2015 à 22:34
23 juin 2015 à 22:34
Je suis d'accord :-)
Je ne connais pas la théorie propre aux programmes issus du C (je ne sais pas ce que tu entends par section par exemple). Moi ma théorie ce serait plutôt le Java, et même si les fichiers issus de Scala ou Groovy sont compilés rigoureusement dans le même format de bytecode qu'en Java - sans métadatas spécifiques du langage - on peut voir apparaître des schémas propre à tels ou tels langages, où l'utilisation d'un paradigme est plus poussé dans l'un que dans l'autre. J'imagine que c'est aussi ce que l'on doit voir apparaître dans les programmes issus du langage C++ par exemple, des blocs d'instructions spécifiques aux traitements d'objets caractéristiques que l'on ne retrouverait pas dans un programme écrit en C.
Je ne connais pas la théorie propre aux programmes issus du C (je ne sais pas ce que tu entends par section par exemple). Moi ma théorie ce serait plutôt le Java, et même si les fichiers issus de Scala ou Groovy sont compilés rigoureusement dans le même format de bytecode qu'en Java - sans métadatas spécifiques du langage - on peut voir apparaître des schémas propre à tels ou tels langages, où l'utilisation d'un paradigme est plus poussé dans l'un que dans l'autre. J'imagine que c'est aussi ce que l'on doit voir apparaître dans les programmes issus du langage C++ par exemple, des blocs d'instructions spécifiques aux traitements d'objets caractéristiques que l'on ne retrouverait pas dans un programme écrit en C.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
23 juin 2015 à 23:06
23 juin 2015 à 23:06
Les sections dont je parle sont les blocs des exécutables (PE, ELF, ...). Par exemple .data, .text.
En les lisant, tu peux récupérer pleins d'infos et deviner le langage, le compilateur, la version. Je parle donc là des langages compilés. Pour les autres, c'est souvent encore plus simple.
En les lisant, tu peux récupérer pleins d'infos et deviner le langage, le compilateur, la version. Je parle donc là des langages compilés. Pour les autres, c'est souvent encore plus simple.
C'est assez simple de deviner, si tu vois un truc du genre:
Ce n'est certainement pas écrit en assembleur ...
Après pour l'histoire des compilateurs qui laisse des traces dans le binaire, hmm le linker je veux bien, dans le header du programme.
Ex:
=
Mais honnêtement je n'ai jamais vu de chaines de caractère qui laisse présumer que le programme en question a été dev avec tel ou tel compilateur, langage.
Surtout dans la section .code (ou .text) qui contient que le code du programme et ses données dans .data.
Et le .rcdata sont pour custom les exécutables et apporter certaines données pour custome le gui du programme s'il finit une fenêtre.
mov rax, [rsp + 8] add rax, 3 mov [rsp + 8], rax
Ce n'est certainement pas écrit en assembleur ...
Après pour l'histoire des compilateurs qui laisse des traces dans le binaire, hmm le linker je veux bien, dans le header du programme.
Ex:
4D 5A 6C 00 01 00 00 00 02 00 00 00 FF FF 00 00 00 00 00 00 11 00 00 00 40 00 00 00 00 00 00 00 57 69 6E 36 34 20 50 72 6F 67 72 61 6D 21 0D 0A 24 B4 09 BA 00 01 CD 21 B4 4C CD 21 60 00 00 00 47 6F 4C 69 6E 6B 20 77 77 77 2E 47 6F 44 65 76 54 6F 6F 6C 2E 63 6F 6D
=
MZl.........ÿÿ..........@.......Win64 Program!..$'.º..Í!'LÍ!`...GoLink www.GoDevTool.com
Mais honnêtement je n'ai jamais vu de chaines de caractère qui laisse présumer que le programme en question a été dev avec tel ou tel compilateur, langage.
Surtout dans la section .code (ou .text) qui contient que le code du programme et ses données dans .data.
Et le .rcdata sont pour custom les exécutables et apporter certaines données pour custome le gui du programme s'il finit une fenêtre.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
24 juin 2015 à 18:41
24 juin 2015 à 18:41
Ben moi, j'en ai vu ;-). J'ai même déjà vu des données personnelles (nom de répertoire sur la machine...). Enfin c'est pas un problème nouveau... ;-).
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
24 juin 2015 à 18:49
24 juin 2015 à 18:49
Un
sstripsauvage apparaît! Que voulez-vous faire?
23 juin 2015 à 18:58
Je vois, mais en même temps je me suis peut-être mal exprimé...
Si on a des ".exe" ça veut dire que c'est uniquement du C ? Et comment le distinguer du C++ (qui donne aussi du ".exe" je crois) ?
Les Java ne peuvent donner de ".exe" ? Erreur de ma part alors...
Et les langages plus anciens (Cobolt, Pascal, Basic) que donnent-t-ils ?
23 juin 2015 à 19:50
Pour le C, le C++, le Pascal, même combat soit .exe soit .so, pour Java, Scala, Groovy des .class, pour Cobol je ne sais pas trop mais l'environnement cible étant les mainframe ce sera encore un format distinct spécifique à son environnement cible.
Modifié par shaynox le 24/06/2015 à 13:25