xgadget/binary/
segment.rs1use rayon::prelude::*;
2
3#[derive(Debug, PartialEq, Eq, Clone, Hash)]
5pub struct Segment {
6 pub addr: u64,
8 pub bytes: Vec<u8>,
10}
11
12impl Segment {
13 pub fn new(addr: u64, bytes: Vec<u8>) -> Segment {
15 Segment { addr, bytes }
16 }
17
18 pub fn contains(&self, addr: u64) -> bool {
20 (self.addr <= addr) && (addr < (self.addr + self.bytes.len() as u64))
21 }
22
23 pub fn get_matching_offsets(&self, vals: &[u8]) -> Vec<usize> {
25 self.bytes
26 .par_iter()
27 .enumerate()
28 .filter(|&(_, b)| vals.contains(b))
29 .map(|(i, _)| i)
30 .collect()
31 }
32}