BTW, I have verified that these options all work as described and the options 
are recognized and processed properly by Windows, and that BinScope is happy:

Failed checks
d:\source\sqlite\sqlite3.dll - SafeSEHCheck ( FAIL ) 

Passed checks
d:\source\sqlite\sqlite3.dll - NXCheck ( PASS ) 
d:\source\sqlite\sqlite3.dll - DBCheck ( PASS ) 

(Note, position independent code (PIC) is by definition loadable at any base.  
Microsoft is just several decades behind in generating position independent 
code.)

---
Theory is when you know everything but nothing works.  Practice is when 
everything works but no one knows why.  Sometimes theory and practice are 
combined:  nothing works and no one knows why.


>-----Original Message-----
>From: sqlite-users-bounces at mailinglists.sqlite.org [mailto:sqlite-users-
>bounces at mailinglists.sqlite.org] On Behalf Of Keith Medcalf
>Sent: Thursday, 2 April, 2015 17:43
>To: General Discussion of SQLite Database
>Subject: Re: [sqlite] Windows 8.x security requirements / SafeSEHCheck -
>NXCheck - DBCheck
>
>
>add the following linker options with MinGW:
>
>-static-libgcc -Wl,-Bstatic,--nxcompat,--dynamicbase,--export-all-symbols
>
>You may or may not need -static-libgcc or the linker -Bstatic options
>unless you are also enabling things that require MingW DLL runtime
>support (such as using the -mthreads option to make the DLL thread
>exception safe).
>
>-Wl,--nxcompat,--dynamicbase,--export-all-symbols,--large-address-aware
>
>Sets the NXCOMPAT and DYNAMICBASE (ASLR) flags on the output of the
>linker (so you can add them to the shell tool and other pre-built
>executables as well).  Files also need to export the symbol table (hence
>the --export-all-symbols).  --large-address-aware sets the (you guessed
>it) large address aware flag which basically means that you are using
>unsigned pointers and not signed pointers (that is, you understand that
>neither disk space nor memory comes in negative sizes) and don't diddle
>with your pointers (eg, assigning magical meaning to bits in the
>pointer).  This allows use of more than 2GB of virtual address space per
>process on systems that support it (ie, 32-bit userland on a 64-bit
>Windows -- on 64-bit Windows windows does not co-habitate with 32-bit
>processes, instead a wee trampoline is installed in the top 100MB or so
>of the virtual space to thunk back and forth to the OS -- making it
>impossible to insert code into the OS from a 32-bit process, while 64-bit
>processes on 64
> -bit windows have full and complete access to the OS as it resides in
>each processes address space) or if the /3GB boot option is set on 32-bit
>OSes (so the OS is forced to shoehorn into the top 1GB of each process).
>
>The only thing this does not fix is the Exception Handlers.  But that
>particular protection is not implemented by gcc (not needed because of
>non-ill-conceived design?).  However, you might still want to add -
>mthreads and the static linking options to the build so that the GCC
>threadsafe exception handlers are used.
>
>---
>Theory is when you know everything but nothing works.  Practice is when
>everything works but no one knows why.  Sometimes theory and practice are
>combined:  nothing works and no one knows why.
>
>>-----Original Message-----
>>From: sqlite-users-bounces at mailinglists.sqlite.org [mailto:sqlite-users-
>>bounces at mailinglists.sqlite.org] On Behalf Of Richard Hipp
>>Sent: Thursday, 2 April, 2015 14:25
>>To: General Discussion of SQLite Database
>>Subject: Re: [sqlite] Windows 8.x security requirements / SafeSEHCheck -
>>NXCheck - DBCheck
>>
>>On 4/2/15, Random Coder <random.coder at gmail.com> wrote:
>>>
>>> I'd recommend the SQLite team turn them on for the version of the DLL
>>> they distribute, but I'm honestly not sure if there are negative side
>>> effects to doing so.
>>
>>That's not possible, unfortunately,   We compile the published DLL
>>(the 32-bit DLL at least) with MinGW so that they will work on older
>>versions of Windows.  If we used a recent MSVC then the resulting DLL
>>will not work on WinXP, I am told.
>>
>>If the published DLL is not to your liking, it is simple to make your
>>own.  I suggest you do so. You can start with the amalgamated source
>>code file "sqlite3.c".  All you need is to compile that one file into
>>a DLL that the security checker approves of.  How hard can that be?
>>
>>--
>>D. Richard Hipp
>>drh at sqlite.org
>>_______________________________________________
>>sqlite-users mailing list
>>sqlite-users at mailinglists.sqlite.org
>>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
>_______________________________________________
>sqlite-users mailing list
>sqlite-users at mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



Reply via email to