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
17
#include <
CompilerKit/CompilerKit.h
>
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
48
namespace
Kernel
{
49
enum
{
50
kPefArchIntel86S
,
51
kPefArchAMD64
,
52
kPefArchRISCV
,
53
kPefArch64x0
,
/* 64x0. ISA */
54
kPefArch32x0
,
/* 32x0. ISA */
55
kPefArchPowerPC
,
56
kPefArchARM64
,
57
kPefArchCount
= (
kPefArchARM64
-
kPefArchIntel86S
) + 1,
58
kPefArchInvalid
= 0xFF,
59
};
60
61
enum
{
62
kPefSubArchGeneric
= 0,
63
kPefSubArchAMD
= 200,
64
kPefSubArchIntel
,
65
kPefSubArchARM
,
66
kPefSubArchIBM
,
67
};
68
69
enum
{
70
kPefKindInvalid
= 0,
71
kPefKindExec
= 1,
/* .exec */
72
kPefKindDylib
= 2,
/* .dylib */
73
kPefKindObject
= 4,
/* .obj */
74
kPefKindDebug
= 5,
/* .dbg */
75
kPefKindDriver
= 6,
76
kPefKindCount
,
77
};
78
79
typedef
struct
PEFContainer
final {
80
Char
Magic
[
kPefMagicLen
];
81
UInt32
Linker
;
82
UInt32
Version
;
83
UInt32
Kind
;
84
UInt32
Abi
;
85
UInt32
Cpu
;
86
UInt32
SubCpu
;
/* Cpu specific information */
87
UIntPtr
Start
;
88
SizeT
HdrSz
;
/* Size of header */
89
SizeT
Count
;
/* container header count */
90
UInt32
Checksum
;
91
}
PACKED
PEFContainer
;
92
93
/* First PEFCommandHeader starts after PEFContainer */
94
95
typedef
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 */
105
}
PACKED
PEFCommandHeader
;
106
107
enum
{
108
kPefInvalid
= 0x0,
109
kPefCode
= 0xC,
110
kPefData
= 0xD,
111
kPefZero
= 0xE,
112
kPefLinkerID
= 0x1,
113
kPefCount
= 4,
114
};
115
}
// namespace Kernel
116
117
#endif
/* ifndef __KERNELKIT_PEF_H__ */
CompilerKit.h
PACKED
#define PACKED
ILoader.h
kPefMagicLen
#define kPefMagicLen
Definition
PEF.h:24
kPefNameLen
#define kPefNameLen
Definition
PEF.h:27
Config.h
Kernel
UPS inline definitions.
Definition
Device.h:12
Kernel::PEFCommandHeader
struct Kernel::PEFCommandHeader PEFCommandHeader
Kernel::Char
char Char
Definition
Config.h:51
Kernel::UInt16
__UINT16_TYPE__ UInt16
Definition
Config.h:40
Kernel::SizeT
__SIZE_TYPE__ SizeT
Definition
Config.h:60
Kernel::PEFContainer
struct Kernel::PEFContainer PEFContainer
Kernel::UInt32
__UINT32_TYPE__ UInt32
Definition
Config.h:44
Kernel::kPefCount
@ kPefCount
Definition
PEF.h:113
Kernel::kPefCode
@ kPefCode
Definition
PEF.h:109
Kernel::kPefData
@ kPefData
Definition
PEF.h:110
Kernel::kPefZero
@ kPefZero
Definition
PEF.h:111
Kernel::kPefInvalid
@ kPefInvalid
Definition
PEF.h:108
Kernel::kPefLinkerID
@ kPefLinkerID
Definition
PEF.h:112
Kernel::kPefArchARM64
@ kPefArchARM64
Definition
PEF.h:56
Kernel::kPefArchCount
@ kPefArchCount
Definition
PEF.h:57
Kernel::kPefArch64x0
@ kPefArch64x0
Definition
PEF.h:53
Kernel::kPefArchAMD64
@ kPefArchAMD64
Definition
PEF.h:51
Kernel::kPefArchIntel86S
@ kPefArchIntel86S
Definition
PEF.h:50
Kernel::kPefArchRISCV
@ kPefArchRISCV
Definition
PEF.h:52
Kernel::kPefArchPowerPC
@ kPefArchPowerPC
Definition
PEF.h:55
Kernel::kPefArch32x0
@ kPefArch32x0
Definition
PEF.h:54
Kernel::kPefArchInvalid
@ kPefArchInvalid
Definition
PEF.h:58
Kernel::kPefSubArchGeneric
@ kPefSubArchGeneric
Definition
PEF.h:62
Kernel::kPefSubArchIntel
@ kPefSubArchIntel
Definition
PEF.h:64
Kernel::kPefSubArchIBM
@ kPefSubArchIBM
Definition
PEF.h:66
Kernel::kPefSubArchAMD
@ kPefSubArchAMD
Definition
PEF.h:63
Kernel::kPefSubArchARM
@ kPefSubArchARM
Definition
PEF.h:65
Kernel::kPefKindCount
@ kPefKindCount
Definition
PEF.h:76
Kernel::kPefKindExec
@ kPefKindExec
Definition
PEF.h:71
Kernel::kPefKindDriver
@ kPefKindDriver
Definition
PEF.h:75
Kernel::kPefKindInvalid
@ kPefKindInvalid
Definition
PEF.h:70
Kernel::kPefKindDylib
@ kPefKindDylib
Definition
PEF.h:72
Kernel::kPefKindObject
@ kPefKindObject
Definition
PEF.h:73
Kernel::kPefKindDebug
@ kPefKindDebug
Definition
PEF.h:74
Kernel::UIntPtr
__UINTPTR_TYPE__ UIntPtr
Definition
Config.h:62
Kernel::PEFCommandHeader
Definition
PEF.h:95
Kernel::PEFCommandHeader::VMAddress
UIntPtr VMAddress
Definition
PEF.h:103
Kernel::PEFCommandHeader::VMSize
SizeT VMSize
Definition
PEF.h:104
Kernel::PEFCommandHeader::Flags
UInt32 Flags
Definition
PEF.h:99
Kernel::PEFCommandHeader::Kind
UInt16 Kind
Definition
PEF.h:100
Kernel::PEFCommandHeader::SubCpu
UInt32 SubCpu
Definition
PEF.h:98
Kernel::PEFCommandHeader::Cpu
UInt32 Cpu
Definition
PEF.h:97
Kernel::PEFCommandHeader::OffsetSize
SizeT OffsetSize
Definition
PEF.h:102
Kernel::PEFCommandHeader::Offset
UIntPtr Offset
Definition
PEF.h:101
Kernel::PEFCommandHeader::Name
Char Name[kPefNameLen]
Definition
PEF.h:96
Kernel::PEFContainer
Definition
PEF.h:79
Kernel::PEFContainer::Count
SizeT Count
Definition
PEF.h:89
Kernel::PEFContainer::Abi
UInt32 Abi
Definition
PEF.h:84
Kernel::PEFContainer::Cpu
UInt32 Cpu
Definition
PEF.h:85
Kernel::PEFContainer::SubCpu
UInt32 SubCpu
Definition
PEF.h:86
Kernel::PEFContainer::Kind
UInt32 Kind
Definition
PEF.h:83
Kernel::PEFContainer::Linker
UInt32 Linker
Definition
PEF.h:81
Kernel::PEFContainer::Magic
Char Magic[kPefMagicLen]
Definition
PEF.h:80
Kernel::PEFContainer::Checksum
UInt32 Checksum
Definition
PEF.h:90
Kernel::PEFContainer::Start
UIntPtr Start
Definition
PEF.h:87
Kernel::PEFContainer::HdrSz
SizeT HdrSz
Definition
PEF.h:88
Kernel::PEFContainer::Version
UInt32 Version
Definition
PEF.h:82
src
kernel
KernelKit
PEF.h
Generated by
1.15.0