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