如何在c#中反编译本机

本文关键字:编译 本机 | 更新日期: 2023-09-27 18:01:18

我正在研究一个程序(可执行程序)。我用ILSpy反编译了这个程序。当我查看源代码时,我发现了一个类似于这样的函数:

/ <Module>
[SuppressUnmanagedCodeSecurity]
[MethodImpl(MethodImplOptions.Unmanaged | MethodImplOptions.PreserveSig)]    
internal unsafe static extern PointerObject* Function(sbyte*);

没有实现。我怎么拆这个?

如何在c#中反编译本机

具有extern关键字的方法意味着该方法的实现在某些外部文件中指定。你可以在MSDN文档中阅读更多关于extern的信息。通常你会看到一个DLLImportAttribute,它会指定该方法在其中实现的程序集的名称。

MethodImpOptions.Unmanaged暗示调用是非托管代码(C, c++等),MethodImpOptions.PreserveSig意味着被调用的方法具有完全相同的方法签名。

除此之外,我不能告诉你太多。

由于这是一个本机调用,因此需要一个本机反汇编器。有很多不同级别的输出可供选择,但您很可能需要对x86汇编和Windows编程有很好的理解,才能从反汇编中获得有用的东西——例如,它与反汇编的c#代码完全不同。

本机代码可能在单独的DLL中,或者在同一程序集中的本机模块中-您需要检查extern定义指向的位置。

免责声明:在您所在的地方,拆卸和/或使用以这种方式获得的任何知识可能是非法的;