1.. _yaml2obj:
2
3yaml2obj
4========
5
6yaml2obj takes a YAML description of an object file and converts it to a binary
7file.
8
9    $ yaml2obj input-file
10
11.. program:: yaml2obj
12
13Outputs the binary to stdout.
14
15COFF Syntax
16-----------
17
18Here's a sample COFF file.
19
20.. code-block:: yaml
21
22  header:
23    Machine: IMAGE_FILE_MACHINE_I386 # (0x14C)
24
25  sections:
26    - Name: .text
27      Characteristics: [ IMAGE_SCN_CNT_CODE
28                       , IMAGE_SCN_ALIGN_16BYTES
29                       , IMAGE_SCN_MEM_EXECUTE
30                       , IMAGE_SCN_MEM_READ
31                       ] # 0x60500020
32      SectionData:
33        "\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$.....|
34
35  symbols:
36    - Name: .text
37      Value: 0
38      SectionNumber: 1
39      SimpleType: IMAGE_SYM_TYPE_NULL # (0)
40      ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
41      StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
42      NumberOfAuxSymbols: 1
43      AuxillaryData:
44        "\x24\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00" # |$.................|
45
46    - Name: _main
47      Value: 0
48      SectionNumber: 1
49      SimpleType: IMAGE_SYM_TYPE_NULL # (0)
50      ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
51      StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
52
53Here's a simplified Kwalify_ schema with an extension to allow alternate types.
54
55.. _Kwalify: http://www.kuwata-lab.com/kwalify/ruby/users-guide.html
56
57.. code-block:: yaml
58
59  type: map
60    mapping:
61      header:
62        type: map
63        mapping:
64          Machine: [ {type: str, enum:
65                                 [ IMAGE_FILE_MACHINE_UNKNOWN
66                                 , IMAGE_FILE_MACHINE_AM33
67                                 , IMAGE_FILE_MACHINE_AMD64
68                                 , IMAGE_FILE_MACHINE_ARM
69                                 , IMAGE_FILE_MACHINE_ARMV7
70                                 , IMAGE_FILE_MACHINE_EBC
71                                 , IMAGE_FILE_MACHINE_I386
72                                 , IMAGE_FILE_MACHINE_IA64
73                                 , IMAGE_FILE_MACHINE_M32R
74                                 , IMAGE_FILE_MACHINE_MIPS16
75                                 , IMAGE_FILE_MACHINE_MIPSFPU
76                                 , IMAGE_FILE_MACHINE_MIPSFPU16
77                                 , IMAGE_FILE_MACHINE_POWERPC
78                                 , IMAGE_FILE_MACHINE_POWERPCFP
79                                 , IMAGE_FILE_MACHINE_R4000
80                                 , IMAGE_FILE_MACHINE_SH3
81                                 , IMAGE_FILE_MACHINE_SH3DSP
82                                 , IMAGE_FILE_MACHINE_SH4
83                                 , IMAGE_FILE_MACHINE_SH5
84                                 , IMAGE_FILE_MACHINE_THUMB
85                                 , IMAGE_FILE_MACHINE_WCEMIPSV2
86                                 ]}
87                   , {type: int}
88                   ]
89          Characteristics:
90            - type: seq
91              sequence:
92                - type: str
93                  enum: [ IMAGE_FILE_RELOCS_STRIPPED
94                        , IMAGE_FILE_EXECUTABLE_IMAGE
95                        , IMAGE_FILE_LINE_NUMS_STRIPPED
96                        , IMAGE_FILE_LOCAL_SYMS_STRIPPED
97                        , IMAGE_FILE_AGGRESSIVE_WS_TRIM
98                        , IMAGE_FILE_LARGE_ADDRESS_AWARE
99                        , IMAGE_FILE_BYTES_REVERSED_LO
100                        , IMAGE_FILE_32BIT_MACHINE
101                        , IMAGE_FILE_DEBUG_STRIPPED
102                        , IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
103                        , IMAGE_FILE_NET_RUN_FROM_SWAP
104                        , IMAGE_FILE_SYSTEM
105                        , IMAGE_FILE_DLL
106                        , IMAGE_FILE_UP_SYSTEM_ONLY
107                        , IMAGE_FILE_BYTES_REVERSED_HI
108                        ]
109            - type: int
110      sections:
111        type: seq
112        sequence:
113          - type: map
114            mapping:
115              Name: {type: str}
116              Characteristics:
117                - type: seq
118                  sequence:
119                    - type: str
120                      enum: [ IMAGE_SCN_TYPE_NO_PAD
121                            , IMAGE_SCN_CNT_CODE
122                            , IMAGE_SCN_CNT_INITIALIZED_DATA
123                            , IMAGE_SCN_CNT_UNINITIALIZED_DATA
124                            , IMAGE_SCN_LNK_OTHER
125                            , IMAGE_SCN_LNK_INFO
126                            , IMAGE_SCN_LNK_REMOVE
127                            , IMAGE_SCN_LNK_COMDAT
128                            , IMAGE_SCN_GPREL
129                            , IMAGE_SCN_MEM_PURGEABLE
130                            , IMAGE_SCN_MEM_16BIT
131                            , IMAGE_SCN_MEM_LOCKED
132                            , IMAGE_SCN_MEM_PRELOAD
133                            , IMAGE_SCN_ALIGN_1BYTES
134                            , IMAGE_SCN_ALIGN_2BYTES
135                            , IMAGE_SCN_ALIGN_4BYTES
136                            , IMAGE_SCN_ALIGN_8BYTES
137                            , IMAGE_SCN_ALIGN_16BYTES
138                            , IMAGE_SCN_ALIGN_32BYTES
139                            , IMAGE_SCN_ALIGN_64BYTES
140                            , IMAGE_SCN_ALIGN_128BYTES
141                            , IMAGE_SCN_ALIGN_256BYTES
142                            , IMAGE_SCN_ALIGN_512BYTES
143                            , IMAGE_SCN_ALIGN_1024BYTES
144                            , IMAGE_SCN_ALIGN_2048BYTES
145                            , IMAGE_SCN_ALIGN_4096BYTES
146                            , IMAGE_SCN_ALIGN_8192BYTES
147                            , IMAGE_SCN_LNK_NRELOC_OVFL
148                            , IMAGE_SCN_MEM_DISCARDABLE
149                            , IMAGE_SCN_MEM_NOT_CACHED
150                            , IMAGE_SCN_MEM_NOT_PAGED
151                            , IMAGE_SCN_MEM_SHARED
152                            , IMAGE_SCN_MEM_EXECUTE
153                            , IMAGE_SCN_MEM_READ
154                            , IMAGE_SCN_MEM_WRITE
155                            ]
156                - type: int
157              SectionData: {type: str}
158      symbols:
159        type: seq
160        sequence:
161          - type: map
162            mapping:
163              Name: {type: str}
164              Value: {type: int}
165              SectionNumber: {type: int}
166              SimpleType: [ {type: str, enum: [ IMAGE_SYM_TYPE_NULL
167                                              , IMAGE_SYM_TYPE_VOID
168                                              , IMAGE_SYM_TYPE_CHAR
169                                              , IMAGE_SYM_TYPE_SHORT
170                                              , IMAGE_SYM_TYPE_INT
171                                              , IMAGE_SYM_TYPE_LONG
172                                              , IMAGE_SYM_TYPE_FLOAT
173                                              , IMAGE_SYM_TYPE_DOUBLE
174                                              , IMAGE_SYM_TYPE_STRUCT
175                                              , IMAGE_SYM_TYPE_UNION
176                                              , IMAGE_SYM_TYPE_ENUM
177                                              , IMAGE_SYM_TYPE_MOE
178                                              , IMAGE_SYM_TYPE_BYTE
179                                              , IMAGE_SYM_TYPE_WORD
180                                              , IMAGE_SYM_TYPE_UINT
181                                              , IMAGE_SYM_TYPE_DWORD
182                                              ]}
183                          , {type: int}
184                          ]
185              ComplexType: [ {type: str, enum: [ IMAGE_SYM_DTYPE_NULL
186                                               , IMAGE_SYM_DTYPE_POINTER
187                                               , IMAGE_SYM_DTYPE_FUNCTION
188                                               , IMAGE_SYM_DTYPE_ARRAY
189                                               ]}
190                           , {type: int}
191                           ]
192              StorageClass: [ {type: str, enum:
193                                          [ IMAGE_SYM_CLASS_END_OF_FUNCTION
194                                          , IMAGE_SYM_CLASS_NULL
195                                          , IMAGE_SYM_CLASS_AUTOMATIC
196                                          , IMAGE_SYM_CLASS_EXTERNAL
197                                          , IMAGE_SYM_CLASS_STATIC
198                                          , IMAGE_SYM_CLASS_REGISTER
199                                          , IMAGE_SYM_CLASS_EXTERNAL_DEF
200                                          , IMAGE_SYM_CLASS_LABEL
201                                          , IMAGE_SYM_CLASS_UNDEFINED_LABEL
202                                          , IMAGE_SYM_CLASS_MEMBER_OF_STRUCT
203                                          , IMAGE_SYM_CLASS_ARGUMENT
204                                          , IMAGE_SYM_CLASS_STRUCT_TAG
205                                          , IMAGE_SYM_CLASS_MEMBER_OF_UNION
206                                          , IMAGE_SYM_CLASS_UNION_TAG
207                                          , IMAGE_SYM_CLASS_TYPE_DEFINITION
208                                          , IMAGE_SYM_CLASS_UNDEFINED_STATIC
209                                          , IMAGE_SYM_CLASS_ENUM_TAG
210                                          , IMAGE_SYM_CLASS_MEMBER_OF_ENUM
211                                          , IMAGE_SYM_CLASS_REGISTER_PARAM
212                                          , IMAGE_SYM_CLASS_BIT_FIELD
213                                          , IMAGE_SYM_CLASS_BLOCK
214                                          , IMAGE_SYM_CLASS_FUNCTION
215                                          , IMAGE_SYM_CLASS_END_OF_STRUCT
216                                          , IMAGE_SYM_CLASS_FILE
217                                          , IMAGE_SYM_CLASS_SECTION
218                                          , IMAGE_SYM_CLASS_WEAK_EXTERNAL
219                                          , IMAGE_SYM_CLASS_CLR_TOKEN
220                                          ]}
221                            , {type: int}
222                            ]
223