Développement d'une bibliothèque check_elf

Vos collègues qui développent en Rust vous ont sollicité car il leur manque une fonctionnalité indispensable : pouvoir vérifier si un fichier est au format ELF. Étant d'un naturel généreux, vous avez proposé de développer un crate check_elf qui propose une bibliothèque permettant de vérifier si un fichier (ou le contenu d'un fichier) est au format ELF.

Vous avez repéré le crate elf_rs qui est capable de parser un ensemble d'octets et de renvoyer soit une structure elf_rs::Elf soit une erreur si cela ne correspond pas à un fichier ELF. Vous vous dîtes qu'il sera facile de fournir des fonctions à vos collègues qui renvoient juste un booléen selon que le fichier est valid ou non.

  1. Créez un nouveau projet check_elf de type lib.
  2. Ajoutez dans Cargo.toml une dépendance sur le crate elf_rs version 0.1.3 : elf_rs = "=0.1.3".
  3. Implémentez les deux fonctions is_valid_elf() et is_valid_elf_file() dans src/lib.rs avec les prototype suivant :
pub fn is_valid_elf(content: &[u8]) -> bool {
  todo!()
}

pub fn is_valid_elf_file<P: AsRef<Path>>(filename: P) -> bool {
  todo!()
}

Bien entendu, vous pourrez utiliser la première fonction pour implémenter la seconde.

  1. Ajoutez un exemple dans examples/check_elf.rs qui apelle check_elf::is_valid_elf_file() sur l'argument donné en ligne de commande et affiche s'il s'agit d'un fichier ELF valide ou non sans plus de précisions. Vous pouvez utiliser clap mais vous pouvez également vous contenter de supposer que std::env::args().nth(1).unwrap() renverra quelque chose de valide, il ne s'agit que d'un exemple pour montrer à vos collègues comment utiliser votre bibliothèque et pas d'un binaire qui partira en production contrairement à la bibliothèque.
$ cargo run --example check_elf /bin/ls
/bin/ls is a valid ELF file
$ cargo run --example check_elf Cargo.toml
Cargo.toml is not a valid ELF file
$ cargo run --example check_elf non-existent-file
non-existent-file is not a valid ELF file

Votre bibliothèque a l'air parfaite, vous allez pouvoir la fournir à vos collègues pour qu'ils l'utilisent en production dans leur application critique.