Декомпиляция кода - C#
Формулировка задачи:
Всем привет. Есть dll, которую нужно декомпилировать и взять оттуда код. Ничего противозаконного =)
Использую программы JetBrains DotPeek и ILSpy. В общих чертах то, что мне нужно (что относится чисто к C#) у меня получается выдернуть, но есть некоторые моменты которые я просто не пойму. Вот пример:
Через JetBrains DotPeek
Через ILSpy
Мне не понятно почему в некоторых методах (и не только) в названии в конце добавляется звездочка (*)
А вот такое вообще понять не могу:
Что за private long <alignment member>;?? Visual Studio дико ругается
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); } } }
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>; }
Решение задачи: «Декомпиляция кода»
textual
Листинг программы
using Autodesk.AutoCAD.Runtime;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д