242 - exec et recouvrement de processus Flashcards

1
Q

Principe du recouvrement de processus (demander à changer de programme exécuté)

A
  • Vérifier l’existence et droits d’exécution
  • Écraser le segment de code avec le nouvel exécutable * Écraser les données statiques
  • Réinitialiser tas et pile
  • Positionner correctement les registres
  • Mettre à jour les données internes du SE
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Autodestruction car…

A
  • Pendant un recouvrement, code et données sont inutilisables
  • À la fin il n’en reste rien
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Autodestruction sans risque car…

A
  • Tout est fait par le SE avec les données du SE
  • Le code et les données du processus ne participent pas au
    recouvrement (heureusement)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Appel système exec

A

int execve(const char *filename, char *argv[], char *envp[])

execl, execlp, execle, execv, execvp
* v : passage par vecteur (char *argv[])
* l : passage par liste (char *argv, …)
* p : utilisation de PATH pour trouver l’exécutable
* e : précision des variables d’environnement

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

perdues après un execve

A

Perdu : quelques trucs
* Segments mémoires (code, données statiques, tas, pile, etc.)
* Threads
* Gestionnaires de signaux…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

conservé après un execve

A

Conservé : tout le reste
* Identité : pid, parent, etc.
* Caractéristiques : Utilisateur, droits, priorité, etc.
* Entrées sorties : répertoire courant, fichiers ouverts, etc.
* Statistiques : consommation ressources

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Format des exécutables binaires

A
  • ELF pour Unix
  • PE pour Windows
  • D’autres formats historiques ou +/- répandus existent
    → Un noyau pourrait connaitre plusieurs formats
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Point d’entrée indique…

A

l’adresse de la première instruction machine du programme

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

ELF: Executable and Linking Format

A

ELF: Executable and Linking Format
* elf(5) pour le format
* objdump(1) ou readelf(1) pour afficher l’information
* nm(1) pour juste lister les symboles

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Contenu des exécutables binaires

A

De l’information pour le système
* Quels blocs d’octets charger ?
* À quelle adresse dans la mémoire ? * Avec quels droits rwx ?
* Quelle est la taille du BSS ?
* Etc.
Et plein d’autres choses
* Pour l’éditeur de liens
* Pour l’éditeur de liens dynamiques * Pour le débogueur
* Etc.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Que se passe-t-il entre _start et main ?

A

Quoi faire entre _start et main ?
* Charger les bibliothèques (dont la libc!)
* Préparer des segments mémoires
* Instancier des objets globaux
→ Le processus est responsable

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Symbole _start

A
  • Sous Unix, c’est souvent le point d’entrée
  • L’éditeur de liens décide
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Comment forcer le start a une fct qui n’est pas main ?

A

gcc nostart.c -nostdlib -static -e debut
→ Pas portable, mais ça fonctionne

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Interpréteurs de scripts (shebang #!)

A

Si un fichier est exécutable et commence par « #! » :
* Le système exécute le programme
* Avec le chemin du fichier en argument
→ Ça peut être n’importe quel programme
→ C’est automatique

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Utilisation habituelle du shebang

A

Exécuter un programme dans un langage de script
* Exemple « #!/bin/bash »

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Pourquoi # ?

A
13
Q

problème du shebang

A

Chemin absolu
* Solution utiliser /usr/bin/env
* env(1) exécute un programme trouvé dans le PATH
* Exemple « #!/usr/bin/env python »

14
Q

Formats binaires divers

A

binfmt_misc (miscellaneous binary format)
* Permet d’associer des interpréteurs à des binaires quelconques
* En fonction de l’extension ou d’un nombre magique

Exemples
* Exécuter des .jar directement avec java * Exécuter des .exe directement avec wine

15
Q

Exécutables dynamiquement liés

A
  • En gros, une bibliothèque dynamique exécutable
  • Mode de compilation par défaut des distributions modernes * On parle de PIE (position independent executable)
16
Q

Problème des exécutables dynamiquement liés

A

Problème
Pour être utilisable, une bibliothèque doit être liée
Solution
* Champ PT_INTERP (ELF) indique le chemin d’éditeur de liens dynamiques (habituellement ld.so)
* Le noyau le charge et l’exécute
* Qui va lier et exécuter le programme ?
* C’est de la vraie magie noire