toy-arms 0.2.0

A crates designed to ease game hack in rust.
use crate::{cast, null_terminated};
use winapi::{
    shared::minwindef::LPVOID, um::libloaderapi::GetModuleHandleA, um::winnt::PIMAGE_DOS_HEADER,
    um::winnt::PIMAGE_IMPORT_DESCRIPTOR, um::winnt::PIMAGE_NT_HEADERS,
    um::winnt::PIMAGE_OPTIONAL_HEADER,
};

use std::{panic, ptr};

pub struct IatFinder<'a> {
    pub module_name: &'a str,
    pub function_name: &'a str,
    target_entry: *mut LPVOID,
}

struct IMAGE_OPTIONAL_HEADER64;
impl<'a> IatFinder<'a> {
    pub fn new(module_name: &'a str, function_name: &'a str) -> Self {
        IatFinder {
            module_name,
            function_name,
            target_entry: ptr::null_mut(),
        }
    }

    pub unsafe fn find_iat_entry(&self) {
        let dos_base = GetModuleHandleA(null_terminated!(self.module_name)) as usize;
        let ptr_dos_header = dos_base as PIMAGE_DOS_HEADER;
        let ptr_nt_headers = (dos_base + (*ptr_dos_header).e_lfanew as usize) as PIMAGE_NT_HEADERS;
        let ptr_optional_header = &(*ptr_nt_headers).OptionalHeader;
        println!("{:p}", ptr_optional_header);
    }
}