Декомпиляция кода - 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д