vcheat 0.5.2

Hacking Library
Documentation
vcheat-0.5.2 has been yanked.

Crates.io Version Static Badge

Hacking Library

// tests/external.rs

#[test]
fn get_pid() {
    unsafe {
        vcheat::external::get_pid("explorer.exe").unwrap();
    }
}

#[test]
fn get_all_proc_info() {
    unsafe {
        vcheat::external::get_all_proc_info().unwrap();
    }
}

#[test]
fn get_mod_info() {
    unsafe {
        let proc_id = vcheat::external::get_pid("explorer.exe").unwrap();

        vcheat::external::get_mod_info(proc_id, "explorer.exe").unwrap();
    }
}

#[test]
fn get_all_mod_info() {
    unsafe {
        let proc_id = vcheat::external::get_pid("explorer.exe").unwrap();

        vcheat::external::get_all_mod_info(proc_id).unwrap();
    }
}

#[test]
fn read_write_mem() {
    unsafe {
        let proc_id = vcheat::external::get_pid("explorer.exe").unwrap();

        let (mod_handle, mod_addr, mod_size) =
            vcheat::external::get_mod_info(proc_id, "explorer.exe").unwrap();

        let proc_handle = vcheat::external::open_proc(proc_id).unwrap();

        vcheat::external::protect_mem(
            proc_handle,
            mod_handle as *const ::core::ffi::c_void,
            mod_size as usize,
            vcheat::page_prot_ty::EXECUTE_READ_WRITE,
        )
        .unwrap();

        let mod_data = vcheat::read_mem(
            proc_handle,
            mod_handle as *const ::core::ffi::c_void,
            mod_size as usize,
        )
        .unwrap();

        let bnw = vcheat::write_mem(proc_handle, mod_addr.cast(), &mod_data).unwrap();

        assert_eq!(mod_size as usize, bnw);

        vcheat::close_handle(proc_handle).unwrap();
    }
}

#[test]
fn read_write_mem_t() {
    unsafe {
        let proc_id = vcheat::external::get_pid("explorer.exe").unwrap();

        let (mod_handle, _mod_addr, mod_size) =
            vcheat::external::get_mod_info(proc_id, "explorer.exe").unwrap();

        let proc_handle = vcheat::external::open_proc(proc_id).unwrap();

        vcheat::external::protect_mem(
            proc_handle,
            mod_handle as *const ::core::ffi::c_void,
            mod_size as usize,
            vcheat::page_prot_ty::EXECUTE_READ_WRITE,
        )
        .unwrap();

        struct Test {
            _reserved0: u8,
            _reserved1: i32,
            _reserved2: [u64; 8],
        }

        let mut buf = ::core::mem::zeroed::<Test>();

        vcheat::read_mem_t(
            proc_handle,
            mod_handle as *const ::core::ffi::c_void,
            &mut buf,
            ::core::mem::size_of::<Test>(),
        )
        .unwrap();

        vcheat::write_mem_t(
            proc_handle,
            mod_handle as *const ::core::ffi::c_void,
            &buf,
            ::core::mem::size_of::<Test>(),
        )
        .unwrap();

        vcheat::close_handle(proc_handle).unwrap();
    }
}

#[test]
fn inject_dll() {
    unsafe {
        let pid = vcheat::external::get_pid("test.exe").unwrap();

        let proc_handle = vcheat::external::open_proc(pid).unwrap();

        vcheat::external::inject_dll(proc_handle, r"test.dll").unwrap();

        vcheat::close_handle(proc_handle).unwrap();
    }
}

#[test]
fn eject_dll() {
    unsafe {
        let pid = vcheat::external::get_pid("test.exe").unwrap();

        let proc_handle = vcheat::external::open_proc(pid).unwrap();

        let (mod_handle, _, _) = vcheat::external::get_mod_info(pid, "test.dll").unwrap();

        vcheat::external::eject_dll(proc_handle, mod_handle, false).unwrap();

        vcheat::close_handle(proc_handle).unwrap();
    }
}