Commit 44bcc1fc authored by Wei Guangjing's avatar Wei Guangjing Committed by Russ Cox

debug/pe: ImportedSymbols fixes

R=golang-dev, brainman, mattn, rsc
CC=golang-dev
https://golang.org/cl/4001058
parent 9fe490ee
...@@ -57,7 +57,6 @@ type ImportDirectory struct { ...@@ -57,7 +57,6 @@ type ImportDirectory struct {
FirstThunk uint32 FirstThunk uint32
dll string dll string
rva []uint32
} }
// Data reads and returns the contents of the PE section. // Data reads and returns the contents of the PE section.
...@@ -267,34 +266,28 @@ func (f *File) ImportedSymbols() ([]string, os.Error) { ...@@ -267,34 +266,28 @@ func (f *File) ImportedSymbols() ([]string, os.Error) {
} }
ida = append(ida, dt) 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 { for len(d) > 0 {
va := binary.LittleEndian.Uint32(d[0:4]) va := binary.LittleEndian.Uint32(d[0:4])
d = d[4:] d = d[4:]
if va == 0 { if va == 0 {
break break
} }
ida[i].rva = append(ida[i].rva, va) if va&0x80000000 > 0 { // is Ordinal
} // TODO add dynimport ordinal support.
} //ord := va&0x0000FFFF
for _, _ = range ida { } else {
for len(d) > 0 { fn, _ := getString(names, int(va-ds.VirtualAddress+2))
va := binary.LittleEndian.Uint32(d[0:4]) all = append(all, fn+":"+dt.dll)
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)
}
}
return all, nil return all, nil
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment