J'ai remarqué que la plupart de mes commandes/programmes du répertoire/bin sont compilés. Je souhaite dupliquer ce format de code non lisible moi-même. Quelqu'un peut-il me dire pourquoi et/ou comment ces programmes fonctionnent de cette manière?
[bonus timbre vert]: N'y a-t-il pas une commande bash pour imprimer tout le texte "lisible par l'homme" à partir d'un fichier?
Les commandes/programmes dans /bin
ne sont pas non lisibles, mais ils sont, comme vous le dites, compilés. Cela signifie qu'ils ont été initialement écrits en C (ou dans un autre langage de programmation) et ont été compilés en code machine (binaire) afin que le processeur puisse exécuter le code. Pour faire la même chose, écrivez simplement le programme dont vous avez besoin en C et exécutez la commande gcc
pour produire un fichier exécutable.
Pour imprimer un texte lisible par l'homme dans un fichier, utilisez strings < /bin/file
,
Introduction
Lorsqu'un programme est compilé à partir d'un code source dit C ou C++, un compilateur tel que gcc
(voir ci-dessous) traduit ce code dans le langage binaire natif de la CPU, afin que le programme puisse être exécuté. Ainsi le matériel lisible par l'homme (code source) est transformé en un format non lisible par l'homme (code binaire lisible par une machine).
Binaires et système de fichiers
Si vous entrez echo $PATH
, vous verrez l'emplacement de tous les exécutables du système, binaires et scripts compilés:
/home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Dans la hiérarchie du système de fichiers, des outils système clés tels que cat
et getty
sont présents dans /bin
et /sbin
, ainsi que d'autres outils tels que dpkg
et chroot
sont présents dans /usr/bin
et /usr/sbin
respectivement. Si vous compilez un programme en téléchargeant le code source, en configurant la construction et en l'installant, votre programme devrait par défaut aller dans /usr/local/bin
et ses autres fichiers dans la hiérarchie /usr/local
.
Compilateurs
L'un des outils les plus connus utilisé pour compiler les fichiers binaires est gcc
, connu sous le nom de GNU Collection de compilateur et plus tôt en tant que GNU C compilateur; la version livrée avec Ubuntu 12.04 est gcc 4.6.3
. Comme il est noté dans le GNUofficiel _ manual ,
GCC is an integrated distribution of compilers for several major programming
languages. These languages currently include C, C++, Objective-C, Objective-C++,
Java, Fortran, Ada, and Go.
Compiler un binaire
Les trois commandes ./configure
, make
et Sudo make install
(ou Sudo checkinstall
) sont souvent utilisées ensemble pour compiler un programme.
Lancer ./configure
, entre autres, vérifie la version de gcc
installée et prépare l'environnement de construction. La makefile
est l’un des éléments les plus importants générés par l’exécution de ./configure
car elle dirige la construction lorsque make
est exécuté. Le GNU make manual détaille le processus en profondeur. En résumé, les règles de la variable makefile
déterminent l’objectif principal (créer un exécutable) afin que les fichiers du code source .c
soient transformés en fichiers compilés (fichiers .o
) afin de: générer le fichier exécutable cible.
Ressources
Ces guides de compilation Ubuntu sont deux excellentes ressources here et here , ==, qui contiennent des informations et des conseils utiles à ceux qui débutent en compilation. D'autres ressources telles que le manuel GNU gcc
et le manuel make
que j'ai déjà mentionnées. Pour plus d'informations sur le C et la création d'un petit programme simple, voir le chapitre 22 de Rute et le chapitre 24 de la Ligne de commande Linux .
ne option: Si vous voulez voir le contenu des programmes compilés, utilisez un outil comme objdump pour vider le code de l'objet, par exemple:
objdump -d /bin/ls | less
Pour compiler des programmes Bash en fichiers binaires (je suppose que vous vous interrogez sur Bash parce que votre question est marquée bash), vous devez utiliser le programme Shc. Vous pouvez le télécharger à partir de ici . Après avoir décompressé l'archive, compilez et installez shc avec cd shc-3.8.9;make;Sudo make install
. Maintenant, exécutez shc -f filename
, où nom_fichier est le chemin du fichier que vous souhaitez convertir en un code non lisible. Shc créera deux fichiers: nomfichier.x.c et nomfichier.x . Vous pouvez vous débarrasser de nomfichier.x.c , nomfichier est le fichier non lisible.
Il y a 10 sortes de personnes différentes. Devinez que vous appartenez au deuxième groupe ...: P
Le répertoire bin contient uniquement des fichiers binaires (Binaires = Programmes dans le code binaire, uniquement 1 et 0)
Ils sont compilés pour être lisibles par une machine. Les machines connaissent 1 et 0 ou encore et encore, vrai ou faux, rien d’autre.
Ceci est fait par un compilateur. Il y a plus d'un compilateur. Je peux penser au compilateur Gnucc, ou au compilateur Java, ou à un compilateur Delphi ... Différents compilateurs pour différents langages de programmation.
Essayez grep. Bonne chance!