From 44bcc1fcd9027025726021bfb04de591c4a65b63 Mon Sep 17 00:00:00 2001 From: Wei Guangjing Date: Thu, 10 Feb 2011 10:22:32 -0500 Subject: [PATCH] debug/pe: ImportedSymbols fixes R=golang-dev, brainman, mattn, rsc CC=golang-dev https://golang.org/cl/4001058 --- src/pkg/debug/pe/file.go | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/pkg/debug/pe/file.go b/src/pkg/debug/pe/file.go index 82c02407bb..1bcbdc5e9a 100644 --- a/src/pkg/debug/pe/file.go +++ b/src/pkg/debug/pe/file.go @@ -57,7 +57,6 @@ type ImportDirectory struct { FirstThunk uint32 dll string - rva []uint32 } // Data reads and returns the contents of the PE section. @@ -267,34 +266,28 @@ func (f *File) ImportedSymbols() ([]string, os.Error) { } ida = append(ida, dt) } - for i, _ := range ida { + names, _ := ds.Data() + var all []string + for _, dt := range ida { + dt.dll, _ = getString(names, int(dt.Name-ds.VirtualAddress)) + d, _ = ds.Data() + // seek to OriginalFirstThunk + d = d[dt.OriginalFirstThunk-ds.VirtualAddress:] for len(d) > 0 { va := binary.LittleEndian.Uint32(d[0:4]) d = d[4:] if va == 0 { break } - ida[i].rva = append(ida[i].rva, va) - } - } - for _, _ = range ida { - for len(d) > 0 { - va := binary.LittleEndian.Uint32(d[0:4]) - d = d[4:] - if va == 0 { - break + if va&0x80000000 > 0 { // is Ordinal + // TODO add dynimport ordinal support. + //ord := va&0x0000FFFF + } else { + fn, _ := getString(names, int(va-ds.VirtualAddress+2)) + all = append(all, fn+":"+dt.dll) } } } - names, _ := ds.Data() - var all []string - for _, dt := range ida { - dt.dll, _ = getString(names, int(dt.Name-ds.VirtualAddress)) - for _, va := range dt.rva { - fn, _ := getString(names, int(va-ds.VirtualAddress+2)) - all = append(all, fn+":"+dt.dll) - } - } return all, nil } -- 2.50.0