Декомпиляция кода - 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;