277 lines · plain
1yaml2obj2========3 4yaml2obj takes a YAML description of an object file and converts it to a binary5file.6 7 $ yaml2obj input-file8 9.. program:: yaml2obj10 11Outputs the binary to stdout.12 13COFF Syntax14-----------15 16Here's a sample COFF file.17 18.. code-block:: yaml19 20 header:21 Machine: IMAGE_FILE_MACHINE_I386 # (0x14C)22 23 sections:24 - Name: .text25 Characteristics: [ IMAGE_SCN_CNT_CODE26 , IMAGE_SCN_ALIGN_16BYTES27 , IMAGE_SCN_MEM_EXECUTE28 , IMAGE_SCN_MEM_READ29 ] # 0x6050002030 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 - Name: .rdata33 Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]34 StructuredData:35 - Binary: {type: str}36 - UInt32: {type: int}37 - LoadConfig:38 Size: {type: int}39 TimeDateStamp: {type: int}40 MajorVersion: {type: int}41 MinorVersion: {type: int}42 GlobalFlagsClear: {type: int}43 GlobalFlagsSet: {type: int}44 CriticalSectionDefaultTimeout: {type: int}45 DeCommitFreeBlockThreshold: {type: int}46 DeCommitTotalFreeThreshold: {type: int}47 LockPrefixTable: {type: int}48 MaximumAllocationSize: {type: int}49 VirtualMemoryThreshold: {type: int}50 ProcessAffinityMask: {type: int}51 ProcessHeapFlags: {type: int}52 CSDVersion: {type: int}53 DependentLoadFlags: {type: int}54 EditList: {type: int}55 SecurityCookie: {type: int}56 SEHandlerTable: {type: int}57 SEHandlerCount: {type: int}58 GuardCFCheckFunction: {type: int}59 GuardCFCheckDispatch: {type: int}60 GuardCFFunctionTable: {type: int}61 GuardCFFunctionCount: {type: int}62 GuardFlags: {type: int}63 CodeIntegrity:64 Flags: {type: int}65 Catalog: {type: int}66 CatalogOffset: {type: int}67 GuardAddressTakenIatEntryTable: {type: int}68 GuardAddressTakenIatEntryCount: {type: int}69 GuardLongJumpTargetTable: {type: int}70 GuardLongJumpTargetCount: {type: int}71 DynamicValueRelocTable: {type: int}72 CHPEMetadataPointer: {type: int}73 GuardRFFailureRoutine: {type: int}74 GuardRFFailureRoutineFunctionPointer: {type: int}75 DynamicValueRelocTableOffset: {type: int}76 DynamicValueRelocTableSection: {type: int}77 GuardRFVerifyStackPointerFunctionPointer: {type: int}78 HotPatchTableOffset: {type: int}79 EnclaveConfigurationPointer: {type: int}80 VolatileMetadataPointer: {type: int}81 GuardEHContinuationTable: {type: int}82 GuardEHContinuationCount: {type: int}83 GuardXFGCheckFunctionPointer: {type: int}84 GuardXFGDispatchFunctionPointer: {type: int}85 GuardXFGTableDispatchFunctionPointer: {type: int}86 CastGuardOsDeterminedFailureMode: {type: int}87 88 symbols:89 - Name: .text90 Value: 091 SectionNumber: 192 SimpleType: IMAGE_SYM_TYPE_NULL # (0)93 ComplexType: IMAGE_SYM_DTYPE_NULL # (0)94 StorageClass: IMAGE_SYM_CLASS_STATIC # (3)95 NumberOfAuxSymbols: 196 AuxiliaryData:97 "\x24\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00" # |$.................|98 99 - Name: _main100 Value: 0101 SectionNumber: 1102 SimpleType: IMAGE_SYM_TYPE_NULL # (0)103 ComplexType: IMAGE_SYM_DTYPE_NULL # (0)104 StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)105 106Here's a simplified Kwalify_ schema with an extension to allow alternate types.107 108.. _Kwalify: http://www.kuwata-lab.com/kwalify/ruby/users-guide.html109 110.. code-block:: yaml111 112 type: map113 mapping:114 header:115 type: map116 mapping:117 Machine: [ {type: str, enum:118 [ IMAGE_FILE_MACHINE_UNKNOWN119 , IMAGE_FILE_MACHINE_AM33120 , IMAGE_FILE_MACHINE_AMD64121 , IMAGE_FILE_MACHINE_ARM122 , IMAGE_FILE_MACHINE_ARMNT123 , IMAGE_FILE_MACHINE_ARM64124 , IMAGE_FILE_MACHINE_EBC125 , IMAGE_FILE_MACHINE_I386126 , IMAGE_FILE_MACHINE_IA64127 , IMAGE_FILE_MACHINE_M32R128 , IMAGE_FILE_MACHINE_MIPS16129 , IMAGE_FILE_MACHINE_MIPSFPU130 , IMAGE_FILE_MACHINE_MIPSFPU16131 , IMAGE_FILE_MACHINE_POWERPC132 , IMAGE_FILE_MACHINE_POWERPCFP133 , IMAGE_FILE_MACHINE_R4000134 , IMAGE_FILE_MACHINE_SH3135 , IMAGE_FILE_MACHINE_SH3DSP136 , IMAGE_FILE_MACHINE_SH4137 , IMAGE_FILE_MACHINE_SH5138 , IMAGE_FILE_MACHINE_THUMB139 , IMAGE_FILE_MACHINE_WCEMIPSV2140 ]}141 , {type: int}142 ]143 Characteristics:144 - type: seq145 sequence:146 - type: str147 enum: [ IMAGE_FILE_RELOCS_STRIPPED148 , IMAGE_FILE_EXECUTABLE_IMAGE149 , IMAGE_FILE_LINE_NUMS_STRIPPED150 , IMAGE_FILE_LOCAL_SYMS_STRIPPED151 , IMAGE_FILE_AGGRESSIVE_WS_TRIM152 , IMAGE_FILE_LARGE_ADDRESS_AWARE153 , IMAGE_FILE_BYTES_REVERSED_LO154 , IMAGE_FILE_32BIT_MACHINE155 , IMAGE_FILE_DEBUG_STRIPPED156 , IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP157 , IMAGE_FILE_NET_RUN_FROM_SWAP158 , IMAGE_FILE_SYSTEM159 , IMAGE_FILE_DLL160 , IMAGE_FILE_UP_SYSTEM_ONLY161 , IMAGE_FILE_BYTES_REVERSED_HI162 ]163 - type: int164 sections:165 type: seq166 sequence:167 - type: map168 mapping:169 Name: {type: str}170 Characteristics:171 - type: seq172 sequence:173 - type: str174 enum: [ IMAGE_SCN_TYPE_NO_PAD175 , IMAGE_SCN_CNT_CODE176 , IMAGE_SCN_CNT_INITIALIZED_DATA177 , IMAGE_SCN_CNT_UNINITIALIZED_DATA178 , IMAGE_SCN_LNK_OTHER179 , IMAGE_SCN_LNK_INFO180 , IMAGE_SCN_LNK_REMOVE181 , IMAGE_SCN_LNK_COMDAT182 , IMAGE_SCN_GPREL183 , IMAGE_SCN_MEM_PURGEABLE184 , IMAGE_SCN_MEM_16BIT185 , IMAGE_SCN_MEM_LOCKED186 , IMAGE_SCN_MEM_PRELOAD187 , IMAGE_SCN_ALIGN_1BYTES188 , IMAGE_SCN_ALIGN_2BYTES189 , IMAGE_SCN_ALIGN_4BYTES190 , IMAGE_SCN_ALIGN_8BYTES191 , IMAGE_SCN_ALIGN_16BYTES192 , IMAGE_SCN_ALIGN_32BYTES193 , IMAGE_SCN_ALIGN_64BYTES194 , IMAGE_SCN_ALIGN_128BYTES195 , IMAGE_SCN_ALIGN_256BYTES196 , IMAGE_SCN_ALIGN_512BYTES197 , IMAGE_SCN_ALIGN_1024BYTES198 , IMAGE_SCN_ALIGN_2048BYTES199 , IMAGE_SCN_ALIGN_4096BYTES200 , IMAGE_SCN_ALIGN_8192BYTES201 , IMAGE_SCN_LNK_NRELOC_OVFL202 , IMAGE_SCN_MEM_DISCARDABLE203 , IMAGE_SCN_MEM_NOT_CACHED204 , IMAGE_SCN_MEM_NOT_PAGED205 , IMAGE_SCN_MEM_SHARED206 , IMAGE_SCN_MEM_EXECUTE207 , IMAGE_SCN_MEM_READ208 , IMAGE_SCN_MEM_WRITE209 ]210 - type: int211 SectionData: {type: str}212 symbols:213 type: seq214 sequence:215 - type: map216 mapping:217 Name: {type: str}218 Value: {type: int}219 SectionNumber: {type: int}220 SimpleType: [ {type: str, enum: [ IMAGE_SYM_TYPE_NULL221 , IMAGE_SYM_TYPE_VOID222 , IMAGE_SYM_TYPE_CHAR223 , IMAGE_SYM_TYPE_SHORT224 , IMAGE_SYM_TYPE_INT225 , IMAGE_SYM_TYPE_LONG226 , IMAGE_SYM_TYPE_FLOAT227 , IMAGE_SYM_TYPE_DOUBLE228 , IMAGE_SYM_TYPE_STRUCT229 , IMAGE_SYM_TYPE_UNION230 , IMAGE_SYM_TYPE_ENUM231 , IMAGE_SYM_TYPE_MOE232 , IMAGE_SYM_TYPE_BYTE233 , IMAGE_SYM_TYPE_WORD234 , IMAGE_SYM_TYPE_UINT235 , IMAGE_SYM_TYPE_DWORD236 ]}237 , {type: int}238 ]239 ComplexType: [ {type: str, enum: [ IMAGE_SYM_DTYPE_NULL240 , IMAGE_SYM_DTYPE_POINTER241 , IMAGE_SYM_DTYPE_FUNCTION242 , IMAGE_SYM_DTYPE_ARRAY243 ]}244 , {type: int}245 ]246 StorageClass: [ {type: str, enum:247 [ IMAGE_SYM_CLASS_END_OF_FUNCTION248 , IMAGE_SYM_CLASS_NULL249 , IMAGE_SYM_CLASS_AUTOMATIC250 , IMAGE_SYM_CLASS_EXTERNAL251 , IMAGE_SYM_CLASS_STATIC252 , IMAGE_SYM_CLASS_REGISTER253 , IMAGE_SYM_CLASS_EXTERNAL_DEF254 , IMAGE_SYM_CLASS_LABEL255 , IMAGE_SYM_CLASS_UNDEFINED_LABEL256 , IMAGE_SYM_CLASS_MEMBER_OF_STRUCT257 , IMAGE_SYM_CLASS_ARGUMENT258 , IMAGE_SYM_CLASS_STRUCT_TAG259 , IMAGE_SYM_CLASS_MEMBER_OF_UNION260 , IMAGE_SYM_CLASS_UNION_TAG261 , IMAGE_SYM_CLASS_TYPE_DEFINITION262 , IMAGE_SYM_CLASS_UNDEFINED_STATIC263 , IMAGE_SYM_CLASS_ENUM_TAG264 , IMAGE_SYM_CLASS_MEMBER_OF_ENUM265 , IMAGE_SYM_CLASS_REGISTER_PARAM266 , IMAGE_SYM_CLASS_BIT_FIELD267 , IMAGE_SYM_CLASS_BLOCK268 , IMAGE_SYM_CLASS_FUNCTION269 , IMAGE_SYM_CLASS_END_OF_STRUCT270 , IMAGE_SYM_CLASS_FILE271 , IMAGE_SYM_CLASS_SECTION272 , IMAGE_SYM_CLASS_WEAK_EXTERNAL273 , IMAGE_SYM_CLASS_CLR_TOKEN274 ]}275 , {type: int}276 ]277