Comment déceler un langage

Résolu/Fermé
zapp56 - 22 juin 2015 à 23:13
 Utilisateur anonyme - 24 juin 2015 à 23:30
Bonsoir,

Nouveau en programmation (affirmé en VB, basique en Basic, C, C++, Java, javascript, HTML) ma question est simple, mais la réponse promet d'être complexe :
Comment déceler la conception d'une application. A savoir, comment par exemple, savoir qu'une application est développée en Java ou en C ?

Merci d'avance,
Cordialement.
A voir également:

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
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 !
0
Merci de ta réponse.

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 ?
0
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 à 19:50
Peu importe le langage, une fois passé dans le compilateur le fichier exécutable est caractéristique de l'environnement cible (en rien spécifique au langage source) : un .exe pour un exécutable Windows, un .so (?) pour un exécutable Linux, des .class pour l'environnement Java.
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.
0
En résumé, on ne peut pas savoir, car tout est traduit en instruction binaire (équivaux à l'assembleur, quand traduit en mot anglais court: mov, add, jmp, ...) quel que soit le langage employé et l'environnement utiliser (OS, CPU).
0
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
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é.
0
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
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.
0
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
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.
0
C'est assez simple de deviner, si tu vois un truc du genre:

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.
0
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
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... ;-).
0
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
Un
sstrip
sauvage apparaît! Que voulez-vous faire?
0