Expert .NET IL Assembler:ILAsm语法

词法标记:如下所示:
1.ID:C风格的字符和数字混合的标识符(例如,Hello_There2)。
2.DOTTEDNAME:复合的以句点分割的名称(例如,System.Object)。
3.QSTRING:C风格的双引号字符串(例如,“hi\n”)。
4.SQSTRING:C风格的单引号字符串(例如,‘hi’)。
5.INT32:C风格的32位整数(例如,235,03423,0x34FFF)。
6.INT64:C风格的64位整数(例如,-2353453636235234,0x34FFFFFFFFFF)。
7.FLOAT64:C风格的浮点数(例如,-0.2323,354.3423,3435.34E-5)。
8.INSTR_*:特殊类的IL指令(参见opcode.def指令)。
9.HEXBYTE:1位或者2位十六进制数字(例如,A2,F0)。
10.ILASM关键字都以粗体显示(例如,.classvaluetypemarshal)。
11.注释包括在/* */对中(例如,/* this is a comment */)。

辅助词法标记:如下所示:
1.TYPEDEF_T:类的别名(TypeDef或TypeRef)。
2.TYPEDEF_M:方法的别名。
3.TYPEDEF_F:字段的别名。
4.TYPEDEF_TS:类型说明的别名(TypeSpec)。
5.TYPEDEF_MR:字段或方法的别名(MemberRef)。
6.TYPEDEF_CA:自定义特性的别名。

数据类型非终结符:如下所示:
1.compQstring ::= QSTRING | compQstring + QSTRING
2.int32 ::= INT64
3.int64 ::= INT64
4.float64 ::= FLOAT64 | float32(int32) | float64(int64)
5.bytes ::= /* EMPTY */ | hexbytes
6.hexbytes ::= HEXBYTE | hexbytes HEXBYTE
7.truefalse ::= true | false
8.mdtoken ::= mdtoken(int32)

标识符非终结符:如下所示:
1.id ::= ID | SQSTRING
2.dottedName ::= id | DOTTEDNAME | dottedName.dottedName
3.slashedName ::= dottedName | slashedName / dottedName

类引用:如下所示:
1.className ::= [ dottedName ] slashedName
      | [ mdtoken ] slashedName
      | [ * ] slashedName
      | [ .module dottedName ] slashedName
      | slashedName
      | mdtoken
      | TYPEDEF_T
      | .this
      | .base
      | .nester
2.classNameSeq ::= /* EMPTY */ | className classNameSeq

模块级声明:如下所示:
1.PROGRAM :: = decls
2.decls := /* EMPTY */ | decls decl
3.decl ::= moduleParamDecl
   | manifestDecl
   | classHead { classDecls }
   | .namespace dottedName { decls } /* 废弃的 */
   | methodHead methodDecls }
   | fieldDecl
   | dataDecl
   | extSourceSpec
   | secDecl
   | customAttrDecl
   | languageDecl
   | typedefDecl
   | compControl

编译控制伪指令:如下所示:
1.compControl ::= #define dottedName
       | #define dottedName QSTRING
       | #undef dottedName
       | #ifdef dottedName
       | #else
       | #endif
       | #include QSTRING
       | ;

模板参数声明:如下所示:
1.moduleParamDecl ::= .subsystem int32
          | .corflags int32
          | .file alignment int32
          | .imagebase int64
          | .stackreserve int64
          | .typelist { classNameSeq }
          | .mscorlib
          | vtableDecl /* 不建议使用;替代的使用.vtfixup */
          | vtfixupDecl

V表定位表声明:如下所示:
1.vtfixupDecl ::= .vtfixup [ int32 ] vtfixupAttr at id
2.vtfixupAttr ::= /* EMPTY */
      | vtfixupAttr int32
      | vtfixupAttr int64
      | vtfixupAttr fromunmanaged
      | vtfixupAttr callmostderived /* 不使用 /
      | vtfixupAttr retainappdomain /
不使用 /
3.vtableDecl ::= .vtable = ( bytes ) /
不建议使用;替代的使用.vtfixup */

清单声明:如下所示:
1.manifestDecl ::= .module
       | .module dottedName
       | .module extern dottedName
       | assemblyHead { assemblyDecls }
       | assemblyRefHead { assemblyRefDecls }
       | fileDecl
       | exptypeHead {exptypeDecls}
       | manifestResHead { manifestResDecls}
       | moduleHead
2.assemblyHead ::= .assembly asmAttr dottedName
3.asmAttr ::= /* EMPTY */
     | asmAttr retargetable
     | asmAttr legacy library /* 只是为了向后兼容 */
     | asmAttr cil
     | asmAttr x86
     | asmAttr ia64
     | asmAttr amd64
4.assemblyDecls ::= /* EMPTY */
        | assemblyDecls assemblyDecl
5.assemblyDecl ::= .hash algorithm int32
        | secDecl
        | asmOrRefDecl
6.intOrWildcard ::= int32 | *
7.asmOrRefDecl ::= .publickey = ( bytes )
        | .ver intOrWildcard : intOrWildcard : intOrWildcard : intOrWildcard
        | .locale compQstring
        | .locale = ( bytes )
        | customAttrDecl
        | compControl
8.assemblyRefHead ::= .assembly extern asmAttr dottedName
          | .assembly extern asmAttr dottedName as dottedName
9.assemblyRefDecls ::= /* EMPTY */
          | assemblyRefDecls assemblyRefDecl
10.assemblyRefDecl ::= .hash = ( bytes )
          | asmOrRefDecl
          | .publickeytoken = ( bytes )
          | auto
11.fileDecl ::= .file fileAttr dottedName fileEntry .hash = (bytes) fileEntry
     | .file fileAttr dottedName fileEntry
12.fileAttr ::= /* EMPTY */
     | fileAttr nometadata
13.fileEntry ::= /* EMPTY */
      | .entrypoint
14.exptypeHead ::= .class extern expAttr dottedName
15.expAttr := /* EMPTY */
     | expAttr private
     | expAttr public
     | expAttr forwarder
     | expAttr nested public
     | expAttr nested private
     | expAttr nested family
     | expAttr nested assembly
     | expAttr nested famandassem
     | expAttr nested famorassem

你可能感兴趣的:(.NET)