[MPlayer-dev-eng] [PATCH] fix for crt8 init dll

Gianluigi Tiesi mplayer at netfarm.it
Wed Feb 3 03:51:17 CET 2010


On Tue, Feb 02, 2010 at 10:53:57PM +0100, Reimar D?ffinger wrote:
> On Tue, Feb 02, 2010 at 10:35:02PM +0100, Gianluigi Tiesi wrote:
> > On Tue, Feb 02, 2010 at 08:16:36PM +0100, Reimar D?ffinger wrote:
> > > On Tue, Feb 02, 2010 at 12:16:30AM +0100, Gianluigi Tiesi wrote:
> > > > msvcrt static linked dll and newer are making a check for "mixed crt" (posix)
> > > > executables, this implies a GetModuleHandle on the main exe
> > > > and a check for a section named .mixcrt
> > > > 
> > > > The attached patch fixes it by providing a minimal struct
> > > > needed to the crt init function, and fakes the section
> > > > .mixcrt so the crt avoid using Encode/Decode Pointers
> > > 
> > > Could you also explain why you want that? :-)
> > > Is there some broken codec that ends up using the static
> > > linked MSVCRT for half the encode/decode and our stubs
> > > for the other half or something like that (how would that
> > > happen?)?
> > 
> > the crt8 (and above) will execute that code if compiled statically
> > so every codec compiled with statically linked crt will crash,
> > using .mixcrt will avoid some encodepointer/decodepointer call
> > but it's not mandatory, a section and section count 1 (or even 0)
> > is enough
> 
> Ah, that makes sense and I'd say is okay then, though I suggest simplifying
> it to the minimum (at least improving the comment is a must though).
> Possible suggestion (please test and modify to your liking):
> 
> > /* Fake executable header, statically linked msvcrt8 expects
> >    GetModuleHandle(NULL) to return a pointer to IMAGE_DOS_HEADER
> >    etc. (it looks for a ".mixcrt" section to decide whether to use
> >    EncodePointer/DecodePointer or not)
> >  */
> >static const struct {
> >    IMAGE_DOS_HEADER doshdr;
> >    IMAGE_NT_HEADERS nthdr;
> >} mp_exe = {
> >    .doshdr.e_lfanew = sizeof(IMAGE_DOS_HEADER),
> >    .nthdr.FileHeader.NumberOfSections = 0,
> >}
> 
> (I don't think the packed attribute should be necessary).
> I you much prefer to keep the ".mixcrt" part, keep it, I only
> slightly prefer the smaller code size of my suggestion.

dunno about the packed, but session struct is needed by this:

pSection = IMAGE_FIRST_SECTION(pNTHeader)

it's a macro that point at least on the first section

Regards

-- 
Gianluigi Tiesi <sherpya at netfarm.it>
EDP Project Leader
Netfarm S.r.l. - http://www.netfarm.it/
Free Software: http://oss.netfarm.it/



More information about the MPlayer-dev-eng mailing list