https://github.com/rabouzia/ft_nm
Literally just coded nm to understand elf, nothing else.
https://github.com/rabouzia/ft_nm
binary c elf64 nm
Last synced: 11 months ago
JSON representation
Literally just coded nm to understand elf, nothing else.
- Host: GitHub
- URL: https://github.com/rabouzia/ft_nm
- Owner: rabouzia
- Created: 2024-11-27T21:14:33.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-25T12:00:16.000Z (12 months ago)
- Last Synced: 2025-06-25T13:18:40.076Z (12 months ago)
- Topics: binary, c, elf64, nm
- Language: Roff
- Homepage:
- Size: 1.48 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## FT_NM
- [ ] clean code
- [ ] add bonus
- [x] fix leak
- [x] test with other binary
ft_nm
ft_nm est une réimplémentation en C de la commande UNIX nm, utilisée pour afficher la table des symboles d’un fichier objet ELF (Executable and Linkable Format). Ce projet fait partie des exercices de bas niveau pour comprendre le fonctionnement interne des binaires et des formats ELF.
📌 Objectif
Reproduire le comportement principal de la commande nm GNU, en supportant :
les formats ELF 32 bits et 64 bits,
l’analyse des sections .symtab et .strtab,
l’affichage des symboles définis et indéfinis avec leurs :
adresses,
types (T, U, B, etc.),
noms.
⚙️ Fonctionnalités
Prise en charge des options :
-a : affiche tous les symboles (même ceux utilisés par les debuggers),
-g : affiche uniquement les symboles globaux,
-u : affiche uniquement les symboles indéfinis,
-p : désactive le tri par ordre alphabétique,
-r : inverse l’ordre du tri.
Lecture manuelle du fichier ELF :
parsing de l’en-tête ELF,
parsing des sections et de la table des symboles,
gestion fine des offsets et pointeurs,
filtrage de symboles inutiles (comme __PRETTY_FUNCTION__.*).
🧠 Ce que j’ai appris
Manipulation bas niveau des fichiers binaires ELF.
Compréhension des structures ELF (Elf32_Ehdr, Elf64_Shdr, etc.).
Manipulation des bits, cast mémoire, tri personnalisé.
Analyse et comparaison de la sortie avec l’outil nm.
🧪 Test
La sortie de ./ft_nm est comparée à celle de la commande système nm pour s’assurer de la conformité. Les différences de sortie sont minimisées en excluant les symboles non pertinents ou absents selon les options.
tester 1: [tester 1](https://github.com/jmbcorp999/42-Nm-Tester)
tester 2: g[tester 1](https://github.com/jemercie/nm_tester)