From 643443a5c326d4e1109640a56cbda217a3802ff8 Mon Sep 17 00:00:00 2001 From: Eray Erdin Date: Tue, 27 Jan 2026 15:04:07 +0300 Subject: [PATCH 1/3] compile SearchExt::search_i64 only on 64-bit --- src/ext/search.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ext/search.rs b/src/ext/search.rs index 55a94fb..7e1e544 100644 --- a/src/ext/search.rs +++ b/src/ext/search.rs @@ -26,6 +26,7 @@ pub trait SearchExt { fn search_i8(&self, value: i8, byte_order: Option) -> SearchExtResult>; fn search_i16(&self, value: i16, byte_order: Option) -> SearchExtResult>; fn search_i32(&self, value: i32, byte_order: Option) -> SearchExtResult>; + #[cfg(target_pointer_width = "64")] fn search_i64(&self, value: i64, byte_order: Option) -> SearchExtResult>; } From 627b81b148507a7d39e712e2ab634fc68e8a8c83 Mon Sep 17 00:00:00 2001 From: Eray Erdin Date: Tue, 27 Jan 2026 15:07:06 +0300 Subject: [PATCH 2/3] impl SearchExt::search_f32 for Process --- src/ext/search.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/ext/search.rs b/src/ext/search.rs index 7e1e544..c6b183c 100644 --- a/src/ext/search.rs +++ b/src/ext/search.rs @@ -28,6 +28,7 @@ pub trait SearchExt { fn search_i32(&self, value: i32, byte_order: Option) -> SearchExtResult>; #[cfg(target_pointer_width = "64")] fn search_i64(&self, value: i64, byte_order: Option) -> SearchExtResult>; + fn search_f32(&self, value: f32, byte_order: Option) -> SearchExtResult>; } #[cfg(target_os = "linux")] @@ -221,6 +222,16 @@ impl SearchExt for crate::prelude::Process { }), ) } + + fn search_f32(&self, value: f32, byte_order: Option) -> SearchExtResult> { + self.search_bytes( + &(match byte_order { + Some(ByteOrder::BigEndian) => value.to_be_bytes(), + Some(ByteOrder::LittleEndian) => value.to_le_bytes(), + None => value.to_ne_bytes(), + }), + ) + } } #[derive(Debug, Error)] @@ -469,6 +480,7 @@ mod linux_tests { assert_contains!(addresses, &target_address); } + #[cfg(target_pointer_width = "64")] #[rstest] fn test_search_i64(dummy_process: DummyProcess) { let process = @@ -490,4 +502,26 @@ mod linux_tests { assert_contains!(addresses, &target_address); } + + #[rstest] + fn test_search_f32(dummy_process: DummyProcess) { + let process = + Process::try_new(dummy_process.pid).expect("Could not get dummy process with id."); + let addresses = process + .search_f32(1.5, None) + .expect("Could not search f32 value."); + + let target_address: usize = { + let response = + reqwest::blocking::get(format!("{}/f32val/address", dummy_process.base_url)) + .expect("Could not request f32val address."); + response + .text() + .expect("Could not decode the charset of f32val address.") + .parse() + } + .expect("Could not parse address usize."); + + assert_contains!(addresses, &target_address); + } } From b7fcc37dad6e30c7386c1f807cd82f91062db83a Mon Sep 17 00:00:00 2001 From: Eray Erdin Date: Tue, 27 Jan 2026 15:09:43 +0300 Subject: [PATCH 3/3] impl SearchExt::search_f64 for Process --- src/ext/search.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/ext/search.rs b/src/ext/search.rs index c6b183c..b42641b 100644 --- a/src/ext/search.rs +++ b/src/ext/search.rs @@ -29,6 +29,8 @@ pub trait SearchExt { #[cfg(target_pointer_width = "64")] fn search_i64(&self, value: i64, byte_order: Option) -> SearchExtResult>; fn search_f32(&self, value: f32, byte_order: Option) -> SearchExtResult>; + #[cfg(target_pointer_width = "64")] + fn search_f64(&self, value: f64, byte_order: Option) -> SearchExtResult>; } #[cfg(target_os = "linux")] @@ -232,6 +234,17 @@ impl SearchExt for crate::prelude::Process { }), ) } + + #[cfg(target_pointer_width = "64")] + fn search_f64(&self, value: f64, byte_order: Option) -> SearchExtResult> { + self.search_bytes( + &(match byte_order { + Some(ByteOrder::BigEndian) => value.to_be_bytes(), + Some(ByteOrder::LittleEndian) => value.to_le_bytes(), + None => value.to_ne_bytes(), + }), + ) + } } #[derive(Debug, Error)] @@ -524,4 +537,27 @@ mod linux_tests { assert_contains!(addresses, &target_address); } + + #[cfg(target_pointer_width = "64")] + #[rstest] + fn test_search_f64(dummy_process: DummyProcess) { + let process = + Process::try_new(dummy_process.pid).expect("Could not get dummy process with id."); + let addresses = process + .search_f64(2.5, None) + .expect("Could not search f64 value."); + + let target_address: usize = { + let response = + reqwest::blocking::get(format!("{}/f64val/address", dummy_process.base_url)) + .expect("Could not request f64val address."); + response + .text() + .expect("Could not decode the charset of f64val address.") + .parse() + } + .expect("Could not parse address usize."); + + assert_contains!(addresses, &target_address); + } }