Duplicate relocations in DLL
Alessandro Pignotti
alexpigna.dev at gmail.com
Thu May 16 12:03:29 CDT 2013
I think it's actually the second case you mentioned. I'm pasting an excerpt
from 'objdump -x' of the dll. The issue happens with bgm.dll from the game
"Hotline Miami".
Regards and sorry for the long paste below,
Alessandro Pignotti
-----------------------------------------------
bgm.dll: formato del file pei-i386
bgm.dll
architettura: i386, flag 0x00000103:
HAS_RELOC, EXEC_P, D_PAGED
indirizzo di partenza 0x6d741000
Characteristics 0x230e
executable
line numbers stripped
symbols stripped
32 bit words
debugging information removed
DLL
PE File Base Relocations (interpreted .reloc section contents)
Virtual Address: 00001000 Chunk size 268 (0x10c) Number of fixups 130
...
Virtual Address: 00002000 Chunk size 296 (0x128) Number of fixups 144
...
Virtual Address: 00003000 Chunk size 336 (0x150) Number of fixups 164
...
Virtual Address: 00004000 Chunk size 296 (0x128) Number of fixups 144
...
Virtual Address: 00005000 Chunk size 112 (0x70) Number of fixups 52
...
Virtual Address: 00006000 Chunk size 12 (0xc) Number of fixups 2
...
Virtual Address: 00007000 Chunk size 228 (0xe4) Number of fixups 110
...
Virtual Address: 00008000 Chunk size 356 (0x164) Number of fixups 174
...
Virtual Address: 00001000 Chunk size 268 (0x10c) Number of fixups 130
...
Virtual Address: 00002000 Chunk size 296 (0x128) Number of fixups 144
...
Virtual Address: 00003000 Chunk size 336 (0x150) Number of fixups 164
...
Virtual Address: 00004000 Chunk size 296 (0x128) Number of fixups 144
...
Virtual Address: 00005000 Chunk size 112 (0x70) Number of fixups 52
...
Virtual Address: 00006000 Chunk size 12 (0xc) Number of fixups 2
...
Virtual Address: 00007000 Chunk size 228 (0xe4) Number of fixups 110
...
Virtual Address: 00008000 Chunk size 356 (0x164) Number of fixups 174
...
> On 16 May 2013, at 16:34, Jonas Maebe wrote:
> > On 15 May 2013, at 16:31, Alessandro Pignotti wrote:
> >> Packaged with a game, I found a peculiar DLL which has duplicate
> >> blocks in the
> >> relocation table. I mean that the same pages are relocated twice
> >> and this of
> >> course breaks the DLL. I'm not sure about what could be a right way
> >> to support
> >> such (broken) DLLs. A possibility would be to keep track of already
> >> relocated
> >> pages and skip them if needed. Suggestions are welcome.
> >
> > I've just asked a colleague of mine about this and according to him
> > it's perfectly legal in Windows to have multiple relocation blocks
> > for the same section, in which case Windows will also fixup
> > everything twice. So simply ignoring such relocations is normally
> > wrong. Which dll from which game is this?
>
> Addendum: he just realised that you may be talking about multiple base
> relocation arrays for a single page (arrays that contain the offsets
> of the instructions that need fixing up), which would indeed be
> strange. Still, it would be interesting to know which dll it is.
>
> Thanks,
>
>
> Jonas
More information about the wine-devel
mailing list