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 {
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
}
......
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