xref: /llvm-project/llvm/docs/yaml2obj.rst (revision 7450e0c1d3f066c4ed0daadc7e28d97217a993ba)
1yaml2obj
2========
3
4yaml2obj takes a YAML description of an object file and converts it to a binary
5file.
6
7    $ yaml2obj input-file
8
9.. program:: yaml2obj
10
11Outputs the binary to stdout.
12
13COFF Syntax
14-----------
15
16Here's a sample COFF file.
17
18.. code-block:: yaml
19
20  header:
21    Machine: IMAGE_FILE_MACHINE_I386 # (0x14C)
22
23  sections:
24    - Name: .text
25      Characteristics: [ IMAGE_SCN_CNT_CODE
26                       , IMAGE_SCN_ALIGN_16BYTES
27                       , IMAGE_SCN_MEM_EXECUTE
28                       , IMAGE_SCN_MEM_READ
29                       ] # 0x60500020
30      SectionData:
31        "\x83\xEC\x0C\xC7\x44\x24\x08\x00\x00\x00\x00\xC7\x04\x24\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x8B\x44\x24\x08\x83\xC4\x0C\xC3" # |....D$.......$...............D$.....|
32    - Name: .rdata
33      Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
34      StructuredData:
35        - Binary: {type: str}
36        - UInt32: {type: int}
37        - LoadConfig:
38          Size: {type: int}
39          TimeDateStamp: {type: int}
40          MajorVersion: {type: int}
41          MinorVersion: {type: int}
42          GlobalFlagsClear: {type: int}
43          GlobalFlagsSet: {type: int}
44          CriticalSectionDefaultTimeout: {type: int}
45          DeCommitFreeBlockThreshold: {type: int}
46          DeCommitTotalFreeThreshold: {type: int}
47          LockPrefixTable: {type: int}
48          MaximumAllocationSize: {type: int}
49          VirtualMemoryThreshold: {type: int}
50          ProcessAffinityMask: {type: int}
51          ProcessHeapFlags: {type: int}
52          CSDVersion: {type: int}
53          DependentLoadFlags: {type: int}
54          EditList: {type: int}
55          SecurityCookie: {type: int}
56          SEHandlerTable: {type: int}
57          SEHandlerCount: {type: int}
58          GuardCFCheckFunction: {type: int}
59          GuardCFCheckDispatch: {type: int}
60          GuardCFFunctionTable: {type: int}
61          GuardCFFunctionCount: {type: int}
62          GuardFlags: {type: int}
63          CodeIntegrity:
64            Flags: {type: int}
65            Catalog: {type: int}
66            CatalogOffset: {type: int}
67          GuardAddressTakenIatEntryTable: {type: int}
68          GuardAddressTakenIatEntryCount: {type: int}
69          GuardLongJumpTargetTable: {type: int}
70          GuardLongJumpTargetCount: {type: int}
71          DynamicValueRelocTable: {type: int}
72          CHPEMetadataPointer: {type: int}
73          GuardRFFailureRoutine: {type: int}
74          GuardRFFailureRoutineFunctionPointer: {type: int}
75          DynamicValueRelocTableOffset: {type: int}
76          DynamicValueRelocTableSection: {type: int}
77          GuardRFVerifyStackPointerFunctionPointer: {type: int}
78          HotPatchTableOffset: {type: int}
79          EnclaveConfigurationPointer: {type: int}
80          VolatileMetadataPointer: {type: int}
81          GuardEHContinuationTable: {type: int}
82          GuardEHContinuationCount: {type: int}
83          GuardXFGCheckFunctionPointer: {type: int}
84          GuardXFGDispatchFunctionPointer: {type: int}
85          GuardXFGTableDispatchFunctionPointer: {type: int}
86          CastGuardOsDeterminedFailureMode: {type: int}
87
88  symbols:
89    - Name: .text
90      Value: 0
91      SectionNumber: 1
92      SimpleType: IMAGE_SYM_TYPE_NULL # (0)
93      ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
94      StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
95      NumberOfAuxSymbols: 1
96      AuxiliaryData:
97        "\x24\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00" # |$.................|
98
99    - Name: _main
100      Value: 0
101      SectionNumber: 1
102      SimpleType: IMAGE_SYM_TYPE_NULL # (0)
103      ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
104      StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
105
106Here's a simplified Kwalify_ schema with an extension to allow alternate types.
107
108.. _Kwalify: http://www.kuwata-lab.com/kwalify/ruby/users-guide.html
109
110.. code-block:: yaml
111
112  type: map
113    mapping:
114      header:
115        type: map
116        mapping:
117          Machine: [ {type: str, enum:
118                                 [ IMAGE_FILE_MACHINE_UNKNOWN
119                                 , IMAGE_FILE_MACHINE_AM33
120                                 , IMAGE_FILE_MACHINE_AMD64
121                                 , IMAGE_FILE_MACHINE_ARM
122                                 , IMAGE_FILE_MACHINE_ARMNT
123                                 , IMAGE_FILE_MACHINE_ARM64
124                                 , IMAGE_FILE_MACHINE_EBC
125                                 , IMAGE_FILE_MACHINE_I386
126                                 , IMAGE_FILE_MACHINE_IA64
127                                 , IMAGE_FILE_MACHINE_M32R
128                                 , IMAGE_FILE_MACHINE_MIPS16
129                                 , IMAGE_FILE_MACHINE_MIPSFPU
130                                 , IMAGE_FILE_MACHINE_MIPSFPU16
131                                 , IMAGE_FILE_MACHINE_POWERPC
132                                 , IMAGE_FILE_MACHINE_POWERPCFP
133                                 , IMAGE_FILE_MACHINE_R4000
134                                 , IMAGE_FILE_MACHINE_SH3
135                                 , IMAGE_FILE_MACHINE_SH3DSP
136                                 , IMAGE_FILE_MACHINE_SH4
137                                 , IMAGE_FILE_MACHINE_SH5
138                                 , IMAGE_FILE_MACHINE_THUMB
139                                 , IMAGE_FILE_MACHINE_WCEMIPSV2
140                                 ]}
141                   , {type: int}
142                   ]
143          Characteristics:
144            - type: seq
145              sequence:
146                - type: str
147                  enum: [ IMAGE_FILE_RELOCS_STRIPPED
148                        , IMAGE_FILE_EXECUTABLE_IMAGE
149                        , IMAGE_FILE_LINE_NUMS_STRIPPED
150                        , IMAGE_FILE_LOCAL_SYMS_STRIPPED
151                        , IMAGE_FILE_AGGRESSIVE_WS_TRIM
152                        , IMAGE_FILE_LARGE_ADDRESS_AWARE
153                        , IMAGE_FILE_BYTES_REVERSED_LO
154                        , IMAGE_FILE_32BIT_MACHINE
155                        , IMAGE_FILE_DEBUG_STRIPPED
156                        , IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
157                        , IMAGE_FILE_NET_RUN_FROM_SWAP
158                        , IMAGE_FILE_SYSTEM
159                        , IMAGE_FILE_DLL
160                        , IMAGE_FILE_UP_SYSTEM_ONLY
161                        , IMAGE_FILE_BYTES_REVERSED_HI
162                        ]
163            - type: int
164      sections:
165        type: seq
166        sequence:
167          - type: map
168            mapping:
169              Name: {type: str}
170              Characteristics:
171                - type: seq
172                  sequence:
173                    - type: str
174                      enum: [ IMAGE_SCN_TYPE_NO_PAD
175                            , IMAGE_SCN_CNT_CODE
176                            , IMAGE_SCN_CNT_INITIALIZED_DATA
177                            , IMAGE_SCN_CNT_UNINITIALIZED_DATA
178                            , IMAGE_SCN_LNK_OTHER
179                            , IMAGE_SCN_LNK_INFO
180                            , IMAGE_SCN_LNK_REMOVE
181                            , IMAGE_SCN_LNK_COMDAT
182                            , IMAGE_SCN_GPREL
183                            , IMAGE_SCN_MEM_PURGEABLE
184                            , IMAGE_SCN_MEM_16BIT
185                            , IMAGE_SCN_MEM_LOCKED
186                            , IMAGE_SCN_MEM_PRELOAD
187                            , IMAGE_SCN_ALIGN_1BYTES
188                            , IMAGE_SCN_ALIGN_2BYTES
189                            , IMAGE_SCN_ALIGN_4BYTES
190                            , IMAGE_SCN_ALIGN_8BYTES
191                            , IMAGE_SCN_ALIGN_16BYTES
192                            , IMAGE_SCN_ALIGN_32BYTES
193                            , IMAGE_SCN_ALIGN_64BYTES
194                            , IMAGE_SCN_ALIGN_128BYTES
195                            , IMAGE_SCN_ALIGN_256BYTES
196                            , IMAGE_SCN_ALIGN_512BYTES
197                            , IMAGE_SCN_ALIGN_1024BYTES
198                            , IMAGE_SCN_ALIGN_2048BYTES
199                            , IMAGE_SCN_ALIGN_4096BYTES
200                            , IMAGE_SCN_ALIGN_8192BYTES
201                            , IMAGE_SCN_LNK_NRELOC_OVFL
202                            , IMAGE_SCN_MEM_DISCARDABLE
203                            , IMAGE_SCN_MEM_NOT_CACHED
204                            , IMAGE_SCN_MEM_NOT_PAGED
205                            , IMAGE_SCN_MEM_SHARED
206                            , IMAGE_SCN_MEM_EXECUTE
207                            , IMAGE_SCN_MEM_READ
208                            , IMAGE_SCN_MEM_WRITE
209                            ]
210                - type: int
211              SectionData: {type: str}
212      symbols:
213        type: seq
214        sequence:
215          - type: map
216            mapping:
217              Name: {type: str}
218              Value: {type: int}
219              SectionNumber: {type: int}
220              SimpleType: [ {type: str, enum: [ IMAGE_SYM_TYPE_NULL
221                                              , IMAGE_SYM_TYPE_VOID
222                                              , IMAGE_SYM_TYPE_CHAR
223                                              , IMAGE_SYM_TYPE_SHORT
224                                              , IMAGE_SYM_TYPE_INT
225                                              , IMAGE_SYM_TYPE_LONG
226                                              , IMAGE_SYM_TYPE_FLOAT
227                                              , IMAGE_SYM_TYPE_DOUBLE
228                                              , IMAGE_SYM_TYPE_STRUCT
229                                              , IMAGE_SYM_TYPE_UNION
230                                              , IMAGE_SYM_TYPE_ENUM
231                                              , IMAGE_SYM_TYPE_MOE
232                                              , IMAGE_SYM_TYPE_BYTE
233                                              , IMAGE_SYM_TYPE_WORD
234                                              , IMAGE_SYM_TYPE_UINT
235                                              , IMAGE_SYM_TYPE_DWORD
236                                              ]}
237                          , {type: int}
238                          ]
239              ComplexType: [ {type: str, enum: [ IMAGE_SYM_DTYPE_NULL
240                                               , IMAGE_SYM_DTYPE_POINTER
241                                               , IMAGE_SYM_DTYPE_FUNCTION
242                                               , IMAGE_SYM_DTYPE_ARRAY
243                                               ]}
244                           , {type: int}
245                           ]
246              StorageClass: [ {type: str, enum:
247                                          [ IMAGE_SYM_CLASS_END_OF_FUNCTION
248                                          , IMAGE_SYM_CLASS_NULL
249                                          , IMAGE_SYM_CLASS_AUTOMATIC
250                                          , IMAGE_SYM_CLASS_EXTERNAL
251                                          , IMAGE_SYM_CLASS_STATIC
252                                          , IMAGE_SYM_CLASS_REGISTER
253                                          , IMAGE_SYM_CLASS_EXTERNAL_DEF
254                                          , IMAGE_SYM_CLASS_LABEL
255                                          , IMAGE_SYM_CLASS_UNDEFINED_LABEL
256                                          , IMAGE_SYM_CLASS_MEMBER_OF_STRUCT
257                                          , IMAGE_SYM_CLASS_ARGUMENT
258                                          , IMAGE_SYM_CLASS_STRUCT_TAG
259                                          , IMAGE_SYM_CLASS_MEMBER_OF_UNION
260                                          , IMAGE_SYM_CLASS_UNION_TAG
261                                          , IMAGE_SYM_CLASS_TYPE_DEFINITION
262                                          , IMAGE_SYM_CLASS_UNDEFINED_STATIC
263                                          , IMAGE_SYM_CLASS_ENUM_TAG
264                                          , IMAGE_SYM_CLASS_MEMBER_OF_ENUM
265                                          , IMAGE_SYM_CLASS_REGISTER_PARAM
266                                          , IMAGE_SYM_CLASS_BIT_FIELD
267                                          , IMAGE_SYM_CLASS_BLOCK
268                                          , IMAGE_SYM_CLASS_FUNCTION
269                                          , IMAGE_SYM_CLASS_END_OF_STRUCT
270                                          , IMAGE_SYM_CLASS_FILE
271                                          , IMAGE_SYM_CLASS_SECTION
272                                          , IMAGE_SYM_CLASS_WEAK_EXTERNAL
273                                          , IMAGE_SYM_CLASS_CLR_TOKEN
274                                          ]}
275                            , {type: int}
276                            ]
277