Code Monkey home page Code Monkey logo

ft_nm's Introduction

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).

ft_nm's People

Contributors

croco-byte avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.