1mod advapi32;
2mod comctl64;
3mod dnsapi;
4pub mod kernel32;
5mod ntdll;
6mod shell32;
7mod user32;
8mod winhttp;
9mod wininet;
10mod ws2_32;
11mod shlwapi;
12mod kernelbase;
13
14use crate::emu;
15
16pub fn gateway(addr: u64, name: String, emu: &mut emu::Emu) {
17 log::info!("winapi64::gateway called with addr: 0x{:x}, name: {}", addr, name);
18
19 let unimplemented_api = match name.as_str() {
20 "kernel32.text" => kernel32::gateway(addr, emu),
21 "kernel32.rdata" => kernel32::gateway(addr, emu),
22 "ntdll.text" => ntdll::gateway(addr, emu),
23 "user32.text" => user32::gateway(addr, emu),
24 "ws2_32.text" => ws2_32::gateway(addr, emu),
25 "wininet.text" => wininet::gateway(addr, emu),
26 "advapi32.text" => advapi32::gateway(addr, emu),
27 "winhttp.text" => winhttp::gateway(addr, emu),
28 "dnsapi.text" => dnsapi::gateway(addr, emu),
29 "comctl32.text" => comctl64::gateway(addr, emu),
30 "shell32.text" => shell32::gateway(addr, emu),
31 "shlwapi.text" => shlwapi::gateway(addr, emu),
32 "kernelbase.text" => kernelbase::gateway(addr, emu),
33 "not_loaded" => {
34 emu.pe64.as_ref().unwrap().import_addr_to_name(addr)
35 }
36 _ => panic!("/!\\ trying to execute on {} at 0x{:x}", name, addr),
37 };
38
39 if unimplemented_api.len() > 0 {
40 log::info!(
41 "{}({}, {}, {}, {}) (unimplemented)",
42 unimplemented_api, emu.regs.rcx, emu.regs.rdx, emu.regs.r8, emu.regs.r9
43 );
44
45 emu.regs.rax = 1;
46 }
47}