Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 5 additions & 14 deletions src/api/windows/helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ pub fn handler_create(uri: &str) -> u64 {
// Start at 3 so allocated file descriptors never collide with the standard
// streams (0=stdin, 1=stdout, 2=stderr) on the Linux syscall path; harmless
// for Windows handles, which carry no special meaning at 1/2.
let new_id: u64 = if handles.len() == 0 {
let new_id: u64 = if handles.is_empty() {
3
} else {
let last_id = handles[handles.len() - 1].id;
Expand Down Expand Up @@ -97,18 +97,12 @@ pub fn handler_print() {

pub fn handler_exist(hndl: u64) -> bool {
let handles = HANDLERS.lock().unwrap();
match handles.iter().position(|h| h.id == hndl) {
Some(_) => true,
None => false,
}
handles.iter().position(|h| h.id == hndl).is_some()
}

pub fn handler_put_bytes(hndl: u64, data: &[u8]) {
let mut handles = HANDLERS.lock().unwrap();
match handles.iter().position(|h| h.id == hndl) {
Some(idx) => handles[idx].data = data.to_vec(),
None => (),
}
if let Some(idx) = handles.iter().position(|h| h.id == hndl) { handles[idx].data = data.to_vec() }
}

pub fn handler_get_uri(hndl: u64) -> String {
Expand All @@ -127,7 +121,7 @@ pub fn handler_find_by_uri(uri: &str) -> Option<u64> {
pub fn socket_create() -> u64 {
let mut sockets = SOCKETS.lock().unwrap();

let new_socket: u64 = if sockets.len() == 0 {
let new_socket: u64 = if sockets.is_empty() {
sockets.push(0); // stdin
sockets.push(1); // stdout
sockets.push(2); // stderr
Expand All @@ -153,10 +147,7 @@ pub fn socket_close(sock: u64) -> bool {

pub fn socket_exist(sock: u64) -> bool {
let sockets = SOCKETS.lock().unwrap();
match sockets.iter().position(|s| *s == sock) {
Some(_) => true,
None => false,
}
sockets.iter().position(|s| *s == sock).is_some()
}

pub fn advance_tick(emu: &mut emu::Emu, millis: u64) {
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/advapi32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"CryptDeriveKey" => CryptDeriveKey(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/crypt32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"CryptStringToBinaryA" => CryptStringToBinaryA(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/dnsapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"DnsQueryW" => DnsQuery_W(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
34 changes: 16 additions & 18 deletions src/api/windows/winapi32/iphlpapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,23 @@ use crate::winapi::winapi32::kernel32;
pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
let api = kernel32::guess_api_name(emu, addr);
let api = api.split("!").last().unwrap_or(&api);
match api {
_ => {
if emu.cfg.skip_unimplemented == false {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}

unimplemented!("atemmpt to call unimplemented API 0x{:x} {}", addr, api);
{
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
log::warn!(
"calling unimplemented API 0x{:x} {} at 0x{:x}",
addr,
api,
emu.regs().rip
);
return api.to_ascii_lowercase();

unimplemented!("atemmpt to call unimplemented API 0x{:x} {}", addr, api);
}
log::warn!(
"calling unimplemented API 0x{:x} {} at 0x{:x}",
addr,
api,
emu.regs().rip
);
api.to_ascii_lowercase()
}
}
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/kernel32/get_thread_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub fn GetThreadContext(emu: &mut emu::Emu) {
.read_dword(emu.regs().get_esp() + 4)
.expect("kernel32!GetThreadContext cannot read the ctx");

let ctx = context32::Context32::new(&emu.regs());
let ctx = context32::Context32::new(emu.regs());
ctx.save(ctx_ptr, &mut emu.maps);

log_red!(emu, "kernel32!GetThreadContext");
Expand Down
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/kernel32/load_resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::emu;

pub fn LoadResource(emu: &mut emu::Emu) {
let hModule = emu.regs().rcx;
let hResInfo = emu.regs().rdx as u64;
let hResInfo = emu.regs().rdx;

log_red!(
emu,
Expand Down
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/kernel32/lock_resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ pub fn LockResource(emu: &mut emu::Emu) {

if helper::handler_exist(hResData) {
let uri = helper::handler_get_uri(hResData);
let ptr = uri.split("_").next().unwrap().parse::<u64>().unwrap() + emu.base as u64;
let ptr = uri.split("_").next().unwrap().parse::<u64>().unwrap() + emu.base;

log_red!(
emu,
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/kernel32/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -795,10 +795,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"ZombifyActCtxWorker" => ZombifyActCtxWorker(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
9 changes: 4 additions & 5 deletions src/api/windows/winapi32/kernel32/resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ pub fn dump_module_iat(emu: &mut emu::Emu, module: &str) {
log::trace!(
"0x{:x} {}!{}",
ordinal.func_va,
&flink.mod_name,
&ordinal.func_name
flink.mod_name,
ordinal.func_name
);
}
}
Expand All @@ -44,8 +44,8 @@ pub fn resolve_api_name_in_module(emu: &mut emu::Emu, module: &str, name: &str)
let first_ptr = flink.get_ptr();

loop {
if flink.mod_name.to_lowercase().contains(&module_lc) {
if flink.export_table_rva > 0 {
if flink.mod_name.to_lowercase().contains(&module_lc)
&& flink.export_table_rva > 0 {
for i in 0..flink.num_of_funcs {
if flink.pe_hdr == 0 {
continue;
Expand All @@ -57,7 +57,6 @@ pub fn resolve_api_name_in_module(emu: &mut emu::Emu, module: &str, name: &str)
}
}
}
}
flink.next(emu);

if flink.get_ptr() == first_ptr {
Expand Down
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/kernel32/set_thread_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub fn SetThreadContext(emu: &mut emu::Emu) {
let opt = con.cmd();

if opt == "y" || opt == "yes" {
let mut ctx = context32::Context32::new(&emu.regs());
let mut ctx = context32::Context32::new(emu.regs());
ctx.load(ctx_ptr, &mut emu.maps);
ctx.sync(emu.regs_mut());
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/kernel32/sizeof_resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::winapi::helper;

pub fn SizeofResource(emu: &mut emu::Emu) {
let hModule = emu.regs().rcx;
let hResInfo = emu.regs().rdx as u64;
let hResInfo = emu.regs().rdx;

emu.stack_pop32(false);
emu.stack_pop32(false);
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/kernelbase.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"LocalAlloc" => LocalAlloc(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/libgcc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"__deregister_frame_info" => __deregister_frame_info(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/mscoree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"_CorExeMain" => _CorExeMain(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/msvcrt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"_errno" => _errno(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/ntdll.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
return String::new();
}

if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(&emu, emu.cfg.dump_filename.as_ref().unwrap());
serialization::Serialization::dump(emu, emu.cfg.dump_filename.as_ref().unwrap());
}

unimplemented!("atemmpt to call unimplemented API 0x{:x} {}", addr, api);
Expand Down
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/ntdll/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ fn LdrLoadDll(emu: &mut emu::Emu) {
emu.maps.write_dword(libaddr_ptr, base as u32);
}

emu.regs_mut().rax = constants::STATUS_SUCCESS as u64;
emu.regs_mut().rax = constants::STATUS_SUCCESS;
}

fn LdrLoadDll_gul(emu: &mut emu::Emu) {
Expand Down
2 changes: 1 addition & 1 deletion src/api/windows/winapi32/ntdll/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ fn NtGetContextThread(emu: &mut emu::Emu) {

log_red!(emu, "ntdll_NtGetContextThread ctx");

let ctx = Context32::new(&emu.regs());
let ctx = Context32::new(emu.regs());
ctx.save(ctx_ptr2 as u32, &mut emu.maps);

emu.regs_mut().rax = 0;
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/ntoskrnl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
match api {
"RtlInitUnicodeString" => RtlInitUnicodeString(emu),
_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/oleaut32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"SysFreeString" => SysFreeString(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/shell32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"ShellExecuteA" => ShellExecuteA(emu),
"ShellExecuteW" => ShellExecuteW(emu),
_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/shlwapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"PathFileExistsA" => PathFileExistsA(emu),
"PathFileExistsW" => PathFileExistsW(emu),
_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/urlmon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"URLDownloadToFileA" => URLDownloadToFileA(emu),
"URLDownloadToFileW" => URLDownloadToFileW(emu),
_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/user32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"CharLowerW" => CharLowerW(emu),
"wsprintfA" => wsprintfA(emu),
_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
4 changes: 2 additions & 2 deletions src/api/windows/winapi32/wincrt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ pub fn gateway(addr: u32, emu: &mut emu::Emu) -> String {
"_set_invalid_parameter_handler" => set_invalid_parameter_handler(emu),

_ => {
if emu.cfg.skip_unimplemented == false {
if !emu.cfg.skip_unimplemented {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
serialization::Serialization::dump(
&emu,
emu,
emu.cfg.dump_filename.as_ref().unwrap(),
);
}
Expand Down
Loading
Loading