• Prashant Agrawal's avatar
    debug/pe: enable parsing of variable length optional header in PE file · 3b92f36d
    Prashant Agrawal authored
    The debug/pe package assumes there are always 16 entries in
    DataDirectory in OptionalHeader32/64
    ref pe.go:
    ...
    NumberOfRvaAndSizes uint32
    DataDirectory [16]DataDirectory
    }
    ...
    
    But that is not always the case, there could be less no of
    entries (PE signed linux kernel for example):
    $ sudo pev /boot/vmlinuz-4.15.0-47-generic
    ....
    Data-dictionary entries:	6
    ....
    
    In such case, the parsing gives incorrect results.
    This changes aims to fix that by:
    1. Determining type of optional header by looking at header
       magic instead of size
    2. Parsing optional header in 2 steps:
       a. Fixed part
       b. Variable data directories part
    
    Testing:
    1. Fixed existing test cases to reflect the change
    2. Added new file (modified linux kernel image)
       which has smaller number of data directories
    
    Fixes #32126
    
    Change-Id: Iee56ecc4369a0e75a4be805e7cb8555c7d81ae2f
    Reviewed-on: https://go-review.googlesource.com/c/go/+/177959
    Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
    3b92f36d
file.go 16.5 KB