brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.2 KiB · f58fdd4 Raw
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