use crate::signatures::common::{SignatureError, SignatureResult, CONFIDENCE_LOW};
pub const EXCEPTION_HANDLER_DESCRIPTION: &str = "eCos kernel exception handler";
pub fn exception_handler_magic() -> Vec<Vec<u8>> {
vec![
b"\x00\x68\x1A\x40\x00\x00\x00\x00\x7F\x00\x5A\x33".to_vec(),
b"\x00\x68\x1A\x40\x7F\x00\x5A\x33".to_vec(),
b"\x40\x1A\x68\x00\x00\x00\x00\x00\x33\x5A\x00\x7F".to_vec(),
b"\x40\x1A\x68\x00\x33\x5A\x00\x7F".to_vec(),
]
}
pub fn exception_handler_parser(
file_data: &[u8],
offset: usize,
) -> Result<SignatureResult, SignatureError> {
let mut result = SignatureResult {
offset,
description: EXCEPTION_HANDLER_DESCRIPTION.to_string(),
confidence: CONFIDENCE_LOW,
..Default::default()
};
let mut endianness: &str = "big";
if file_data[offset] == 0 {
endianness = "little";
}
result.description = format!("{}, MIPS {} endian", result.description, endianness);
Ok(result)
}