Upload
cesaire-gobert
View
112
Download
3
Embed Size (px)
Citation preview
1
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 emacsl'emacs X11 dans une fenêtre avec des menus ....rien de spécial à savoirl'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 csyntaxe
toute instruction terminée par « ; » :instrucion1; instruction2; instruction3les 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 intdéclaration d'un fonction : type_retour fonction ( type1 arg1, type2 arg2...) { i/* instructtions*/ return; }
Syntaxe boucle forfor (i=0;i >4; i++) { instructions;}
testif (condition) {instructions} else {instructions}
portabilité des variables : locales à une fonction, globalesles 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èqueexemple de fonction simple printf, atoi … elles sont documentées dans man -s 3exemple de fonction "appel systeme" write, getpid …elles sont documentées dans man -s 2on 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
compilation.o : gcc -o fonction.o fonction.c
edition de lienl'executable dynamique
gcc -o fonctiondyn fonction.cl'executable statique
gcc -static -o foncstatique fonction.c
comparer les taillesls -l fonction*pourquoi?
rechercher mafonction et write dans fonction.o, fonctiondyn fonctionstatique avec objdump -t pour les 3 objetsremarquer en dyn les nims non résolus
précision sur le rôle de la compilation et celui de l'édition de liencompilation
transformer des instruction de haut niveau en instruction de bas niveauimplanter les variables les fonctions => définition d'adresses pour ces items chacun dans leur zone
édition de liensprendre 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 executablesles sections d'un executable
fabriquer section.canalyser les sections .text .data .bss: recherche des variable "initialises" et "variable"
nmnm section.onm sectionstatiquenm -u sectiondyn
pour voir les undefinednm sectiondyn
objdumpobjdump -t sectiondyn|grep UND
pour voir les undefinedobjdump -t -j .data sectiondyn
pour voir la section .data et ses symbolesobjdump -t -j .text sectionstatiqueobjdump -t -j .bss sectionstatique
précisions sur les différentes sections d'un exécutable.text.data.bssstackle tasles 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 scriptsinterpréteurs différents de compilateurInterpréteur analyse les instructions puis les exécute immédiatementsh
exempleshello.shexemple d'enchainement de commande
pwd; echo bonjour; lsmettre le resultat d'une commande dans une variable
h=`ls`; for i in $h; do echo $i ; doneargumentsune boucle en sh
façon d'invoquer sh nomchmod +x nom ....puis nom
perlexemples
hello.plune boucle en perlarguments
exemple de traitement de chaineuid.pl
façon d'invoquer
Notion de processuslien fichier -> processus=executionPlusieurs exécutions même simultanées d'un même exécutable -> plusieurs processus
manipulation des processusps à fondtopcaractéristiques d'un process
executablesressources
espace mémoire (espace virtuel et espace réel)cpufichiers ou périphériques
pid et ppidutilisateuretat
vie d'un processusmode user mode kernel attente
foreground/backgroundcommande &
exemple avec emacsexemple avec boucle infiniejobs
^Zbgjobs
killSIGTERMSIGHUPGé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 redirectionsls puis ls >fichierwc <fichierls |wchello >fichierhello >>fichiertout processus possède stdin, stdout, stderr
ls /proc/pid/fd/echo bonjour >/proc/pid/fd/1
les pipesexemple de commande et explication
grep more wc tailsed et les expressions
l'arbre des processus, le processus initpstree
pstree -unotion de PID et PPID
exercice getpid getppidpourquoi il faut toujours un pere?exercice de création de processus
fork.cprocessus orphelins-> rôle de init
exercice orphelin.c
l'espace virtuelcat /proc/self/mapspgrep -u user -lpmap pid
pmap -d pidpour voir l'espace virtuel = implantation en mémoire
cat /proc/pid/maps avec la sortie précédente
man procpermet de voir des infos interessantes
/prod/pid/maps/proc/pid/environo/proc/self/
pour le process courant/proc/cpuinfo/proc/load