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

tmi*_*hty 4 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中的所有函数.我希望我能解释清楚.

Mik*_*ail 5

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

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

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

  • 接口功能
  • 多态类名

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

但是,您可以禁用第二个.只有在启用RTTI时才需要多态类名称.这就是你如何做的dynamic_casttypeid.如果您不需要这些功能,可以通过转到C/C++ - >语言 - >启用运行时类型信息并将其设置为否来禁用RTTI.请参阅从二进制dll文件中删除C++类名.

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

  • 例如,参见http://blogs.msdn.com/b/peterrosser/archive/2006/02/22/exporteddllfunctions.aspx (2认同)