-
-
Notifications
You must be signed in to change notification settings - Fork 34.5k
Expand file tree
/
Copy path_schema.py
More file actions
123 lines (97 loc) · 3.48 KB
/
_schema.py
File metadata and controls
123 lines (97 loc) · 3.48 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""Schema for the JSON produced by llvm-readobj --elf-output-style=JSON."""
import typing
HoleKind: typing.TypeAlias = typing.Literal[
"ARM64_RELOC_BRANCH26",
"ARM64_RELOC_GOT_LOAD_PAGE21",
"ARM64_RELOC_GOT_LOAD_PAGEOFF12",
"ARM64_RELOC_PAGE21",
"ARM64_RELOC_PAGEOFF12",
"ARM64_RELOC_UNSIGNED",
"IMAGE_REL_AMD64_REL32",
"IMAGE_REL_ARM64_BRANCH26",
"IMAGE_REL_ARM64_PAGEBASE_REL21",
"IMAGE_REL_ARM64_PAGEOFFSET_12A",
"IMAGE_REL_ARM64_PAGEOFFSET_12L",
"IMAGE_REL_I386_DIR32",
"IMAGE_REL_I386_REL32",
"R_AARCH64_ABS64",
"R_AARCH64_ADR_GOT_PAGE",
"R_AARCH64_ADR_PREL_PG_HI21",
"R_AARCH64_CALL26",
"R_AARCH64_JUMP26",
"R_AARCH64_ADD_ABS_LO12_NC",
"R_AARCH64_LD64_GOT_LO12_NC",
"R_AARCH64_MOVW_UABS_G0_NC",
"R_AARCH64_MOVW_UABS_G1_NC",
"R_AARCH64_MOVW_UABS_G2_NC",
"R_AARCH64_MOVW_UABS_G3",
"R_X86_64_64",
"R_X86_64_GOTPCREL",
"R_X86_64_GOTPCRELX",
"R_X86_64_PC32",
"R_X86_64_REX_GOTPCRELX",
"X86_64_RELOC_BRANCH",
"X86_64_RELOC_GOT",
"X86_64_RELOC_GOT_LOAD",
"X86_64_RELOC_SIGNED",
"X86_64_RELOC_UNSIGNED",
]
class COFFRelocation(typing.TypedDict):
"""A COFF object file relocation record."""
Type: dict[typing.Literal["Value"], HoleKind]
Symbol: str
Offset: int
class ELFRelocation(typing.TypedDict):
"""An ELF object file relocation record."""
Addend: int
Offset: int
Symbol: dict[typing.Literal["Value"], str]
Type: dict[typing.Literal["Value"], HoleKind]
class MachORelocation(typing.TypedDict):
"""A Mach-O object file relocation record."""
Offset: int
Section: typing.NotRequired[dict[typing.Literal["Value"], str]]
Symbol: typing.NotRequired[dict[typing.Literal["Value"], str]]
Type: dict[typing.Literal["Value"], HoleKind]
class _COFFSymbol(typing.TypedDict):
Name: str
Value: int
class _ELFSymbol(typing.TypedDict):
Name: dict[typing.Literal["Name"], str]
Value: int
class _MachOSymbol(typing.TypedDict):
Name: dict[typing.Literal["Name"], str]
Value: int
class COFFSection(typing.TypedDict):
"""A COFF object file section."""
Characteristics: dict[
typing.Literal["Flags"], list[dict[typing.Literal["Name"], str]]
]
Number: int
RawDataSize: int
Relocations: list[dict[typing.Literal["Relocation"], COFFRelocation]]
SectionData: typing.NotRequired[dict[typing.Literal["Bytes"], list[int]]]
Symbols: list[dict[typing.Literal["Symbol"], _COFFSymbol]]
class ELFSection(typing.TypedDict):
"""An ELF object file section."""
Flags: dict[typing.Literal["Flags"], list[dict[typing.Literal["Name"], str]]]
Index: int
Info: int
Relocations: list[dict[typing.Literal["Relocation"], ELFRelocation]]
SectionData: typing.NotRequired[dict[typing.Literal["Bytes"], list[int]]]
Size: int
Symbols: list[dict[typing.Literal["Symbol"], _ELFSymbol]]
Type: dict[typing.Literal["Name"], str]
class MachOSection(typing.TypedDict):
"""A Mach-O object file section."""
Address: int
Attributes: dict[typing.Literal["Flags"], list[dict[typing.Literal["Name"], str]]]
Index: int
Name: dict[typing.Literal["Value"], str]
Relocations: typing.NotRequired[
list[dict[typing.Literal["Relocation"], MachORelocation]]
]
SectionData: typing.NotRequired[dict[typing.Literal["Bytes"], list[int]]]
Segment: dict[typing.Literal["Value"], str]
Size: int
Symbols: typing.NotRequired[list[dict[typing.Literal["Symbol"], _MachOSymbol]]]