Comment déceler un langage

Résolu
zapp56 -  
 Utilisateur anonyme -
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 19031 Statut Modérateur 3 020
 
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
zapp56
 
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 19031 Statut Modérateur 3 020
 
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
Utilisateur anonyme
 
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 11653 Statut Contributeur 1 847
 
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 19031 Statut Modérateur 3 020
 
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 11653 Statut Contributeur 1 847
 
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
Utilisateur anonyme
 
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 11653 Statut Contributeur 1 847
 
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 5690 Statut Contributeur 1 224
 
Un
sstrip
sauvage apparaît! Que voulez-vous faire?
0