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.
- Créez un nouveau projet
check_elf
de typelib
. - Ajoutez dans
Cargo.toml
une dépendance sur le crateelf_rs
version 0.1.3 :elf_rs = "=0.1.3"
. - Implémentez les deux fonctions
is_valid_elf()
etis_valid_elf_file()
danssrc/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.
- Ajoutez un exemple dans
examples/check_elf.rs
qui apellecheck_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 utiliserclap
mais vous pouvez également vous contenter de supposer questd::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.