[email protected] wrote:
> Author: fireball
> Date: Sat Sep 11 09:20:26 2010
> New Revision: 48745
>
...
> /* Save EFlags */
> + Esp -= 4;
> + *(PULONG)(Esp - 2) = V86EFlags;
>
This looks wrong to me. The (Esp - 2) I mean.
> + if (KiVdmGetPrefixFlags(Flags) & PFX_FLAG_OPER32)
> + {
> + /* Read EFlags */
> + EFlags = *(PULONG)Esp;
> + Esp += 4;
> + }
> + else
> + {
> + /* Read EFlags */
> + EFlags = *(PUSHORT)Esp;
> + Esp += 2;
> /* Read correct flags and use correct stack address */
> - Esp -= 2;
> EFlags &= 0xFFFF;
>
Here the comment got broken a bit.
> /* Set new ESP */
> - TrapFrame->HardwareEsp = Esp;
> + TrapFrame->HardwareEsp = (USHORT)Esp;
>
This is not correct. We earlier calculated the flat Esp from Ss and Sp.
Example:
HardwareSegSs = 0x10, HardwareEsp = 0x10 -> flat Esp = 0x110, then you
substract 4, and get 0x10C. But this is not the value of the new
HardwareEsp. TrapFrame->HardwareEsp needs to be either modified in
parallel to the flat Esp or calculated like (USHORT)(Esp -
(TrapFrame->HardwareSegSs << 4)).
Regards,
Timo
_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev