222 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
yaml2obj
 | 
						|
========
 | 
						|
 | 
						|
yaml2obj takes a YAML description of an object file and converts it to a binary
 | 
						|
file.
 | 
						|
 | 
						|
    $ yaml2obj input-file
 | 
						|
 | 
						|
.. program:: yaml2obj
 | 
						|
 | 
						|
Outputs the binary to stdout.
 | 
						|
 | 
						|
COFF Syntax
 | 
						|
-----------
 | 
						|
 | 
						|
Here's a sample COFF file.
 | 
						|
 | 
						|
.. code-block:: yaml
 | 
						|
 | 
						|
  header:
 | 
						|
    Machine: IMAGE_FILE_MACHINE_I386 # (0x14C)
 | 
						|
 | 
						|
  sections:
 | 
						|
    - Name: .text
 | 
						|
      Characteristics: [ IMAGE_SCN_CNT_CODE
 | 
						|
                       , IMAGE_SCN_ALIGN_16BYTES
 | 
						|
                       , IMAGE_SCN_MEM_EXECUTE
 | 
						|
                       , IMAGE_SCN_MEM_READ
 | 
						|
                       ] # 0x60500020
 | 
						|
      SectionData:
 | 
						|
        "\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$.....|
 | 
						|
 | 
						|
  symbols:
 | 
						|
    - Name: .text
 | 
						|
      Value: 0
 | 
						|
      SectionNumber: 1
 | 
						|
      SimpleType: IMAGE_SYM_TYPE_NULL # (0)
 | 
						|
      ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
 | 
						|
      StorageClass: IMAGE_SYM_CLASS_STATIC # (3)
 | 
						|
      NumberOfAuxSymbols: 1
 | 
						|
      AuxiliaryData:
 | 
						|
        "\x24\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00" # |$.................|
 | 
						|
 | 
						|
    - Name: _main
 | 
						|
      Value: 0
 | 
						|
      SectionNumber: 1
 | 
						|
      SimpleType: IMAGE_SYM_TYPE_NULL # (0)
 | 
						|
      ComplexType: IMAGE_SYM_DTYPE_NULL # (0)
 | 
						|
      StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)
 | 
						|
 | 
						|
Here's a simplified Kwalify_ schema with an extension to allow alternate types.
 | 
						|
 | 
						|
.. _Kwalify: http://www.kuwata-lab.com/kwalify/ruby/users-guide.html
 | 
						|
 | 
						|
