52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package elf
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"io"
|
|
)
|
|
|
|
const (
|
|
baseAddress = 0x400000
|
|
programAlign = 16
|
|
sectionAlign = 16
|
|
)
|
|
|
|
// ELF64 represents an ELF 64-bit file.
|
|
type ELF64 struct {
|
|
Header
|
|
}
|
|
|
|
// New creates a new 64-bit ELF binary.
|
|
func New() *ELF64 {
|
|
elf := &ELF64{
|
|
Header: Header{
|
|
Magic: [4]byte{0x7F, 'E', 'L', 'F'},
|
|
Class: 2,
|
|
Endianness: LittleEndian,
|
|
Version: 1,
|
|
OSABI: 0,
|
|
ABIVersion: 0,
|
|
Type: TypeExecutable,
|
|
Architecture: ArchitectureAMD64,
|
|
FileVersion: 1,
|
|
EntryPointInMemory: 0,
|
|
ProgramHeaderOffset: HeaderSize,
|
|
SectionHeaderOffset: 0, // TODO
|
|
Flags: 0,
|
|
Size: HeaderSize,
|
|
ProgramHeaderEntrySize: ProgramHeaderSize,
|
|
ProgramHeaderEntryCount: 0,
|
|
SectionHeaderEntrySize: SectionHeaderSize,
|
|
SectionHeaderEntryCount: 0,
|
|
SectionNameStringTableIndex: 0,
|
|
},
|
|
}
|
|
|
|
return elf
|
|
}
|
|
|
|
// Write writes the ELF64 format to the given writer.
|
|
func (elf *ELF64) Write(writer io.Writer) {
|
|
binary.Write(writer, binary.LittleEndian, &elf.Header)
|
|
}
|