| 106 | } |
| 107 | |
| 108 | pub fn scores(&self, max_candidates: usize) -> BaseAddressDetectionResult { |
| 109 | let mut scores = vec![BNBaseAddressDetectionScore::default(); max_candidates]; |
| 110 | let mut confidence = BNBaseAddressDetectionConfidence::NoConfidence; |
| 111 | let mut last_base = 0; |
| 112 | let num_candidates = unsafe { |
| 113 | BNGetBaseAddressDetectionScores( |
| 114 | self.as_raw(), |
| 115 | scores.as_mut_ptr(), |
| 116 | scores.len(), |
| 117 | &mut confidence, |
| 118 | &mut last_base, |
| 119 | ) |
| 120 | }; |
| 121 | scores.truncate(num_candidates); |
| 122 | // SAFETY BNBaseAddressDetectionScore and BaseAddressDetectionScore |
| 123 | // are transparent |
| 124 | let scores = unsafe { |
| 125 | std::mem::transmute::<Vec<BNBaseAddressDetectionScore>, Vec<BaseAddressDetectionScore>>( |
| 126 | scores, |
| 127 | ) |
| 128 | }; |
| 129 | BaseAddressDetectionResult { |
| 130 | scores, |
| 131 | confidence, |
| 132 | last_base, |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | /// Initial analysis and attempts to identify candidate base addresses |
| 137 | /// |