Skip to content

Commit 215859a

Browse files
committed
Add amd64 UEFI support.
1 parent f73e589 commit 215859a

File tree

4 files changed

+842
-1
lines changed

4 files changed

+842
-1
lines changed

amd64/amd64_defs.M1

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
DEFINE add_rax, 4805
1919
DEFINE add_rbp, 4881C5
20+
DEFINE add_rsp, 4881C4
2021
DEFINE add_rax,rbx 4801D8
2122
DEFINE add_rax,rbp 4801E8
2223
DEFINE add_rbx,rax 4801C3
@@ -32,10 +33,14 @@ DEFINE je 0F84
3233
DEFINE jne 0F85
3334
DEFINE lea_rax,[rbp+DWORD] 488D85
3435
DEFINE lea_rax,[rip+DWORD] 488D05
35-
DEFINE lea_rax,[rsp+DWORD] 488D8424
36+
DEFINE lea_rcx,[rbp+DWORD] 488D8D
3637
DEFINE lea_rdi,[rsp+DWORD] 488DBC24
38+
DEFINE lea_rdx,[rip+DWORD] 488D15
3739
DEFINE lea_rdx,[rsp+DWORD] 488D9424
40+
DEFINE lea_rdx,[rbp+DWORD] 488D95
3841
DEFINE lea_rsi,[rsp+DWORD] 488DB424
42+
DEFINE lea_r8,[rbp+DWORD] 4C8D85
43+
DEFINE lea_r9,[rbp+DWORD] 4C8D8D
3944
DEFINE mov_rax, 48C7C0
4045
DEFINE mov_rbx, 48C7C3
4146
DEFINE mov_rdi, 48C7C7
@@ -51,14 +56,27 @@ DEFINE mov_rcx,rax 4889C1
5156
DEFINE mov_rdi,rax 4889C7
5257
DEFINE mov_rdi,rbx 4889DF
5358
DEFINE mov_rdi,rsp 4889E7
59+
DEFINE mov_rdx,rsp 4889E2
60+
DEFINE mov_r8,rsp 4989E0
5461
DEFINE mov_[rbx],al 8803
5562
DEFINE mov_[rbx],rax 488903
63+
DEFINE mov_[rip+DWORD],rax 488905
64+
DEFINE mov_[rip+DWORD],rbp 48892D
65+
DEFINE mov_[rip+DWORD],rcx 48890D
66+
DEFINE mov_[rip+DWORD],rdx 488915
67+
DEFINE mov_[rip+DWORD],rsp 488925
5668
DEFINE mov_rax,[rax] 488B00
5769
DEFINE mov_rbx,[rbx] 488B1B
70+
DEFINE mov_rcx,[rcx] 488B09
5871
DEFINE mov_rdi,[rdi] 488B3F
5972
DEFINE mov_rdx,[rdx] 488B12
6073
DEFINE mov_rsi,[rsi] 488B36
6174
DEFINE mov_rax,[rsp+DWORD] 488B8424
75+
DEFINE mov_rax,[rip+DWORD] 488B05
76+
DEFINE mov_rbp,[rip+DWORD] 488B2D
77+
DEFINE mov_rsp,[rip+DWORD] 488B25
78+
DEFINE mov_r8,[r8] 4D8B00
79+
DEFINE mov_r9,[r9] 4D8B09
6280
DEFINE movzx_rax,al 480FB6C0
6381
DEFINE movsxd_rax,eax 4863C0
6482
DEFINE movsx_rax,BYTE_PTR_[rax] 480FBE00
@@ -72,6 +90,7 @@ DEFINE pop_rax 58
7290
DEFINE pop_rbp 5D
7391
DEFINE pop_rbx 5B
7492
DEFINE pop_rdi 5F
93+
DEFINE push 6A
7594
DEFINE push_rax 50
7695
DEFINE push_rbp 55
7796
DEFINE push_rbx 53
@@ -92,6 +111,7 @@ DEFINE setge_al 0F9DC0
92111
DEFINE setl_al 0F9CC0
93112
DEFINE setle_al 0F9EC0
94113
DEFINE setne_al 0F95C0
114+
DEFINE sub_rsp, 4881EC
95115
DEFINE sub_rbx,rax 4829C3
96116
DEFINE syscall 0F05
97117
DEFINE test_rax,rax 4885C0

