Separated code and data

This commit is contained in:
2023-10-20 13:22:06 +02:00
parent aab33fe86d
commit 0fe419da86
8 changed files with 76 additions and 67 deletions

View File

@ -10,16 +10,17 @@ const (
baseAddress = 0x40 * minAddress
)
// ELF64 represents an ELF 64-bit file.
type ELF64 struct {
// ELF represents an ELF file.
type ELF struct {
Header
ProgramHeader
Code []byte
Data []byte
}
// New creates a new 64-bit ELF binary.
func New(code []byte) *ELF64 {
elf := &ELF64{
// New creates a new ELF binary.
func New(code []byte, data []byte) *ELF {
elf := &ELF{
Header: Header{
Magic: [4]byte{0x7F, 'E', 'L', 'F'},
Class: 2,
@ -43,7 +44,7 @@ func New(code []byte) *ELF64 {
},
ProgramHeader: ProgramHeader{
Type: ProgramTypeLOAD,
Flags: ProgramFlagsExecutable | ProgramFlagsReadable,
Flags: ProgramFlagsExecutable,
Offset: 0x80,
VirtualAddress: baseAddress + 0x80,
PhysicalAddress: baseAddress + 0x80,
@ -52,15 +53,17 @@ func New(code []byte) *ELF64 {
Align: Align,
},
Code: code,
Data: data,
}
return elf
}
// Write writes the ELF64 format to the given writer.
func (elf *ELF64) Write(writer io.Writer) {
func (elf *ELF) Write(writer io.Writer) {
binary.Write(writer, binary.LittleEndian, &elf.Header)
binary.Write(writer, binary.LittleEndian, &elf.ProgramHeader)
writer.Write([]byte{0, 0, 0, 0, 0, 0, 0, 0})
writer.Write(elf.Code)
writer.Write(elf.Data)
}