On Thu, 18 Dec 2008 20:26:05 +0100, Danny Backx <danny.ba...@scarlet.be> wrote: > What's an o32_ptr ? > > Does all this mean that we're not filling up a structure in the DLL, and > that UPX is doing the right thing but we're not ? > > Danny > Yes o32_ptr is part of the PE format :
// // MODULE structure, one for each DLL // struct _MODULE { DLIST link; /* Doubly-linked list to link all modules (must be 1st) */ PMODULE lpSelf; /* ptr to self for validation */ WORD wRefCnt; /* ref-cnt (# of processes loaded this module) */ WORD wFlags; /* module flags */ ulong startip; /* entrypoint */ LPVOID BasePtr; /* Base pointer of dll load (not 0 based) */ PMODULE pmodResource; /* module that contains the resources */ e32_lite e32; /* E32 header */ LPWSTR lpszModName; /* Module name */ DWORD DbgFlags; /* Debug flags */ LPDBGPARAM ZonePtr; /* address of Debug zone */ DWORD dwZone; /* the zone value */ PFNIOCTL pfnIoctl; /* LoadKernelLibrary specific - entry to IOCTL funciton */ openexe_t oe; /* Pointer to executable file handle */ o32_lite *o32_ptr; /* O32 chain ptr */ }; /* * OBJECT TABLE */ typedef struct o32_lite { unsigned long o32_vsize; unsigned long o32_rva; unsigned long o32_realaddr; unsigned long o32_access; unsigned long o32_flags; unsigned long o32_psize; unsigned long o32_dataptr; } o32_lite, *LPo32_lite; and as you wrote UPX is doing the right thing, I don't know exactly how but maybe when compressing and uncompressing it fixes the issue with o32_ptr. > On Thu, 2008-12-18 at 10:38 +0100, mosfet wrote: >> Hi, >> >> Thanks to a great Windows Mobile Hacker/tweaker mamaich, he has found why >> cegcc binaries are not loaded on WM6.1 platforms. >> Please find below his analysis : >> >> KITL output: >> >> 167564 PID:97eeb752 TID:b5980c3a CertVerify: \testDllexe.exe trust = 2 >> 167635 PID:97eeb752 TID:b5980c3a CertVerify: testDll.dll trust = 2 >> 167642 PID:b5980d96 TID:b5980c3a Data Abort: Thread=9662ea18 >> Proc=908c0810 >> '' >> 167645 PID:b5980d96 TID:b5980c3a AKY=00002105 >> PC=9057048c(NK.EXE+0x0003048c) RA=000000e4(???+0x000000e4) BVA=78215000 >> FSR=00000007 >> >> The function NK.EXE+0x0003048c == PageInModule. It is called by >> LoaderPageIn. >> >> >> >> Disasm: >> >> 9043146C PageInModule ; CODE XREF: >> LoaderPageIn+1E4p >> 9043146C ; DATA XREF: >> .pdata:90518270o >> 9043146C >> 9043146C var_3C = -0x3C >> 9043146C var_38 = -0x38 >> 9043146C var_34 = -0x34 >> 9043146C var_30 = -0x30 >> 9043146C var_2C = -0x2C >> 9043146C var_28 = -0x28 >> 9043146C >> 9043146C STMFD SP!, {R4-R11,LR} >> 90431470 SUB SP, SP, #0x18 >> 90431474 MOV R2, R1 >> 90431478 MOV R6, R0 >> 9043147C MOV R3, #0 >> 90431480 MOV R4, R6 >> 90431484 LDRH R1, [R4,#0x70]! >> 90431488 SUB R3, R3, #0x1000 >> 9043148C LDR R0, [R6,#0xC4] <---- >> crash >> is here >> >> 90431490 AND R5, R2, R3 >> 90431494 MOV R2, R5 >> 90431498 MOV R11, #0 >> 9043149C BL FindOptr >> 904314A0 MOVS R10, R0 >> 904314A4 MOVEQ R4, #0 >> >> >> >> Here is equivalent source code : >> >> int PageInModule (PMODULE pMod, DWORD addr) >> { >> >> >> // ... >> >> e32_lite *eptr = &pMod->e32; >> >> // use page start to page in >> addr &= -PAGE_SIZE; >> >> if (!(optr = FindOptr (pMod->o32_ptr, eptr->e32_objcnt, addr))) >> // fail if can't find it in any section >> >> return PAGEIN_FAILURE; >> >> >> >> Obviously pMod structure here is broken.If you'd look into LoaderPageIn, >> you'll see that it walks through a zero terminated linked list of modules >> with the first element points to the next. And the last element describes >> your DLL and its pMod->o32_ptr is invalid. >> >> o32_ptr is filled from PE header, so there should be something wrong in >> PE. >> >> I've looked into the DLL, it has 14 sections - too much as I think. Try >> to >> compile it without debugging info. >> >> One workaround that makes your DLL work is compressing it with UPX: >> http://upx.sourceforge.net >> >> >> >> >> >> ------------------------------------------------------------------------------ >> SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, >> Nevada. >> The future of the web can't happen without you. Join us at MIX09 to help >> pave the way to the Next Web now. Learn more and register at >> http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ >> _______________________________________________ >> Cegcc-devel mailing list >> Cegcc-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/cegcc-devel >> > -- Vincent R. ------------------------------------------------------------------------------ _______________________________________________ Cegcc-devel mailing list Cegcc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cegcc-devel