croco-byte / ft_nm Goto Github PK
View Code? Open in Web Editor NEWThe nm-otools project from 42
The nm-otools project from 42
1. Nm utilise les locales (LC_*) afin de trier les symboles et afficher les messages d'erreur. La commande a ete reproduite avec LC_ALL=C, la commande suivante permet de configurer vos locales sur cette valeur : $> source normalize_locale.sh 3. En rajoutant le flag "--readelf" en dernier argument de la commande (./ft_nm <binary> --readelf), la commande effectue un parsing au format readelf (affichant le header du fichier ELF, les segments, les sections, et les symboles avec leurs attributs detailles). Je trouve qu'il s'agit d'un meilleur format, plus lisible, avec plus d'informations, d'ou l'ajout de cette option en bonus. 4. Le projet concernait a l'origine le parsing des fichiers mach-o. Suite au confinement, ce n'est plus la commande "nm" de MacOS qu'il nous est demande de reproduire, mais celle de Linux, qui parse donc des fichiers ELF Linux. Plusieurs remarques concernant ce changement : a.Le sujet demandait que notre commande puisse gerer les "universal binaries". Les universal binaries sont cependant des fichiers specifiques a MacOS, incompatibles avec Linux. Pour coller au maximum au sujet, j'ai a la place permis le parsing des fichiers FATELF, l'equivalent Linux des "universal binaries" de MacOS (meme si la commande originelle "nm" sur Linux ne gere pas ces fichiers). b. La commande "nm" pouvait être reprouite assez simplemnt pour les fichiers mach-o (toutes les valeurs et les types de symboles sont explicitement contenus dans quelques fichiers header : <mach-o/loader.h>, <mach-o/fat.h>, <mach-o/ar.h>). Il faut cependant voir que la commande "nm" de Linux fait partie de la BFD (Binary File Descriptor Library) ; elle s'appuie largement sur le parsing utilise par cette librairie pour deduire le "type" du symbol par sa macro SYM_TYPE(val). Il est peu realiste de re-coder entierement la BFD pour pouvoir implementer son exact parsing. La commande proposee ici utilise une autre methode pour imiter le comportement de "nm" et deduire le type du symbole. Cela semble assez efficace et sur tous les binaires tests, le type deduit est correct et identique a "nm" (y compris sur de gros binaires de plus de 4000 symboles).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.