|  | 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} | 
|  | ] |