Donc, si j'ai tout compris correctement
Pas assez.
C'est un fichier binaire et ses données sont incompréhensibles pour nous les humains
En règle générale, un fichier binaire est incompréhensible pour l'homme et la machine, en particulier lorsque le but du fichier est inconnu. Notez que tous les fichiers binaires ne sont pas des fichiers exécutables. De nombreux fichiers binaires sont des fichiers de données qui ne contiennent aucune instruction machine. C'est pourquoi les extensions de fichiers sont utilisées pour nommer les fichiers (dans certains systèmes d'exploitation). Le . L' extension com a été utilisée par CP / M pour désigner un fichier exécutable. Le . L' extension exe a été ajoutée par MS-DOS pour désigner un autre format de fichier exécutable. * nixes utilise l'attribut execute pour indiquer quels fichiers peuvent être exécutés, bien qu'il puisse s'agir d'un script ou d'un code.
Comme déjà mentionné par d'autres, les fichiers binaires, qui contiennent des nombres, doivent être visualisés par un programme de vidage hexadécimal ou un éditeur hexadécimal et non par une visionneuse de texte.
il y a un exemple du contenu du programme ping.exe
Ce fichier est en fait un programme déplaçable et toutes les données de ce fichier ne représentent pas le code machine. Il y a des informations sur le programme telles que les bibliothèques dynamiques dont il a besoin, les routines qui doivent être liées, les exigences de pile et de mémoire de programme et de données, et le point d'entrée du programme. Les opérandes d'adresse dans le fichier peuvent être des valeurs relatives qui doivent être calculées en valeurs absolues ou des références qui doivent être résolues.
Le "fichier programme" auquel vous pensez probablement s'appelle un fichier image binaire ou un vidage de la mémoire programme. Un tel fichier ne contiendrait que du code machine et des données, avec toutes les références d'adresse correctement définies pour l'exécution.
même s'ils connaissent le code d'assemblage (le plus bas niveau de langage machine).
Le langage d'assemblage n'est pas le même que le langage machine . Le processeur typique (comme pour exclure les ordinateurs de haut niveau) accepte le code machine en entrée, une instruction à la fois. Les opérandes sont soit des registres, soit des adresses de mémoire numérique. Le langage d'assemblage est un langage de niveau supérieur qui peut utiliser des étiquettes symboliques pour les emplacements et les variables des instructions, ainsi que remplacer les codes d'opération numériques par des mnémoniques. Un programme en langage assembleur doit être converti en langage / code machine avant de pouvoir être exécuté (généralement par des utilitaires appelés assembleur, éditeur de liens et chargeur).
L'opération inverse, le désassemblage, peut être effectuée sur des fichiers de programme avec un certain succès et une perte d'informations symboliques. Le démontage d'un vidage de mémoire ou d'un fichier image de programme est plus d'essai et d'erreur, car les emplacements de code et de données doivent être identifiés manuellement.
BTW il y a des personnes qui peuvent lire et coder le code machine (numérique). Bien sûr, cela est beaucoup plus facile sur un processeur ou un microcontrôleur 8 bits qu'un processeur CISC 32 bits avec une douzaine de modes d'adresse mémoire.