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

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

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

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

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут