mirror of
https://github.com/golang/go
synced 2024-11-26 11:08:38 -07:00
debug/pe: recognize arm64 executables
We still need to add test data, but as yet we haven't identified a good Windows arm64 compiler to produce small binaries. This CL is part of a stack adding windows/arm64 support (#36439), intended to land in the Go 1.17 cycle. Change-Id: Ifbecb9a6e25f7af38e20b7d7830df7f5efe2798a Reviewed-on: https://go-review.googlesource.com/c/go/+/288820 Trust: Russ Cox <rsc@golang.org> Trust: Jason A. Donenfeld <Jason@zx2c4.com> Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
0c633125f2
commit
0ca0551f02
@ -75,7 +75,7 @@ func NewFile(r io.ReaderAt) (*File, error) {
|
|||||||
var sign [4]byte
|
var sign [4]byte
|
||||||
r.ReadAt(sign[:], signoff)
|
r.ReadAt(sign[:], signoff)
|
||||||
if !(sign[0] == 'P' && sign[1] == 'E' && sign[2] == 0 && sign[3] == 0) {
|
if !(sign[0] == 'P' && sign[1] == 'E' && sign[2] == 0 && sign[3] == 0) {
|
||||||
return nil, fmt.Errorf("Invalid PE COFF file signature of %v.", sign)
|
return nil, fmt.Errorf("invalid PE file signature: % x", sign)
|
||||||
}
|
}
|
||||||
base = signoff + 4
|
base = signoff + 4
|
||||||
} else {
|
} else {
|
||||||
@ -86,9 +86,14 @@ func NewFile(r io.ReaderAt) (*File, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
switch f.FileHeader.Machine {
|
switch f.FileHeader.Machine {
|
||||||
case IMAGE_FILE_MACHINE_UNKNOWN, IMAGE_FILE_MACHINE_ARMNT, IMAGE_FILE_MACHINE_AMD64, IMAGE_FILE_MACHINE_I386:
|
case IMAGE_FILE_MACHINE_AMD64,
|
||||||
|
IMAGE_FILE_MACHINE_ARM64,
|
||||||
|
IMAGE_FILE_MACHINE_ARMNT,
|
||||||
|
IMAGE_FILE_MACHINE_I386,
|
||||||
|
IMAGE_FILE_MACHINE_UNKNOWN:
|
||||||
|
// ok
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("Unrecognised COFF file header machine value of 0x%x.", f.FileHeader.Machine)
|
return nil, fmt.Errorf("unrecognized PE machine: %#x", f.FileHeader.Machine)
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -112,7 +117,7 @@ func NewFile(r io.ReaderAt) (*File, error) {
|
|||||||
// Seek past file header.
|
// Seek past file header.
|
||||||
_, err = sr.Seek(base+int64(binary.Size(f.FileHeader)), seekStart)
|
_, err = sr.Seek(base+int64(binary.Size(f.FileHeader)), seekStart)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failure to seek past the file header: %v", err)
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read optional header.
|
// Read optional header.
|
||||||
@ -309,7 +314,7 @@ func (f *File) ImportedSymbols() ([]string, error) {
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
pe64 := f.Machine == IMAGE_FILE_MACHINE_AMD64
|
pe64 := f.Machine == IMAGE_FILE_MACHINE_AMD64 || f.Machine == IMAGE_FILE_MACHINE_ARM64
|
||||||
|
|
||||||
// grab the number of data directory entries
|
// grab the number of data directory entries
|
||||||
var dd_length uint32
|
var dd_length uint32
|
||||||
|
Loading…
Reference in New Issue
Block a user