gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:04:40 32 4
gpt4 key购买 nike

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

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

另外,编译器会告诉我类似的事情

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

这是否暗示 VC 试图包含一些调试信息?

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

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

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

最佳答案

Is this a hint that VC tries to include some debug info?

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

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

  • 接口(interface)函数
  • 多态类名

您无法摆脱第一个。使用dll的人一定知道,接口(interface)函数是如何命名的。

但是,您可以禁用第二个。仅当 RTTI 时才需要多态类名已启用。这就是您执行 dynamic_casttypeid 的方式。如果不需要这些功能,可以通过转到 C/C++ -> 语言 -> 启用运行时类型信息并将其设置为否来禁用 RTTI。参见 Remove C++ class names from binary dll file .

编译器将删除所有其他实体的名称。

关于C++ VS2010 将我的代码编译成几乎可读的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16249468/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com