Декомпиляция кода - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Есть dll, которую нужно декомпилировать и взять оттуда код. Ничего противозаконного =) Использую программы JetBrains DotPeek и ILSpy. В общих чертах то, что мне нужно (что относится чисто к C#) у меня получается выдернуть, но есть некоторые моменты которые я просто не пойму. Вот пример: Через JetBrains DotPeek
using Autodesk.AutoCAD.Runtime;
using System;
using System.Runtime.InteropServices;
 
namespace AutoCAD.PInvoke
{
  [Wrapper("OPMPropertyExtension")]
  public class PropertyExtension : RXObject
  {
    protected internal PropertyExtension(IntPtr unmanagedPointer, [MarshalAs(UnmanagedType.U1)] bool bAutoDelete)
    {
      base.\u002Ector(unmanagedPointer, bAutoDelete);
    }
 
    internal unsafe OPMPropertyExtension* GetImpObj()
    {
      return (OPMPropertyExtension*) ((DisposableWrapper) this).get_UnmanagedObject().ToPointer();
    }
 
    public virtual unsafe object GetPropertyManager()
    {
      OPMPropertyExtension* impObj = this.GetImpObj();
      // ISSUE: cast to a function pointer type
      // ISSUE: function pointer call
      return Marshal.GetObjectForIUnknown(new IntPtr((void*) __calli((__FnPtr<IPropertyManager* (IntPtr)>) *(long*) (*(long*) impObj + 48L))((IntPtr) impObj)));
    }
 
    public virtual unsafe void SetPropertyManager(object pPropManager)
    {
      IPropertyManager* pointer = (IPropertyManager*) Marshal.GetIUnknownForObject(pPropManager).ToPointer();
      OPMPropertyExtension* impObj = this.GetImpObj();
      OPMPropertyExtension* propertyExtensionPtr = impObj;
      IPropertyManager* ipropertyManagerPtr = pointer;
      // ISSUE: cast to a function pointer type
      // ISSUE: function pointer call
      __calli((__FnPtr<void (IntPtr, IPropertyManager*)>) *(long*) (*(long*) impObj + 56L))((IPropertyManager*) propertyExtensionPtr, (IntPtr) ipropertyManagerPtr);
    }
  }
}
Через ILSpy
using Autodesk.AutoCAD.Runtime;
using System;
using System.Runtime.InteropServices;
 
namespace AutoCAD.PInvoke
{
    [Wrapper("OPMPropertyExtension")]
    public class PropertyExtension : RXObject
    {
        protected internal PropertyExtension(System.IntPtr unmanagedPointer, [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.U1)] bool bAutoDelete) : base(unmanagedPointer, bAutoDelete)
        {
        }
 
        internal unsafe OPMPropertyExtension* GetImpObj()
        {
            return (OPMPropertyExtension*)base.get_UnmanagedObject().ToPointer();
        }
 
        public unsafe virtual object GetPropertyManager()
        {
            OPMPropertyExtension* expr_06 = this.GetImpObj();
            IUnknown* value = calli(IPropertyManager* modopt(System.Runtime.CompilerServices.CallConvCdecl)(System.IntPtr), expr_06, *(*(long*)expr_06 + 48L));
            System.IntPtr pUnk = new System.IntPtr((void*)value);
            return System.Runtime.InteropServices.Marshal.GetObjectForIUnknown(pUnk);
        }
 
        public unsafe virtual void SetPropertyManager(object pPropManager)
        {
            IPropertyManager* ptr = (IPropertyManager*)System.Runtime.InteropServices.Marshal.GetIUnknownForObject(pPropManager).ToPointer();
            OPMPropertyExtension* impObj = this.GetImpObj();
            calli(System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl)(System.IntPtr,IPropertyManager*), impObj, ptr, *(*(long*)impObj + 56L));
        }
    }
}
Мне не понятно почему в некоторых методах (и не только) в названии в конце добавляется звездочка (*) А вот такое вообще понять не могу:
using Microsoft.VisualC;
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
[DebugInfoInPDB, MiscellaneousBits(64), System.Runtime.CompilerServices.NativeCppClass]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential, Size = 8)]
internal static struct AcRxClass
{
    private long <alignment member>;
}
Что за private long <alignment member>;?? Visual Studio дико ругается

Решение задачи: «Декомпиляция кода»

textual
Листинг программы
using Autodesk.AutoCAD.Runtime;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5