Bonjour à tous,
voici mon code :
#include <stdio.h>
void main(){
fprintf(stdout, "bonjour");
return 0;
}
Quand je compile mon programme avec : gcc mon_programme.c ,le compilateur va (furtivement) inclure des libs de la glibC car j'utilise la fonction fprintf(). Mais quand j'exécute mon programme : a.out, il faut également lancer dans la mémoire ram la fonction fprintf que j'ai besoin non ? comment ca marche ? quand je lance le programme, est ce qu'il y a un autre programme qui va regarder les fonctions des libs que j'utilise pour les mettres dans la RAM et leurs donner les bonnes adresses de pointage pour l'appelle de ces fonctions ?
Merci d'avance pour votre aide
# Dynamique vs statique
Posté par Benoît Sibaud (site web personnel) . Évalué à 7. Dernière modification le 20 janvier 2019 à 20:34.
Dans le premier cas, la fonction est fournie dynamiquement. Dans le second cas, elle est embarquée dans le binaire. Avec des conséquences sur la taille du binaire, la disponibilité de la bibliothèque à l'exécution, la possibilité de remplacer cette bibliothèque pour correction ou par malveillance, etc.
Pour aller plus loin (mais ça devient plus technique), une discussion twitter récente #prod365 #fr Un peu de #linux #internals: quels sont les mécanismes du #kernel pour lire et executer un programme?
[^] # Re: Dynamique vs statique
Posté par cimcim . Évalué à 4.
L'utilitaire "strace" est également bien utile pour voir le cheminement des appels lors du chargement des librairies dynamiques.
On peut voir dans ce log, un premier accès au fichier "/etc/ld.so.cache", qui permet au système de retrouver la librairie libc, qu'il va ensuite ouvrir
Le système va ensuite faire un mmap de la fonction fprintf, qui appelle elle même d'autres fonctions (qui sont également mmapée), jusqu'à l'appel final qu'on peut voir vers la fin du log:
# Le processus.
Posté par Anthony Jaguenaud . Évalué à 3.
En supposant que tu lances depuis une ligne de commande bash.
execv
qui va remplacer le processus actuel par l’exécutable en paramètre.[^] # Re: Le processus.
Posté par cosmoff . Évalué à 1.
merci beaucoup pour vos réponses, vous avez répondu à mon probleme !
Merci encore !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.