123 lines
4.1 KiB
Rust
123 lines
4.1 KiB
Rust
#![allow(non_camel_case_types,non_snake_case,non_upper_case_globals,deref_nullptr)]
|
|
use serde::{Deserialize, Serialize};
|
|
// Manual Types
|
|
use libafl_qemu::Emulator;
|
|
|
|
/*========== Start of generated Code =============*/
|
|
pub type char_ptr = ::std::os::raw::c_uint;
|
|
pub type ListItem_t_ptr = ::std::os::raw::c_uint;
|
|
pub type StackType_t_ptr = ::std::os::raw::c_uint;
|
|
pub type void_ptr = ::std::os::raw::c_uint;
|
|
pub type tskTaskControlBlock_ptr = ::std::os::raw::c_uint;
|
|
pub type xLIST_ptr = ::std::os::raw::c_uint;
|
|
pub type xLIST_ITEM_ptr = ::std::os::raw::c_uint;
|
|
/* automatically generated by rust-bindgen 0.59.2 */
|
|
|
|
pub type __uint8_t = ::std::os::raw::c_uchar;
|
|
pub type __uint16_t = ::std::os::raw::c_ushort;
|
|
pub type __uint32_t = ::std::os::raw::c_uint;
|
|
pub type StackType_t = u32;
|
|
pub type UBaseType_t = ::std::os::raw::c_uint;
|
|
pub type TickType_t = u32;
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)]
|
|
pub struct xLIST_ITEM {
|
|
pub xItemValue: TickType_t,
|
|
pub pxNext: xLIST_ITEM_ptr,
|
|
pub pxPrevious: xLIST_ITEM_ptr,
|
|
pub pvOwner: void_ptr,
|
|
pub pvContainer: xLIST_ptr,
|
|
}
|
|
pub type ListItem_t = xLIST_ITEM;
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)]
|
|
pub struct xMINI_LIST_ITEM {
|
|
pub xItemValue: TickType_t,
|
|
pub pxNext: xLIST_ITEM_ptr,
|
|
pub pxPrevious: xLIST_ITEM_ptr,
|
|
}
|
|
pub type MiniListItem_t = xMINI_LIST_ITEM;
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)]
|
|
pub struct xLIST {
|
|
pub uxNumberOfItems: UBaseType_t,
|
|
pub pxIndex: ListItem_t_ptr,
|
|
pub xListEnd: MiniListItem_t,
|
|
}
|
|
pub type List_t = xLIST;
|
|
pub type TaskHandle_t = tskTaskControlBlock_ptr;
|
|
pub const eTaskState_eRunning: eTaskState = 0;
|
|
pub const eTaskState_eReady: eTaskState = 1;
|
|
pub const eTaskState_eBlocked: eTaskState = 2;
|
|
pub const eTaskState_eSuspended: eTaskState = 3;
|
|
pub const eTaskState_eDeleted: eTaskState = 4;
|
|
pub const eTaskState_eInvalid: eTaskState = 5;
|
|
pub type eTaskState = ::std::os::raw::c_uint;
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)]
|
|
pub struct xTASK_STATUS {
|
|
pub xHandle: TaskHandle_t,
|
|
pub pcTaskName: char_ptr,
|
|
pub xTaskNumber: UBaseType_t,
|
|
pub eCurrentState: eTaskState,
|
|
pub uxCurrentPriority: UBaseType_t,
|
|
pub uxBasePriority: UBaseType_t,
|
|
pub ulRunTimeCounter: u32,
|
|
pub pxStackBase: StackType_t_ptr,
|
|
pub usStackHighWaterMark: u16,
|
|
}
|
|
pub type TaskStatus_t = xTASK_STATUS;
|
|
#[repr(C)]
|
|
#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)]
|
|
pub struct tskTaskControlBlock {
|
|
pub pxTopOfStack: StackType_t_ptr,
|
|
pub xStateListItem: ListItem_t,
|
|
pub xEventListItem: ListItem_t,
|
|
pub uxPriority: UBaseType_t,
|
|
pub pxStack: StackType_t_ptr,
|
|
pub pcTaskName: [::std::os::raw::c_char; 10usize],
|
|
pub uxBasePriority: UBaseType_t,
|
|
pub uxMutexesHeld: UBaseType_t,
|
|
pub ulNotifiedValue: [u32; 1usize],
|
|
pub ucNotifyState: [u8; 1usize],
|
|
pub ucStaticallyAllocated: u8,
|
|
pub ucDelayAborted: u8,
|
|
}
|
|
pub type tskTCB = tskTaskControlBlock;
|
|
pub type TCB_t = tskTCB;
|
|
/*========== End of generated Code =============*/
|
|
|
|
pub trait emu_lookup {
|
|
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> Self;
|
|
}
|
|
|
|
|
|
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
|
|
pub enum rtos_struct {
|
|
TCB_struct(TCB_t),
|
|
List_struct(List_t),
|
|
List_Item_struct(ListItem_t),
|
|
List_MiniItem_struct(MiniListItem_t),
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! impl_emu_lookup {
|
|
($struct_name:ident) => {
|
|
impl $crate::systemstate::freertos::emu_lookup for $struct_name {
|
|
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> $struct_name {
|
|
let mut tmp : [u8; std::mem::size_of::<$struct_name>()] = [0u8; std::mem::size_of::<$struct_name>()];
|
|
unsafe {
|
|
emu.read_mem(addr.into(), &mut tmp);
|
|
std::mem::transmute::<[u8; std::mem::size_of::<$struct_name>()], $struct_name>(tmp)
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
impl_emu_lookup!(TCB_t);
|
|
impl_emu_lookup!(List_t);
|
|
impl_emu_lookup!(ListItem_t);
|
|
impl_emu_lookup!(MiniListItem_t);
|
|
impl_emu_lookup!(void_ptr);
|
|
impl_emu_lookup!(TaskStatus_t);
|