Formation Linux :exécutables et processus SIM 21 octobre 2013
Des éditeurs: vi : l’éditeur de base nano: un emacs like emacs: puissant, adaptable manipulation d'un éditeur de texte (emacs) sur un texte libre différentes façons de lancer emacs l'emacs X11 dans une fenêtre avec des menus ....rien de spécial à savoir l'emacs -nw dans un xterm -> principales commandes (mnémoniques) Essayer: mode insertion/mode overwrire déplacements suppressions couper coller ouverture/enregistrement/quitter vérifier le résultat obtenu dans le fichier et rééditer le fichier
premiers pas en c syntaxe toute instruction terminée par « ; » :instrucion1; instruction2; instruction3 les blocs encadrés par {} : {instruction1; instruction2;} variable doit etre declarée : types : int , char, pointeur, tableau lecture des types : int tab[100]; char buf[256]; int *p; tableau de pointeur sur entier : int *tab[100] lire *tab[x] est de type int donc tab[x] est de type pointeur sur int déclaration d'un fonction : type_retour fonction ( type1 arg1, type2 arg2...) { i/* instructtions*/ return; } Syntaxe boucle for for (i=0;i >4; i++) { instructions;} test if (condition) {instructions} else {instructions} portabilité des variables : locales à une fonction, globales les includes #include <stdio.h> integration de /usr/include/stdio.h #include "./toto.h" ntégration de ./toto.h les fonctions déjà définies (contenues dans une bibliothèque exemple de fonction simple printf, atoi … elles sont documentées dans man -s 3 exemple de fonction "appel systeme" write, getpid …elles sont documentées dans man -s 2 on les utilise mais on ne les réécrit pas .... ç'est le rôle de l'éditeur de lien d'aller chercher les fonctions manquantes
différence entre compilation et edition de lien .o : gcc -o fonction.o fonction.c edition de lien l'executable dynamique gcc -o fonctiondyn fonction.c l'executable statique gcc -static -o foncstatique fonction.c comparer les tailles ls -l fonction* pourquoi? rechercher mafonction et write dans fonction.o, fonctiondyn fonctionstatique avec objdump -t pour les 3 objets remarquer en dyn les nims non résolus précision sur le rôle de la compilation et celui de l'édition de lien transformer des instruction de haut niveau en instruction de bas niveau implanter les variables les fonctions => définition d'adresses pour ces items chacun dans leur zone édition de liens prendre tous les objets intermédaires (*.o) générés par les phases de compilation , ajouter les bibliothèques pour créer un executable autosuffisant assembler les différents "morceaux" en recalculant les adresses (translation d'adresse) dans le cas d'édition de lien dynamique le code d'une fonction ne sera ajouter qu'au lancement du programme=> dans l'executable on ne fait que noter les dépendances de noms manquants les bibliothèques rôle de LD_LIBRARY_PATH voir avec ldd : ldd fonctiondyn cp /lib/libc.so.6 . ; export LD_LIBRARY_PATH=. ldd fonctiondyn
format executables les sections d'un executable fabriquer section.c analyser les sections .text .data .bss: recherche des variable "initialises" et "variable" nm nm section.o nm sectionstatique nm -u sectiondyn pour voir les undefined nm sectiondyn objdump objdump -t sectiondyn|grep UND objdump -t -j .data sectiondyn pour voir la section .data et ses symboles objdump -t -j .text sectionstatique objdump -t -j .bss sectionstatique précisions sur les différentes sections d'un exécutable .text .data .bss stack le tas les nom de fonctions , de variables sont dans une table des symboles (c'estce que manipule ld, nm, objdump) readelf readelf -a sectiondyn utilisation de strip supprime la table des symboles
les scripts interpréteurs différents de compilateur Interpréteur analyse les instructions puis les exécute immédiatement sh exemples hello.sh exemple d'enchainement de commande pwd; echo bonjour; ls mettre le resultat d'une commande dans une variable h=`ls`; for i in $h; do echo $i ; done arguments une boucle en sh façon d'invoquer sh nom chmod +x nom ....puis nom perl hello.pl une boucle en perl exemple de traitement de chaine uid.pl
Notion de processus lien fichier -> processus=execution Plusieurs exécutions même simultanées d'un même exécutable -> plusieurs processus
manipulation des processus ps à fond top caractéristiques d'un process executables ressources espace mémoire (espace virtuel et espace réel) cpu fichiers ou périphériques pid et ppid utilisateur etat vie d'un processus mode user mode kernel attente foreground/background commande & exemple avec emacs exemple avec boucle infinie jobs ^Z bg kill SIGTERM SIGHUP Génération de fichiers core : boucleinfinie &; kill %1 ….refaire après ulimit –c unlimited Examiner avec gdb boucleinfinie core
les file descripteurs et les entrées sorties standard et redirections ls puis ls >fichier wc <fichier ls |wc hello >fichier hello >>fichier tout processus possède stdin, stdout, stderr ls /proc/pid/fd/ echo bonjour >/proc/pid/fd/1 les pipes exemple de commande et explication grep more wc tail sed et les expressions
l'arbre des processus, le processus init pstree pstree -u notion de PID et PPID exercice getpid getppid pourquoi il faut toujours un pere? exercice de création de processus fork.c processus orphelins-> rôle de init exercice orphelin.c
l'espace virtuel cat /proc/self/maps pgrep -u user -l pmap pid pmap -d pid pour voir l'espace virtuel = implantation en mémoire cat /proc/pid/maps avec la sortie précédente man proc permet de voir des infos interessantes /prod/pid/maps /proc/pid/environ o /proc/self/ pour le process courant /proc/cpuinfo /proc/load