NeKernel dev
Loading...
Searching...
No Matches
PEF.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5 File: PEF.h
6 Purpose: Preferred Executable Format for Kernel.
7
8 Revision History:
9
10 ?/?/23: Added file (amlel)
11
12======================================== */
13
14#ifndef __KERNELKIT_PEF_H__
15#define __KERNELKIT_PEF_H__
16
18#include <KernelKit/ILoader.h>
19#include <NeKit/Config.h>
20
21#define kPefMagic "Open"
22#define kPefMagicFat "nepO"
23
24#define kPefMagicLen (5)
25
26#define kPefVersion (0x0500)
27#define kPefNameLen (256U)
28
29/* not mandatory, only for non fork based filesystems. */
30#define kPefExt ".exec"
31#define kPefDylibExt ".dylib"
32#define kPefLibExt ".lib"
33#define kPefObjectExt ".obj"
34#define kPefDebugExt ".dbg"
35#define kPefDriverExt ".sys"
36
37// Kernel System Binary Interface.
38#define kPefAbi (0x5046)
39
40#define kPefBaseOrigin (0x40000000)
41
42#define kPefStart "__ImageStart"
43#define kPefMainSymbol "_NeMain"
44
45#define kPefForkKind kPefMagic
46#define kPefForkKindFAT kPefMagicFat
47
48namespace Kernel {
49enum {
53 kPefArch64x0, /* 64x0. ISA */
54 kPefArch32x0, /* 32x0. ISA */
59};
60
61enum {
67};
68
69enum {
71 kPefKindExec = 1, /* .exec */
72 kPefKindDylib = 2, /* .dylib */
73 kPefKindObject = 4, /* .obj */
74 kPefKindDebug = 5, /* .dbg */
77};
78
79typedef struct PEFContainer final {
86 UInt32 SubCpu; /* Cpu specific information */
88 SizeT HdrSz; /* Size of header */
89 SizeT Count; /* container header count */
92
93/* First PEFCommandHeader starts after PEFContainer */
94
95typedef struct PEFCommandHeader final {
96 Char Name[kPefNameLen]; /* container name */
97 UInt32 Cpu; /* container cpu */
98 UInt32 SubCpu; /* container sub-cpu */
99 UInt32 Flags; /* container flags */
100 UInt16 Kind; /* container kind */
101 UIntPtr Offset; /* content offset */
102 SizeT OffsetSize; /* offset size (physical size inside the file) */
103 UIntPtr VMAddress; /* Virtual Address */
104 SizeT VMSize; /* Virtual Size */
106
107enum {
109 kPefCode = 0xC,
110 kPefData = 0xD,
111 kPefZero = 0xE,
114};
115} // namespace Kernel
116
117#endif /* ifndef __KERNELKIT_PEF_H__ */
#define PACKED
#define kPefMagicLen
Definition PEF.h:24
#define kPefNameLen
Definition PEF.h:27
UPS inline definitions.
Definition Device.h:12
struct Kernel::PEFCommandHeader PEFCommandHeader
char Char
Definition Config.h:51
__UINT16_TYPE__ UInt16
Definition Config.h:40
__SIZE_TYPE__ SizeT
Definition Config.h:60
struct Kernel::PEFContainer PEFContainer
__UINT32_TYPE__ UInt32
Definition Config.h:44
@ kPefCount
Definition PEF.h:113
@ kPefCode
Definition PEF.h:109
@ kPefData
Definition PEF.h:110
@ kPefZero
Definition PEF.h:111
@ kPefInvalid
Definition PEF.h:108
@ kPefLinkerID
Definition PEF.h:112
@ kPefArchARM64
Definition PEF.h:56
@ kPefArchCount
Definition PEF.h:57
@ kPefArch64x0
Definition PEF.h:53
@ kPefArchAMD64
Definition PEF.h:51
@ kPefArchIntel86S
Definition PEF.h:50
@ kPefArchRISCV
Definition PEF.h:52
@ kPefArchPowerPC
Definition PEF.h:55
@ kPefArch32x0
Definition PEF.h:54
@ kPefArchInvalid
Definition PEF.h:58
@ kPefSubArchGeneric
Definition PEF.h:62
@ kPefSubArchIntel
Definition PEF.h:64
@ kPefSubArchIBM
Definition PEF.h:66
@ kPefSubArchAMD
Definition PEF.h:63
@ kPefSubArchARM
Definition PEF.h:65
@ kPefKindCount
Definition PEF.h:76
@ kPefKindExec
Definition PEF.h:71
@ kPefKindDriver
Definition PEF.h:75
@ kPefKindInvalid
Definition PEF.h:70
@ kPefKindDylib
Definition PEF.h:72
@ kPefKindObject
Definition PEF.h:73
@ kPefKindDebug
Definition PEF.h:74
__UINTPTR_TYPE__ UIntPtr
Definition Config.h:62
Definition PEF.h:95
UIntPtr VMAddress
Definition PEF.h:103
SizeT VMSize
Definition PEF.h:104
UInt32 Flags
Definition PEF.h:99
UInt16 Kind
Definition PEF.h:100
UInt32 SubCpu
Definition PEF.h:98
UInt32 Cpu
Definition PEF.h:97
SizeT OffsetSize
Definition PEF.h:102
UIntPtr Offset
Definition PEF.h:101
Char Name[kPefNameLen]
Definition PEF.h:96
Definition PEF.h:79
SizeT Count
Definition PEF.h:89
UInt32 Abi
Definition PEF.h:84
UInt32 Cpu
Definition PEF.h:85
UInt32 SubCpu
Definition PEF.h:86
UInt32 Kind
Definition PEF.h:83
UInt32 Linker
Definition PEF.h:81
Char Magic[kPefMagicLen]
Definition PEF.h:80
UInt32 Checksum
Definition PEF.h:90
UIntPtr Start
Definition PEF.h:87
SizeT HdrSz
Definition PEF.h:88
UInt32 Version
Definition PEF.h:82