Fix i386 QEMU read_function_argument() (#1677)

This commit is contained in:
Andrea Fioraldi 2023-11-20 13:53:29 +01:00 committed by GitHub
parent a278357ed9
commit aa69436b64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -80,7 +80,6 @@ impl crate::ArchExtras for crate::CPU {
match idx {
0..=1 => {
let val: GuestReg = val.into();
let stack_ptr: GuestAddr = self.read_reg(Regs::Sp)?;
/*
* Stack is full and descending. SP points to return address, arguments
@ -89,10 +88,11 @@ impl crate::ArchExtras for crate::CPU {
let size: GuestAddr = size_of::<GuestReg>() as GuestAddr;
let offset = size * (idx as GuestAddr + 1);
let val = unsafe {
self.read_mem(stack_ptr + offset, size_of::<GuestReg>());
};
Ok(GuestReg::from_le_bytes(val))
let mut val = [0u8; size_of::<GuestReg>()];
unsafe {
self.read_mem(stack_ptr + offset, &mut val);
}
Ok(GuestReg::from_le_bytes(val).into())
}
_ => Err(format!("Unsupported argument: {idx:}")),
}