Comment déceler un langage
Résolu
zapp56
-
Utilisateur anonyme -
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.
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:
- Comment déceler un langage
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
2 réponses
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 !
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é.
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.
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.
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 ?
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.