Sous Linux, Comment le code source C ++ devient-il des fichiers exécutables ou des bibliothèques statiques / dynamics? Et comment un programme est chargé en mémoire lorsqu’il s’exécute

Je sais que le code source peut être compilé et lié à une bibliothèque partagée / statique ou à des fichiers exécutables ELF. Et lorsque le programme est exécuté, il est chargé en mémoire et crée une image de process selon le format ELF. Mais je ne sais pas comment les programmes chargent des bibliothèques partagées. Comment un éditeur de liens cherche des symboles dans des bibliothèques externes et comment fonctionne l’archive .a Que puis-je savoir si le programme fonctionne sur un système d’exploitation 64 bits?

J’essaie d’en tirer une image complète. Quelqu’un peut-il donner un discours général sur le sujet et donner des références / documents / liens pour que je puisse les étudier un à un?

Merci d’avance.

Je pense que ma question peut être décrite comme suit:

Sous Linux, Comment le code source C ++ devient-il des fichiers exécutables ou des bibliothèques statiques / dynamics? Et comment un programme est chargé en mémoire lorsqu’il s’exécute. Dans les détails GREATE!

Et combien d’outils puis-je utiliser pour examiner / manipuler les fichiers binarys Linux (fichiers exécutables et bibliothèques)? Je connais certains comme “nm” “readelf”.

Vous pourriez lire:

  • l’ Assemblée Comment
  • Invite De Powerup à Bash
  • Wikipedia sur les appels système , le kernel Linux , la mémoire virtuelle , l’ espace d’adressage , le processus , le compilateur , l’ éditeur de liens , le langage d’assemblage , GCC , ELF
  • Livre de Levine sur les lieurs et les chargeurs
  • x86-84 , notamment à propos de la spécification ABI x86-64
  • le livre de programmation avancée Linux
  • plusieurs pages de manuel relatives aux appels système (2) , notamment intro (2) , execve (2) , mmap (2) , fork (2)
  • Écriture de virus ELF
  • Documentation GCC (notamment internes)
  • Documentation Binutils
  • Bibliothèque de programmes
  • Le papier de Drepper: comment écrire des bibliothèques partagées

et de bons livres sur le kernel Linux et la programmation d’applications.

Pour un début:

pages de manuel à lire: ld.so, ld, ar, gcc

utilitaires: readelf, nm, ldd, objdump, c ++ filt, gdb

32 vs 64 bit note: faites un readelf -a sur les versions 32 bits et 64 bits du même programme et différez la sortie. Notez la différence entre “interpréteur de programme demandeur” /lib/ld-linux.so.2 et /lib64/ld-linux-x86-64.so.2.