"strings"
)
-type IMAGE_DATA_DIRECTORY struct {
- VirtualAddress uint32
- Size uint32
-}
-
type IMAGE_OPTIONAL_HEADER struct {
Magic uint16
MajorLinkerVersion uint8
SizeOfHeapCommit uint32
LoaderFlags uint32
NumberOfRvaAndSizes uint32
- DataDirectory [16]IMAGE_DATA_DIRECTORY
+ DataDirectory [16]pe.DataDirectory
}
type IMAGE_IMPORT_DESCRIPTOR struct {
SizeOfHeapCommit uint64
LoaderFlags uint32
NumberOfRvaAndSizes uint32
- DataDirectory [16]IMAGE_DATA_DIRECTORY
+ DataDirectory [16]pe.DataDirectory
}
// Copyright 2009 The Go Authors. All rights reserved.
var oh64 PE64_IMAGE_OPTIONAL_HEADER
-var dd []IMAGE_DATA_DIRECTORY
-
type Imp struct {
s *Symbol
off uint64
nextFileOffset uint32
symtabOffset int64 // offset to the start of symbol table
symbolCount int // number of symbol table records written
+ dataDirectory [16]pe.DataDirectory
}
// addSection adds section to the COFF file f.
pe64 = 1
l = binary.Size(&oh64)
- dd = oh64.DataDirectory[:]
// 32-bit architectures
default:
l = binary.Size(&oh)
- dd = oh.DataDirectory[:]
}
if Linkmode == LinkExternal {
pefile.writeFileHeader()
if pe64 != 0 {
+ oh64.DataDirectory = pefile.dataDirectory
binary.Write(&coutbuf, binary.LittleEndian, &oh64)
} else {
+ oh.DataDirectory = pefile.dataDirectory
binary.Write(&coutbuf, binary.LittleEndian, &oh)
}
for _, sect := range pefile.sections {
Lputl(0)
// update data directory
- dd[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress = isect.VirtualAddress
- dd[IMAGE_DIRECTORY_ENTRY_IMPORT].Size = isect.VirtualSize
- dd[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress = uint32(dynamic.Value - PEBASE)
- dd[IMAGE_DIRECTORY_ENTRY_IAT].Size = uint32(dynamic.Size)
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress = isect.VirtualAddress
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size = isect.VirtualSize
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress = uint32(dynamic.Value - PEBASE)
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].Size = uint32(dynamic.Size)
Cseek(endoff)
}
sect.Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
sect.checkOffset(coutbuf.Offset())
va := int(sect.VirtualAddress)
- dd[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = uint32(va)
- dd[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = sect.VirtualSize
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = uint32(va)
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = sect.VirtualSize
vaName := va + binary.Size(&e) + nexport*4
vaAddr := va + binary.Size(&e)
h.pad(uint32(rsrcsym.Size))
// update data directory
- dd[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = h.VirtualAddress
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = h.VirtualAddress
- dd[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = h.VirtualSize
+ pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = h.VirtualSize
}
func Asmbpe(ctxt *Link) {