[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