fix imports that randomly got the backwards iterator from crashing

This commit is contained in:
Numbers
2025-05-16 21:55:49 +02:00
parent 152853ed2c
commit 5571f608d9

View File

@@ -130,20 +130,18 @@ pub unsafe fn import<
core::arch::asm!(
"mov {x}, gs:[60h]", // TEB->PEB
"mov {x}, [{x} + 18h]", // PEB->LDR
"mov {x}, [{x} + 10h]", // LDR->InLoadOrderModuleList
x = out(reg) module_link,
);
"lea {x}, [{x} + 10h]", // LDR->InLoadOrderModuleList
x = out(reg) module_link);
// 0x0 = next, 0x8 = prev, use the xor seed to flip the direction of the iterator
let offsets = 1; // const { XorSeed & 1 };
let offsets = const { XorSeed & 1 } as usize;
let mut cursor = module_link as usize;
let end = (cursor as *const usize).add(offsets ^ 1).read();
let mut module: usize = 0usize;
loop {
cursor = (cursor as *const usize).add(offsets).read();
// if we have gone all the way around and ended up at our module again, abort
if cursor == module_link as usize { break; }
while cursor != end {
cursor = (cursor as *const usize).add(offsets).read();
// extract the appropriate fields
let name_len = ((cursor + 0x58) as *const u16).read();
@@ -164,7 +162,7 @@ pub unsafe fn import<
match module.exports() {
None => {
debug_assert!(false, "Module has no exports");
core::arch::asm!("int 3", options(noreturn));
core::arch::asm!("", options(noreturn));
}
Some(exports) => {
for export in exports {
@@ -175,7 +173,7 @@ pub unsafe fn import<
}
}
debug_assert!(false, "failed to find export");
core::arch::asm!("int 3", options(noreturn))
core::arch::asm!("", options(noreturn))
}
}