如何在c#中反编译本机
本文关键字:编译 本机 | 更新日期: 2023-09-27 18:01:18
我正在研究一个程序(可执行程序)。我用ILSpy反编译了这个程序。当我查看源代码时,我发现了一个类似于这样的函数:
/ <Module>
[SuppressUnmanagedCodeSecurity]
[MethodImpl(MethodImplOptions.Unmanaged | MethodImplOptions.PreserveSig)]
internal unsafe static extern PointerObject* Function(sbyte*);
没有实现。我怎么拆这个?
具有extern
关键字的方法意味着该方法的实现在某些外部文件中指定。你可以在MSDN文档中阅读更多关于extern
的信息。通常你会看到一个DLLImportAttribute
,它会指定该方法在其中实现的程序集的名称。
MethodImpOptions.Unmanaged
暗示调用是非托管代码(C, c++等),MethodImpOptions.PreserveSig
意味着被调用的方法具有完全相同的方法签名。
除此之外,我不能告诉你太多。
由于这是一个本机调用,因此需要一个本机反汇编器。有很多不同级别的输出可供选择,但您很可能需要对x86汇编和Windows编程有很好的理解,才能从反汇编中获得有用的东西——例如,它与反汇编的c#代码完全不同。
本机代码可能在单独的DLL中,或者在同一程序集中的本机模块中-您需要检查extern
定义指向的位置。
免责声明:在您所在的地方,拆卸和/或使用以这种方式获得的任何知识可能是非法的;