amd64/uefi/PE32-amd64.hex2

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# SPDX-FileCopyrightText: 2022 Jeremiah Orians
2+
#
3+
# SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
:PE32_base
6+
# DOS MZ header
7+
4D 5A # Signature
8+
00 00 # Number of bytes in the last page.
9+
00 00 # Number of whole/partial pages
10+
00 00 # Number of entries in the relocation table.
11+
00 00 # Header size
12+
00 00 # Minimum allocation
13+
00 00 # Maximum allocation
14+
00 00 # Relocatable segment address for SS
15+
00 00 # Initial value for SP
16+
00 00 # Checksum (I don't think is looked at)
17+
00 00 # Initial value for IP (Seems ignored)
18+
00 00 # Relocatable segment address for CS (Seems ignored)
19+
00 00 # The (absolute) offset to the relocation table.
20+
00 00 # Value used for overlay management. If zero, this is the main executable
21+
00 00 00 00 00 00 00 00 # Reserved in PE
22+
00 00 # OEM identifier
23+
00 00 # OEM info
24+
00 00 00 00 00 00 00 00 00 00 # The required reserved 20 bytes of NULLS
25+
00 00 00 00 00 00 00 00 00 00
26+
40 00 00 00 # Starting address of the PE header
27+
28+
# [0x40]
29+
:PE_header
30+
50 45 00 00 # Signature "PE"
31+
64 86 # Machine
32+
01 00 # number of sections
33+
00 00 00 00 # Timestamp supposedly
34+
00 00 00 00 # PointerToSymbolTable
35+
00 00 00 00 # number of symbols
36+
@OptionalHeader_end>PE_header # SizeOfOptionalHeader
37+
00 00 # 'Characteristics'
38+
39+
# [0x58]
40+
# COFF header bits
41+
0B 02 # Magic PE32+ (64 bit)
42+
00 00 # Linker version
43+
00 00 00 00 # size of code
44+
00 00 00 00 # sizeOfInitializedData
45+
00 00 00 00 # SizeOfUninitializedData
46+
00 10 00 00 # AddressOfEntryPoint
47+
00 00 00 00 # BaseOfCode
48+
00 00 00 00 00 00 00 00 # ImageBase
49+
01 00 00 00 # SectionAlignment
50+
01 00 00 00 # FileAlignment
51+
00 00 00 00 # OperatingSystemVersion
52+
00 00 00 00 # ImageVersion
53+
00 00 00 00 # SubsystemVersion
54+
00 00 00 00 # Win32VersionValue
55+
00 00 10 00 # SizeOfImage
56+
%PE32_text>PE32_base # SizeOfHeaders
57+
00 00 00 00 # CheckSum (isn't used at all)
58+
0A 00 # Subsystem
59+
00 00 # DllCharacteristics
60+
00 00 00 00 # SizeOfStackReserve
61+
00 00 00 00 # SizeOfStackCommit
62+
00 00 00 00 # SizeOfHeapReserve
63+
00 00 00 00 # SizeOfHeapCommit
64+
00 00 00 00 # LoaderFlags
65+
00 00 00 00 # NumberOfRvaAndSizes
66+
67+
# [0xB8]
68+
# Data directories (has to be 16 entries always 16bytes per entry)
69+
00 00 00 00 # Export Table
70+
00 00 00 00 # Size of Export Table
71+
72+
00 00 00 00 # Import Table
73+
10 00 00 00 # Size of Import Table
74+
75+
00 00 00 00 # Resource Table
76+
00 00 00 00 # Size of Resource Table
77+
78+
00 00 00 00 # Exception Table
79+
00 00 00 00 # Size of Exception Table
80+
81+
00 00 00 00 # Certificate Table
82+
00 00 00 00 # Size of Certificate Table
83+
84+
00 00 00 00 # Base Relocation Table
85+
00 00 00 00 # Size of Base Relocation Table
86+
87+
00 00 00 00 # Debug Table
88+
00 00 00 00 # Size of Debug Table
89+
90+
00 00 00 00 # Architecture Data Table
91+
00 00 00 00 # Size of Architecture Data Table
92+
93+
00 00 00 00 # Global Pointer
94+
00 00 00 00 # NULL
95+
96+
00 00 00 00 # TLS Table
97+
00 00 00 00 # Size of TLS Table
98+
99+
00 00 00 00 # Load Config Table
100+
00 00 00 00 # Size of Load Config Table
101+
102+
00 00 00 00 # Bound Import Table
103+
00 00 00 00 # Size of Bound Import Table
104+
105+
00 00 00 00 # Import Address Table
106+
00 00 00 00 # Size of Import Address Table
107+
108+
00 00 00 00 # Delay Import Descriptor Table
109+
00 00 00 00 # Size of Delay Import Descriptor Table
110+
111+
00 00 00 00 # CLR Runtime header table
112+
00 00 00 00 # Size of CLR Runtime Header table
113+
114+
# [0x130]
115+
:OptionalHeader_end
116+
117+
00 00 00 00 00 00 00 00 # MUST BE NULL
118+
119+
# no idea what it is yet
120+
00 00 00 00 00 00 00 00
121+
00 00 00 00 00 00 00 00
122+
123+
# [0x148]
124+
# Start of section headers
125+
2E 74 65 78 74 00 00 00 ; Name of the section: ".text"
126+
%ELF_end>PE32_text ; VirtualSize
127+
00 10 00 00 ; VirtualAddress
128+
%ELF_end>PE32_text ; SizeOfRawData
129+
70 01 00 00 ; PointerToRawData
130+
00 00 00 00 ; PointerToRelocations
131+
00 00 00 00 ; PointerToLinenumbers
132+
00 00 ; NumberOfRelocations
133+
00 00 ; NumberOfLinenumbers
134+
00 00 00 00 ; 'Characteristics'
135+
136+
# [0x170]
137+
:PE32_text

0 commit comments

Comments
 (0)