From 00e2e2cefb3286f2a81e8c61be0ea0756be53c57 Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Tue, 16 Feb 2021 10:57:47 +0100 Subject: [PATCH] more windows bits --- libafl/build.rs | 5 +++-- libafl/src/bolts/bindings.rs | 2 ++ libafl/src/bolts/mod.rs | 1 + libafl/src/bolts/shmem.rs | 27 +++++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 libafl/src/bolts/bindings.rs diff --git a/libafl/build.rs b/libafl/build.rs index 3bf9c5eeee..f77872e9a6 100644 --- a/libafl/build.rs +++ b/libafl/build.rs @@ -2,9 +2,10 @@ fn main() { #[cfg(target_os = "windows")] windows::build!( + windows::win32::system_services::HANDLE, + windows::win32::windows_programming::CloseHandle, // API needed for the shared memory - windows::win32::system_services::{CreateFileMappingA, MapViewOfFile, UnmapViewOfFile}, - windows::win32::windows_programming::CloseHandle + windows::win32::system_services::{CreateFileMappingA, OpenFileMappingA, MapViewOfFile, UnmapViewOfFile}, ); } diff --git a/libafl/src/bolts/bindings.rs b/libafl/src/bolts/bindings.rs new file mode 100644 index 0000000000..02f7aa456c --- /dev/null +++ b/libafl/src/bolts/bindings.rs @@ -0,0 +1,2 @@ +#[cfg(windows)] +::windows::include_bindings!(); diff --git a/libafl/src/bolts/mod.rs b/libafl/src/bolts/mod.rs index f9e6d52f06..099a20e799 100644 --- a/libafl/src/bolts/mod.rs +++ b/libafl/src/bolts/mod.rs @@ -5,3 +5,4 @@ pub mod ownedref; pub mod serdeany; pub mod shmem; pub mod tuples; +pub mod bindings; diff --git a/libafl/src/bolts/shmem.rs b/libafl/src/bolts/shmem.rs index a560d5388d..324f6d512a 100644 --- a/libafl/src/bolts/shmem.rs +++ b/libafl/src/bolts/shmem.rs @@ -5,6 +5,10 @@ #[cfg(unix)] pub use shmem::UnixShMem; +#[cfg(feature = "std")] +#[cfg(windows)] +pub use shmem::Win32ShMem; + use alloc::string::{String, ToString}; use core::fmt::Debug; use serde::{Deserialize, Serialize}; @@ -319,6 +323,29 @@ pub mod shmem { } } +#[cfg(windows)] +#[cfg(feature = "std")] +pub mod shmem { + + use core::{mem::size_of, slice}; + use std::ffi::CStr; + + use crate::Error; + use super::ShMem; + + /// The default Sharedmap impl for windows using shmctl & shmget + #[derive(Clone, Debug)] + pub struct Win32ShMem { + pub filename: [u8; 64], + pub handle: windows::win32::system_services::HANDLE, + pub map: *mut u8, + pub map_size: usize, + } + + // TODO complete + +} + #[cfg(test)] mod tests {