c++ VS2010将我的代码编译为几乎可读的代码

C++ VS2010 compiles my code to nearly readable code

本文关键字:代码 编译 VS2010 我的 c++      更新时间:2023-10-16

我尝试使用反编译器"破解"我自己的应用程序。我可以清楚地看到函数名和许多参数名。

因此,我认为我以某种方式用我的代码编译调试信息,尽管它被设置为释放。

此外,编译器告诉我诸如

之类的东西

mylib.lib(vq.obj): warning LNK4099: PDB "vc100. obj "没有找到"mylib.lib(vq.obj)"或"M:myappReleasevc100.pdb";对象将被链接,如果没有调试信息可用。

这是一个暗示,VC试图包括一些调试信息?

另外,我的解决方案由3个项目组成,产生3个编译后的dll。

当我"破解"3个dll中的一个时,我可以看到其中另外2个dll的函数名。我不知道为什么。

有人能告诉我如何使dll更不可调试,以及如何"使用"只有dll中的dll函数,而不是1个dll中的所有函数。我希望我能解释清楚。

这是一个暗示,VC试图包括一些调试信息?

是的,它实际上意味着你正在链接你的dll与调试信息。您可以通过将link -> Debugging -> Generate Debug Info设置为No来关闭它。但是,请注意,此选项不会(大约)影响您的dll文件,但它会切换生成pdb文件。

有两种类型的实体,它们的名称将显式地存储在dll文件中:

  • 接口功能
  • 多态类名

你不能摆脱第一个。任何使用dll的人都必须知道接口函数是如何命名的。

但是,您可以禁用第二个。只有在启用RTTI时,才需要多态类名。这就是计算dynamic_casttypeid的方法。如果您不需要这些特性,您可以通过C/c++ ->语言->启用运行时类型信息并将其设置为No来禁用RTTI。参见从二进制dll文件中删除c++类名。