示例#1
0
		public MethodBodyOptions(MethodDef method) {
			this.CodeType = method.CodeType;
			if (method.MethodBody is CilBody) {
				var headerRva = method.RVA;
				var headerFileOffset = (FileOffset)method.Module.ToFileOffset((uint)headerRva);
				var rva = (RVA)((uint)headerRva + method.Body.HeaderSize);
				var fileOffset = (FileOffset)((long)headerFileOffset + method.Body.HeaderSize);
				this.CilBodyOptions = new CilBodyOptions((CilBody)method.MethodBody, headerRva, headerFileOffset, rva, fileOffset);
				this.BodyType = MethodBodyType.Cil;
			}
			else if (method.MethodBody is NativeMethodBody) {
				this.NativeMethodBodyOptions = new NativeMethodBodyOptions((NativeMethodBody)method.MethodBody);
				this.BodyType = MethodBodyType.Native;
			}
			else
				this.BodyType = MethodBodyType.None;
		}
示例#2
0
		public MethodBodyOptions(MethodDef method)
		{
			this.CodeType = method.CodeType;
			if (method.MethodBody is CilBody) {
				FileOffset fileOffset = 0;
				var mod = method.Module as ModuleDefMD;
				if (mod != null)
					fileOffset = mod.MetaData.PEImage.ToFileOffset(method.RVA);
				this.CilBodyOptions = new CilBodyOptions((CilBody)method.MethodBody, method.RVA, fileOffset);
				this.BodyType = MethodBodyType.Cil;
			}
			else if (method.MethodBody is NativeMethodBody) {
				this.NativeMethodBodyOptions = new NativeMethodBodyOptions((NativeMethodBody)method.MethodBody);
				this.BodyType = MethodBodyType.Native;
			}
			else
				this.BodyType = MethodBodyType.None;
		}
示例#3
0
 public MethodBodyOptions(MethodDef method)
 {
     CodeType = method.CodeType;
     if (method.MethodBody is CilBody cilBody)
     {
         var headerRva        = method.RVA;
         var headerFileOffset = (FileOffset)(method.Module.ToFileOffset((uint)headerRva) ?? (uint)headerRva);
         var rva        = headerRva + method.Body.HeaderSize;
         var fileOffset = headerFileOffset + method.Body.HeaderSize;
         CilBodyOptions = new CilBodyOptions(cilBody, headerRva, headerFileOffset, rva, fileOffset);
         BodyType       = MethodBodyType.Cil;
     }
     else if (method.MethodBody is NativeMethodBody nativeBody)
     {
         NativeMethodBodyOptions = new NativeMethodBodyOptions(nativeBody);
         BodyType = MethodBodyType.Native;
     }
     else
     {
         BodyType = MethodBodyType.None;
     }
 }
示例#4
0
 public MethodBodyOptions(MethodDef method)
 {
     this.CodeType = method.CodeType;
     if (method.MethodBody is CilBody)
     {
         var headerRva        = method.RVA;
         var headerFileOffset = (FileOffset)method.Module.ToFileOffset((uint)headerRva);
         var rva        = (RVA)((uint)headerRva + method.Body.HeaderSize);
         var fileOffset = (FileOffset)((long)headerFileOffset + method.Body.HeaderSize);
         this.CilBodyOptions = new CilBodyOptions((CilBody)method.MethodBody, headerRva, headerFileOffset, rva, fileOffset);
         this.BodyType       = MethodBodyType.Cil;
     }
     else if (method.MethodBody is NativeMethodBody)
     {
         this.NativeMethodBodyOptions = new NativeMethodBodyOptions((NativeMethodBody)method.MethodBody);
         this.BodyType = MethodBodyType.Native;
     }
     else
     {
         this.BodyType = MethodBodyType.None;
     }
 }
示例#5
0
 public MethodBodyOptions(MethodDef method)
 {
     this.CodeType = method.CodeType;
     if (method.MethodBody is CilBody)
     {
         FileOffset fileOffset = 0;
         var        mod        = method.Module as ModuleDefMD;
         if (mod != null)
         {
             fileOffset = mod.MetaData.PEImage.ToFileOffset(method.RVA);
         }
         this.CilBodyOptions = new CilBodyOptions((CilBody)method.MethodBody, method.RVA, fileOffset);
         this.BodyType       = MethodBodyType.Cil;
     }
     else if (method.MethodBody is NativeMethodBody)
     {
         this.NativeMethodBodyOptions = new NativeMethodBodyOptions((NativeMethodBody)method.MethodBody);
         this.BodyType = MethodBodyType.Native;
     }
     else
     {
         this.BodyType = MethodBodyType.None;
     }
 }