github.com/saferwall/pe@v1.5.2/overlay.go (about) 1 // Copyright 2022 Saferwall. All rights reserved. 2 // Use of this source code is governed by Apache v2 license 3 // license that can be found in the LICENSE file. 4 5 package pe 6 7 import ( 8 "errors" 9 "io" 10 ) 11 12 // error 13 var ( 14 ErrNoOverlayFound = errors.New("pe does not have overlay data") 15 ) 16 17 // NewOverlayReader returns a new ReadSeeker reading the PE overlay data. 18 func (pe *File) NewOverlayReader() (*io.SectionReader, error) { 19 if pe.data == nil { 20 return nil, errors.New("pe: file reader is nil") 21 } 22 return io.NewSectionReader(pe.f, pe.OverlayOffset, 1<<63-1), nil 23 } 24 25 // Overlay returns the overlay of the PE file. 26 func (pe *File) Overlay() ([]byte, error) { 27 sr, err := pe.NewOverlayReader() 28 if err != nil { 29 return nil, err 30 } 31 32 overlay := make([]byte, int64(pe.size)-pe.OverlayOffset) 33 n, err := sr.ReadAt(overlay, 0) 34 if n == len(overlay) { 35 pe.HasOverlay = true 36 err = nil 37 } 38 39 return overlay, err 40 } 41 42 func (pe *File) OverlayLength() int64 { 43 return int64(pe.size) - pe.OverlayOffset 44 }