1
0
mirror of https://github.com/golang/go synced 2024-11-21 15:04:44 -07:00

debug/pe: ImportedSymbols fixes

R=golang-dev, brainman, mattn, rsc
CC=golang-dev
https://golang.org/cl/4001058
This commit is contained in:
Wei Guangjing 2011-02-10 10:22:32 -05:00 committed by Russ Cox
parent 9fe490ee38
commit 44bcc1fcd9

View File

@ -57,7 +57,6 @@ type ImportDirectory struct {
FirstThunk uint32
dll string
rva []uint32
}
// Data reads and returns the contents of the PE section.
@ -267,32 +266,26 @@ func (f *File) ImportedSymbols() ([]string, os.Error) {
}
ida = append(ida, dt)
}
for i, _ := range ida {
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
}
}
}
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)
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
}
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)
}
}
}