-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLoad.h
89 lines (75 loc) · 1.99 KB
/
Load.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <File.h>
#include <MemoryUefi.h>
#include <Tools.h>
//加载到elf
#include <ELF/elf_common.h>
#include <ELF/elf64.h>
// typedef struct{
// CHAR8 e_ident[EI_NIDENT];
// // 执行类型
// UINT16 e_type;
// //指令集
// UINT16 e_machine;
// //ELF版本 4
// UINT32 e_version;
// // 64位置与32位开始不同 入口地址
// UINT64 e_entry;
// // program 偏移地址,偏移! 直接+e_poff然后开始初始化表头
// UINT64 e_phoff;
// // 节头表
// UINT64 e_shoff;
// // 目标整体架构
// INT32 e_flags;
// // 文件头大小
// UINT16 e_ehsize;
// //程序头表入口
// UINT16 e_phentsize;
// // 头表数量
// UINT16 e_phnum;
// //section 表入口大小
// UINT16 e_shentsize;
// //section 表数量
// UINT16 e_shnum;
// //section name
// UINT16 e_shstrndx;
// } Elf64_Ehdr;
#ifndef _LOAD_DEFINE_
#define _LOAD_DEFINE_
typedef struct
{
UINTN BufferSize;
VOID *Buffer;
UINTN MapSize;
UINTN MapKey;
UINTN DescriptorSize;
UINT32 DescriptorVersion;
} MEMORY_MAP;
EFI_STATUS LoadElf(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *file,CHAR16 *filename,ADDRESS *addr);
BmpStruct LoadBmpFileToMemory(
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *file,
CHAR16 *filename
);
EFI_STATUS LoadElf64ToMemroy(EFI_HANDLE ImageHandle,EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *file,CHAR16 *filename,ADDRESS *load,Elf64_Ehdr *elf);
EFI_STATUS ByeBootServices(
IN EFI_HANDLE ImageHandle);
#endif //_LOAD_DEFINE_
// typedef struct{
// CHAR8 e_ident[EI_NIDENT];
// // 执行类型
// UINT16 e_type;
// //指令集
// UINT16 e_machine;
// //ELF版本 4
// UINT32 e_version;
// // 64位置与32位开始不同
// UINT32 e_entry;
// UINT32 e_phoff;
// UINT32 e_shoff;
// INT32 e_flags;
// UINT16 e_ehsize;
// UINT16 e_phentsize;
// UINT16 e_phnum;
// UINT16 e_shentsize;
// UINT16 e_shnum;
// UINT16 e_shstrndx;
// } Elf32_Ehdr32;