LCOV - code coverage report
Current view: top level - src/elf - hash.rs (source / functions) Coverage Total Hit
Test: lief.lcov Lines: 100.0 % 64 64
Test Date: 2024-10-27:00:00:00 Functions: 100.0 % 15 15

            Line data    Source code
       1              : use lief_ffi as ffi;
       2              : use std::fmt;
       3              : use crate::common::FromFFI;
       4              : use std::marker::PhantomData;
       5              : 
       6              : /// This structure wraps the sysv-hash info
       7              : pub struct Sysv<'a> {
       8              :     ptr: cxx::UniquePtr<ffi::ELF_SysvHash>,
       9              :     _owner: PhantomData<&'a ffi::ELF_Binary>
      10              : }
      11              : 
      12              : impl Sysv<'_> {
      13              :     /// Number of bucket used for this hash table
      14           16 :     pub fn nbucket(&self) -> u32 {
      15           16 :         self.ptr.nbucket()
      16           16 :     }
      17              : 
      18              :     /// Number of chains used for this hash table
      19           16 :     pub fn nchain(&self) -> u32 {
      20           16 :         self.ptr.nchain()
      21           16 :     }
      22              : 
      23              :     /// Bucket's values
      24           16 :     pub fn buckets(&self) -> Vec<u32> {
      25           16 :         Vec::from(self.ptr.buckets().as_slice())
      26           16 :     }
      27              : 
      28              :     /// Chain's values
      29           16 :     pub fn chains(&self) -> Vec<u32> {
      30           16 :         Vec::from(self.ptr.chains().as_slice())
      31           16 :     }
      32              : }
      33              : 
      34              : impl fmt::Debug for Sysv<'_> {
      35           16 :     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
      36           16 :         f.debug_struct("Sysv")
      37           16 :             .field("nbucket", &self.nbucket())
      38           16 :             .field("nchain", &self.nchain())
      39           16 :             .field("buckets", &self.buckets())
      40           16 :             .field("chains", &self.chains())
      41           16 :             .finish()
      42           16 :     }
      43              : }
      44              : 
      45              : impl FromFFI<ffi::ELF_SysvHash> for Sysv<'_> {
      46           16 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_SysvHash>) -> Self {
      47           16 :         Self {
      48           16 :             ptr,
      49           16 :             _owner: PhantomData
      50           16 :         }
      51           16 :     }
      52              : }
      53              : 
      54              : /// Structure that wraps the GNU-hash implementation
      55              : pub struct Gnu<'a> {
      56              :     ptr: cxx::UniquePtr<ffi::ELF_GnuHash>,
      57              :     _owner: PhantomData<&'a ffi::ELF_Binary>
      58              : }
      59              : 
      60              : 
      61              : impl Gnu<'_> {
      62              :     /// Number of buckets used in this hash table
      63           32 :     pub fn nb_buckets(&self) -> u32 {
      64           32 :         self.ptr.nb_buckets()
      65           32 :     }
      66              : 
      67              :     /// Index of the first symbol in the dynamic symbols table which accessible with the hash table
      68           32 :     pub fn symbol_index(&self) -> u32 {
      69           32 :         self.ptr.symbol_index()
      70           32 :     }
      71              : 
      72              :     /// Shift count used in the bloom filter
      73           32 :     pub fn shift2(&self) -> u32 {
      74           32 :         self.ptr.shift2()
      75           32 :     }
      76              : 
      77              :     /// Number of bloom filters used. It must be a power of 2.
      78           32 :     pub fn maskwords(&self) -> u32 {
      79           32 :         self.ptr.maskwords()
      80           32 :     }
      81              : 
      82              :     /// Bloom filters
      83           32 :     pub fn bloom_filters(&self) -> Vec<u64> {
      84           32 :         Vec::from(self.ptr.bloom_filters().as_slice())
      85           32 :     }
      86              : 
      87              :     /// Hash bucket values
      88           32 :     pub fn buckets(&self) -> Vec<u32> {
      89           32 :         Vec::from(self.ptr.buckets().as_slice())
      90           32 :     }
      91              : 
      92              :     /// Hash values
      93           32 :     pub fn hash_values(&self) -> Vec<u32> {
      94           32 :         Vec::from(self.ptr.hash_values().as_slice())
      95           32 :     }
      96              : }
      97              : 
      98              : impl fmt::Debug for Gnu<'_> {
      99           32 :     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
     100           32 :         f.debug_struct("GnuHash")
     101           32 :             .field("nb_buckets", &self.nb_buckets())
     102           32 :             .field("symbol_index", &self.symbol_index())
     103           32 :             .field("shift2", &self.shift2())
     104           32 :             .field("maskwords", &self.maskwords())
     105           32 :             .field("bloom_filters", &self.bloom_filters())
     106           32 :             .field("buckets", &self.buckets())
     107           32 :             .field("hash_values", &self.hash_values())
     108           32 :             .finish()
     109           32 :     }
     110              : }
     111              : 
     112              : impl FromFFI<ffi::ELF_GnuHash> for Gnu<'_> {
     113           32 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_GnuHash>) -> Self {
     114           32 :         Self {
     115           32 :             ptr,
     116           32 :             _owner: PhantomData
     117           32 :         }
     118           32 :     }
     119              : }
        

Generated by: LCOV version 2.1-1