C ++ VS2010将我的代码编译成几乎可读的代码

时间:2013-04-27 07:20:39

标签: c++ windows visual-studio-2010

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

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

此外,编译器会告诉我类似

的内容

mylib.lib(vq.obj):警告LNK4099:在“mylib.lib(vq.obj)”或“M:\ myapp \ Release \ vc100.pdb”中找不到PDB“vc100.pdb”;对象将被链接,就好像没有可用的调试信息一样。

这是否提示VC尝试包含一些调试信息?

此外,我的解决方案包含3个项目,以编译形式生成3个dll。

当我“破解”3个dll中的一个时,我可以看到其中2个dll的功能名称。 我不知道为什么。

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

1 个答案:

答案 0 :(得分:5)

  

这是否提示VC尝试包含一些调试信息?

是的,它实际上意味着您将dll与调试信息相关联。您可以通过设置链接器 - >来禁用它。调试 - >生成调试信息为否。但是,请注意,此选项不会(大致)影响您的dll文件,但会切换pdb文件的生成。

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

  • 界面功能
  • 多态类名称

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

但是,您可以禁用第二个。只有在启用RTTI时才需要多态类名称。这就是你正在做的dynamic_casttypeid。如果您不需要这些功能,可以通过转到C / C ++来禁用RTTI - >语言 - >启用运行时类型信息并将其设置为否。请参阅Remove C++ class names from binary dll file

所有其他实体的名称将被编译器剥离。