.. code-block:: yaml
 | 
						|
 | 
						|
  type: map
 | 
						|
    mapping:
 | 
						|
      header:
 | 
						|
        type: map
 | 
						|
        mapping:
 | 
						|
          Machine: [ {type: str, enum:
 | 
						|
                                 [ IMAGE_FILE_MACHINE_UNKNOWN
 | 
						|
                                 , IMAGE_FILE_MACHINE_AM33
 | 
						|
                                 , IMAGE_FILE_MACHINE_AMD64
 | 
						|
                                 , IMAGE_FILE_MACHINE_ARM
 | 
						|
                                 , IMAGE_FILE_MACHINE_ARMNT
 | 
						|
                                 , IMAGE_FILE_MACHINE_ARM64
 | 
						|
                                 , IMAGE_FILE_MACHINE_EBC
 | 
						|
                                 , IMAGE_FILE_MACHINE_I386
 | 
						|
                                 , IMAGE_FILE_MACHINE_IA64
 | 
						|
                                 , IMAGE_FILE_MACHINE_M32R
 | 
						|
                                 , IMAGE_FILE_MACHINE_MIPS16
 | 
						|
                                 , IMAGE_FILE_MACHINE_MIPSFPU
 | 
						|
                                 , IMAGE_FILE_MACHINE_MIPSFPU16
 | 
						|
                                 , IMAGE_FILE_MACHINE_POWERPC
 | 
						|
                                 , IMAGE_FILE_MACHINE_POWERPCFP
 | 
						|
                                 , IMAGE_FILE_MACHINE_R4000
 | 
						|
                                 , IMAGE_FILE_MACHINE_SH3
 | 
						|
                                 , IMAGE_FILE_MACHINE_SH3DSP
 | 
						|
                                 , IMAGE_FILE_MACHINE_SH4
 | 
						|
                                 , IMAGE_FILE_MACHINE_SH5
 | 
						|
                                 , IMAGE_FILE_MACHINE_THUMB
 | 
						|
                                 , IMAGE_FILE_MACHINE_WCEMIPSV2
 | 
						|
                                 ]}
 | 
						|
                   , {type: int}
 | 
						|
                   ]
 | 
						|
          Characteristics:
 | 
						|
            - type: seq
 | 
						|
              sequence:
 | 
						|
                - type: str
 | 
						|
                  enum: [ IMAGE_FILE_RELOCS_STRIPPED
 | 
						|
                        , IMAGE_FILE_EXECUTABLE_IMAGE
 | 
						|
                        , IMAGE_FILE_LINE_NUMS_STRIPPED
 | 
						|
                        , IMAGE_FILE_LOCAL_SYMS_STRIPPED
 | 
						|
                        , IMAGE_FILE_AGGRESSIVE_WS_TRIM
 | 
						|
                        , IMAGE_FILE_LARGE_ADDRESS_AWARE
 | 
						|
                        , IMAGE_FILE_BYTES_REVERSED_LO
 | 
						|
                        , IMAGE_FILE_32BIT_MACHINE
 | 
						|
                        , IMAGE_FILE_DEBUG_STRIPPED
 | 
						|
                        , IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
 | 
						|
                        , IMAGE_FILE_NET_RUN_FROM_SWAP
 | 
						|
                        , IMAGE_FILE_SYSTEM
 | 
						|
                        , IMAGE_FILE_DLL
 | 
						|
                        , IMAGE_FILE_UP_SYSTEM_ONLY
 | 
						|
                        , IMAGE_FILE_BYTES_REVERSED_HI
 | 
						|
                        ]
 | 
						|
            - type: int
 | 
						|
      sections:
 | 
						|
        type: seq
 | 
						|
        sequence:
 | 
						|
          - type: map
 | 
						|
            mapping:
 | 
						|
              Name: {type: str}
 | 
						|
              Characteristics:
 | 
						|
                - type: seq
 | 
						|
                  sequence:
 | 
						|
                    - type: str
 | 
						|
                      enum: [ IMAGE_SCN_TYPE_NO_PAD
 | 
						|
                            , IMAGE_SCN_CNT_CODE
 | 
						|
                            , IMAGE_SCN_CNT_INITIALIZED_DATA
 | 
						|
                            , IMAGE_SCN_CNT_UNINITIALIZED_DATA
 | 
						|
                            , IMAGE_SCN_LNK_OTHER
 | 
						|
                            , IMAGE_SCN_LNK_INFO
 | 
						|
                            , IMAGE_SCN_LNK_REMOVE
 | 
						|
                            , IMAGE_SCN_LNK_COMDAT
 | 
						|
                            , IMAGE_SCN_GPREL
 | 
						|
                            , IMAGE_SCN_MEM_PURGEABLE
 | 
						|
                            , IMAGE_SCN_MEM_16BIT
 | 
						|
                            , IMAGE_SCN_MEM_LOCKED
 | 
						|
                            , IMAGE_SCN_MEM_PRELOAD
 | 
						|
                            , IMAGE_SCN_ALIGN_1BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_2BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_4BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_8BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_16BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_32BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_64BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_128BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_256BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_512BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_1024BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_2048BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_4096BYTES
 | 
						|
                            , IMAGE_SCN_ALIGN_8192BYTES
 | 
						|
                            , IMAGE_SCN_LNK_NRELOC_OVFL
 | 
						|
                            , IMAGE_SCN_MEM_DISCARDABLE
 | 
						|
                            , IMAGE_SCN_MEM_NOT_CACHED
 | 
						|
                            , IMAGE_SCN_MEM_NOT_PAGED
 | 
						|
                            , IMAGE_SCN_MEM_SHARED
 | 
						|
                            , IMAGE_SCN_MEM_EXECUTE
 | 
						|
                            , IMAGE_SCN_MEM_READ
 | 
						|
                            , IMAGE_SCN_MEM_WRITE
 | 
						|
                            ]
 | 
						|
                - type: int
 | 
						|
              SectionData: {type: str}
 | 
						|
      symbols:
 | 
						|
        type: seq
 | 
						|
        sequence:
 | 
						|
          - type: map
 | 
						|
            mapping:
 | 
						|
              Name: {type: str}
 | 
						|
              Value: {type: int}
 | 
						|
              SectionNumber: {type: int}
 | 
						|
              SimpleType: [ {type: str, enum: [ IMAGE_SYM_TYPE_NULL
 | 
						|
                                              , IMAGE_SYM_TYPE_VOID
 | 
						|
                                              , IMAGE_SYM_TYPE_CHAR
 | 
						|
                                              , IMAGE_SYM_TYPE_SHORT
 | 
						|
                                              , IMAGE_SYM_TYPE_INT
 | 
						|
                                              , IMAGE_SYM_TYPE_LONG
 | 
						|
                                              , IMAGE_SYM_TYPE_FLOAT
 | 
						|
                                              , IMAGE_SYM_TYPE_DOUBLE
 | 
						|
                                              , IMAGE_SYM_TYPE_STRUCT
 | 
						|
                                              , IMAGE_SYM_TYPE_UNION
 | 
						|
                                              , IMAGE_SYM_TYPE_ENUM
 | 
						|
                                              , IMAGE_SYM_TYPE_MOE
 | 
						|
                                              , IMAGE_SYM_TYPE_BYTE
 | 
						|
                                              , IMAGE_SYM_TYPE_WORD
 | 
						|
                                              , IMAGE_SYM_TYPE_UINT
 | 
						|
                                              , IMAGE_SYM_TYPE_DWORD
 | 
						|
                                              ]}
 | 
						|
                          , {type: int}
 | 
						|
                          ]
 | 
						|
              ComplexType: [ {type: str, enum: [ IMAGE_SYM_DTYPE_NULL
 | 
						|
                                               , IMAGE_SYM_DTYPE_POINTER
 | 
						|
                                               , IMAGE_SYM_DTYPE_FUNCTION
 | 
						|
                                               , IMAGE_SYM_DTYPE_ARRAY
 | 
						|
                                               ]}
 | 
						|
                           , {type: int}
 | 
						|
                           ]
 | 
						|
              StorageClass: [ {type: str, enum:
 | 
						|
                                          [ IMAGE_SYM_CLASS_END_OF_FUNCTION
 | 
						|
                                          , IMAGE_SYM_CLASS_NULL
 | 
						|
                                          , IMAGE_SYM_CLASS_AUTOMATIC
 | 
						|
                                          , IMAGE_SYM_CLASS_EXTERNAL
 | 
						|
                                          , IMAGE_SYM_CLASS_STATIC
 | 
						|
                                          , IMAGE_SYM_CLASS_REGISTER
 | 
						|
                                          , IMAGE_SYM_CLASS_EXTERNAL_DEF
 | 
						|
                                          , IMAGE_SYM_CLASS_LABEL
 | 
						|
                                          , IMAGE_SYM_CLASS_UNDEFINED_LABEL
 | 
						|
                                          , IMAGE_SYM_CLASS_MEMBER_OF_STRUCT
 | 
						|
                                          , IMAGE_SYM_CLASS_ARGUMENT
 | 
						|
                                          , IMAGE_SYM_CLASS_STRUCT_TAG
 | 
						|
                                          , IMAGE_SYM_CLASS_MEMBER_OF_UNION
 | 
						|
                                          , IMAGE_SYM_CLASS_UNION_TAG
 | 
						|
                                          , IMAGE_SYM_CLASS_TYPE_DEFINITION
 | 
						|
                                          , IMAGE_SYM_CLASS_UNDEFINED_STATIC
 | 
						|
                                          , IMAGE_SYM_CLASS_ENUM_TAG
 | 
						|
                                          , IMAGE_SYM_CLASS_MEMBER_OF_ENUM
 | 
						|
                                          , IMAGE_SYM_CLASS_REGISTER_PARAM
 | 
						|
                                          , IMAGE_SYM_CLASS_BIT_FIELD
 | 
						|
                                          , IMAGE_SYM_CLASS_BLOCK
 | 
						|
                                          , IMAGE_SYM_CLASS_FUNCTION
 | 
						|
                                          , IMAGE_SYM_CLASS_END_OF_STRUCT
 | 
						|
                                          , IMAGE_SYM_CLASS_FILE
 | 
						|
                                          , IMAGE_SYM_CLASS_SECTION
 | 
						|
                                          , IMAGE_SYM_CLASS_WEAK_EXTERNAL
 | 
						|
                                          , IMAGE_SYM_CLASS_CLR_TOKEN
 | 
						|
                                          ]}
 | 
						|
                            , {type: int}
 | 
						|
                            ]
 |