//! This example changes the current text in Firefox's browser search bar from
//! "Old search text" to "New search text". To run this example, open an instance
//! of Firefox and type "Old search text" in the search bar. If all goes well, when
//! you run this example as root, it should be replaced with "New search text",
//! although you may have to click on the search bar again in order for it to
//! render the new text.
fn main() {
use raminspect::RamInspector;
// Iterate over all running Firefox instances
for pid in raminspect::find_processes("/usr/lib/firefox/firefox") {
let mut inspector = match RamInspector::new(pid) {
Ok(inspector) => inspector,
Err(_) => continue,
};
for (proc_addr, memory_region) in inspector.search_for_term(b"Old search text").unwrap() {
if !memory_region.writable() {
continue;
}
unsafe {
// This is safe because modifying the text in the Firefox search bar will not crash
// the browser or negatively impact system stability in any way.
println!("Writing to process virtual address: 0x{:X}", proc_addr);
inspector.queue_write(proc_addr, b"New search text");
}
}
unsafe {
// This is safe since the process is not currently resumed, which would possibly cause a data race.
inspector.flush().unwrap();
}
}
}