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