Skip to main content

falcon/executor/
mod.rs

1//! Concrete execution over Falcon IL.
2
3use crate::il;
4use crate::memory;
5use crate::Error;
6
7mod driver;
8mod eval;
9mod state;
10mod successor;
11
12pub use self::driver::*;
13pub use self::eval::eval;
14pub use self::state::*;
15pub use self::successor::*;
16
17/// A `falcon::memory::paged::Memory` over `il::Constant`.
18pub type Memory = memory::paged::Memory<il::Constant>;
19
20use crate::memory::MemoryPermissions;
21use crate::translator;
22
23impl translator::TranslationMemory for Memory {
24    fn get_u8(&self, address: u64) -> Option<u8> {
25        self.load(address, 8)
26            .unwrap()
27            .map(|constant| constant.value_u64().unwrap() as u8)
28    }
29
30    fn permissions(&self, address: u64) -> Option<MemoryPermissions> {
31        self.permissions(address)
32    }
33}