At 12:49 PM 8/17/2006 -0500, I wrote:
> >      And? Why return address isn't damaged? Let me ask again:
> >
> >stack:
> >| ret address |
> >+-------------+
> >| pushf       | <- tom thinks, this value damaged
> >+-------------+
> >| INT15 call  |
> >
> >stack after tom's patch:
> >
> >stack:
> >| ret address | <- why this value not damaged?
> >+-------------+
> >| INT15 call  |
>
>The most obvious case would be if a single bit were being tripped and the
>bit still matched existing return address or changed it to a benign one
>(which could happen if the bit was low).

Ack! I'm stupid.  You can quote me.

The reason that the stack overwrite doesn't cause failure on the return 
address in the first patch, is that it isn't the return address living 
there.  It's the original AX value stored on the stack with a PUSH AX you 
don't see.  See the POP AX that follows?  So the BIOS routine probably is 
trashing AX, but that's the register most likely to be noncritical across 
INT calls, so changing it would seldom cause problems. When the flags were 
there at [sp], then the garbage value could easily have fatal consequences.

Okay, that explanation works much better for me, and makes a lot more 
sense.  I was a bit worried about the return address getting munged myself, 
but the fact of AX modification is a good reason for why the BIOS bug 
didn't keep biting, and the first patched worked.


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to