C ++ .Net程序集可以轻松反编译吗?

时间:2013-07-28 21:52:13

标签: c++ .net c++-cli native-code .net-reflector

我知道所有的程序集都可以以某种方式反编译,但C#& VB应用程序最容易使用(.Net Reflector)等工具反编译成源代码。

所以我的问题是,如果我使用.Net程序集和函数使用C ++对应用程序进行编程,是否可以像使用.Net反射器和这样的工具一样对C#或VB应用程序进行反编译? 好的,如果我在没有使用.Net框架的任何功能的情况下对其进行编程,并且只使用了调用.Net程序集的UI,那么它也会很容易减少吗?

我的问题与此类似:Could this C++ project be decompiled with such tools like a .NET Reflector? 但没有人正确回答他,所以有人可以帮助我吗?

我想使用.Net和C ++将我的应用程序编译成Native和amp;托管代码!

1 个答案:

答案 0 :(得分:7)

没有“C ++。Net”。有C ++ / CLI,它是一种类似C ++的语言,可用于将本机C ++代码与.NET世界粘合在一起。您在其中编写的托管代码(ref类)将编译为MSIL。 “本机”代码将编译为MSIL或本机代码。如果要将某些部分编译为本机代码,则需要

#pragma managed(push, off)

void foo() {}

#pragma managed(pop)

在您的来源中。 managed pragma可用于选择每个函数的编译目标。或者,您可以在每个模块没有/clr标志的情况下进行编译,并将项目设置为生成混合模式程序集。

请注意,将本机类型编组到.NET并返回可能会严重影响应用程序 - 每次跨越本机管理的边界时都会发生这种情况。但是,这种嵌入式本机代码和托管代码之间的互操作比正常的p / invoke快得多。

另请参阅此问题:C++CLI. Are native parts written in pure C++ but compiled in CLI as fast as pure native C++?