{"id":28198838,"url":"https://github.com/rabouzia/ft_nm","last_synced_at":"2025-07-07T00:04:08.234Z","repository":{"id":287461962,"uuid":"895253702","full_name":"rabouzia/ft_nm","owner":"rabouzia","description":"Literally just coded nm to understand elf, nothing else.","archived":false,"fork":false,"pushed_at":"2025-06-25T12:00:16.000Z","size":1553,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-25T13:18:40.076Z","etag":null,"topics":["binary","c","elf64","nm"],"latest_commit_sha":null,"homepage":"","language":"Roff","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rabouzia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-27T21:14:33.000Z","updated_at":"2025-06-25T12:00:19.000Z","dependencies_parsed_at":"2025-04-11T21:39:09.005Z","dependency_job_id":"0288a9a7-4636-4d43-bc30-12e4b2803c9d","html_url":"https://github.com/rabouzia/ft_nm","commit_stats":null,"previous_names":["rabouzia/ft_nm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rabouzia/ft_nm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabouzia%2Fft_nm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabouzia%2Fft_nm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabouzia%2Fft_nm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabouzia%2Fft_nm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rabouzia","download_url":"https://codeload.github.com/rabouzia/ft_nm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabouzia%2Fft_nm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263991428,"owners_count":23540663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary","c","elf64","nm"],"created_at":"2025-05-16T18:14:06.976Z","updated_at":"2025-07-07T00:04:08.217Z","avatar_url":"https://github.com/rabouzia.png","language":"Roff","funding_links":[],"categories":[],"sub_categories":[],"readme":"## FT_NM\n\n\n- [ ] clean code\n- [ ] add bonus\n- [x] fix leak\n- [x] test with other binary\n\nft_nm\nft_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.\n\n📌 Objectif\nReproduire le comportement principal de la commande nm GNU, en supportant :\n\nles formats ELF 32 bits et 64 bits,\n\nl’analyse des sections .symtab et .strtab,\n\nl’affichage des symboles définis et indéfinis avec leurs :\n\nadresses,\n\ntypes (T, U, B, etc.),\n\nnoms.\n\n⚙️ Fonctionnalités\nPrise en charge des options :\n\n-a : affiche tous les symboles (même ceux utilisés par les debuggers),\n\n-g : affiche uniquement les symboles globaux,\n\n-u : affiche uniquement les symboles indéfinis,\n\n-p : désactive le tri par ordre alphabétique,\n\n-r : inverse l’ordre du tri.\n\nLecture manuelle du fichier ELF :\n\nparsing de l’en-tête ELF,\n\nparsing des sections et de la table des symboles,\n\ngestion fine des offsets et pointeurs,\n\nfiltrage de symboles inutiles (comme __PRETTY_FUNCTION__.*).\n\n🧠 Ce que j’ai appris\nManipulation bas niveau des fichiers binaires ELF.\n\nCompréhension des structures ELF (Elf32_Ehdr, Elf64_Shdr, etc.).\n\nManipulation des bits, cast mémoire, tri personnalisé.\n\nAnalyse et comparaison de la sortie avec l’outil nm.\n\n🧪 Test\nLa 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.\n\ntester 1: [tester 1](https://github.com/jmbcorp999/42-Nm-Tester) \ntester 2: g[tester 1](https://github.com/jemercie/nm_tester)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frabouzia%2Fft_nm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frabouzia%2Fft_nm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frabouzia%2Fft_nm/lists"}