Posted by Computer Consultant on 1999-03-23
At 07:58 PM 3/23/99 +0100, you wrote:
>>Date: Mon, 22 Mar 1999 10:47:43 +01d0
>>From: "Sigrist Bernhard Gossau" <null@xxxx.xx>
>>Subject: Re: Write permission in x86 PMode
>>
>>>>Write to it, if your program crashes, you don't!
>>Heheh, that's the current state. But (as you might have suspected) thats
not very user-friendly 8-)
>>>>[...]
>>>>What exactly is the situtation.
>>
>>I have a Win32 app where I get a pointer to a data buffer (=logical
address). The problem is, at runtime I don't know how large that buffer is
(it can even be 0). What I want to do is check if I may write a byte, then
write it, check the next one and so on. AFAIK there's am ASM instruction
for that type of checking, but I don't remember it. Help would be greatly
appreciated. ASM would be just fine, API calls are okay.
>
>I do not think there could be an instruction for this kind of job, because
the CPU cannot tell the difference between a page to which you have no
rights and a page which is temporarily swapped to the disk. Both of them
will be marked as inaccessible in some way. If you try to read or write to
any of them, the CPU will trap to the OS, which either terminates the
application with a protection fault, or swaps the required page back in
memory and re-executes the offending instruction.
>In my point of view, only the OS can tell you, whether or not you have
rights to a given address.
>Also I do not think the other suggestions about LDT and GDT will work in
Win32. As far as I know this belongs to Windows 3.x, DPMI or other 16-bit
protected mode environments. In Win32 I think it all goes on in one big
segment, which covers the entire 32-bit addressing space.
>Enough reasons why it cannot be done. I am using Delphi and I have noticed
that whenever I violate the memory protection Delphi comes up with a dialog
saying that my application has raised some exception. My point is that it
is possible for my application to catch this exception if I add a try ...
except block. Even if you do not use Delphi, I think this proves that it is
possible to trap memory access violations
>Attachment Converted: "c:\eudora\attach\Re Write permission in x86 PMo"
>
There are ways if you are RING0 and in Win95, you can use DMPI.
And the suggestions about LDT and GDT where hypothetical, they
were just telling where the informatino is stored, obviously
you will have trouble tring to access them unless you've got OS
code permissions.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+
| http://www.nauticom.net/www/secret |
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+
3%
Previous post | Next post | Timeline | Home