VirtualProtect bug?

Dan Kegel dank at kegel.com
Sat May 15 19:26:19 CDT 2004


> I'm trying to write a test that checks for data overruns
> using VirtualAlloc and VirtualProtect and I think
> I may have found a bug.  Here is the problem:
> 
> DWORD dwPageSize;
> BYTE * twoPages, temp;
> DWORD flOldProtect;
> twoPages = VirtualAlloc(NULL, 2 * dwPageSize, MEM_RESERVE | MEM_COMMIT,  PAGE_READWRITE);
> res = VirtualProtect(twoPages + dwPageSize, dwPageSize, PAGE_NOACCESS,  &flOldProtect);
> temp = twoPages[dwPageSize + 1];    // should cause exception but  doesn't in wine
> twoPages[dwPageSize + 1] = 0;        // does cause exception

Say, that code fragment wasn't complete, was it?
Looks like dwPageSize was uninitialized...

> I would like to write a test to check the exception handling
> but I don't know how to do a __try and __except in C.

OK, I don't know much about it either.  A little googling shows:
http://www.kerneltraffic.org/wine/wn20030516_170.html#8 makes it
sound like __try is hard to do with gcc.  You might need to
punt and, when compiling with gcc, do nothing unless building in winelib, where you'd set up a handler
for SIGSEGV to catch the bad access.
  http://www.codeproject.com/cpp/transactions.asp?df=100&forumid=11253&exp=0&select=435857
has some examples of how __try is used in visual C.
(Note that you can download a copy of visual C's commandline compiler free from
Microsoft.)

What confuses me is, doesn't MinGW support __try?  Hrm.
- Dan

-- 
My technical stuff: http://kegel.com
My politics: see http://www.misleader.org for examples of why I'm for regime change



More information about the wine-devel mailing list