我的 dll 中没有资源。但为啥我的 dll 中的 .rdata 部分如此之大? [关闭]

Posted

技术标签:

【中文标题】我的 dll 中没有资源。但为啥我的 dll 中的 .rdata 部分如此之大? [关闭]【英文标题】:There's no resource in my dll. But why the .rdata part in my dll is so big? [closed]我的 dll 中没有资源。但为什么我的 dll 中的 .rdata 部分如此之大? [关闭] 【发布时间】:2017-03-04 15:44:50 【问题描述】:

我正在尝试使我的 dll 更小,因为它更大一些。 我使用了dumpbin。这是结果。 总结

   19000 .data
  195000 .rdata
   21000 .reloc
  2C3000 .text

我认为这是一个问题,因为我认为 .rdata 部分包含 dll 文件的资源。但我没有向我的 dll 中添加任何资源。

【问题讨论】:

为什么会有问题?你有任何 const 全局变量吗?您提供的信息很少。 您确实应该添加更多信息,可能是您正在使用的内容,以及一些提示;否则这只是猜测。 我认为这是一个问题,因为我认为 .rdata 部分包含 dll 文件的资源。但我没有向我的 dll 中添加任何资源。 我正在尝试使我的 dll 更小,因为它有点大。 可能是监控程序。每当我在 windows10 上的 msvs2015community 上编译一个程序时,它会与某个地方联系,我拔下以太网电缆,它会给出网络错误,而我写的只是 a=1+1 【参考方案1】:

.rdata 不仅仅用于资源(如果资源是指 Windows 资源,如字符串、图标、清单等)。 .rdata 还包含任何常量数据。考虑一个只有这个的 dll:

static const int j[2000];

__declspec(dllexport) const int* foo()

    return j;

j 实际上会被放置在.rdata 中(如果您使用大小,您会注意到在dumpbin /SECTION:.rdata 的输出中size of raw data 行中的更改是如何可见的。因此请检查您的程序大的常量变量也是如此。

【讨论】:

【参考方案2】:

除了 Rudolfs 关于源代码检查的建议外,您还可以使用 ResourceHacker 或类似实用程序反汇编 DLL,并验证 .rdata 大小是否合理。

【讨论】:

谢谢。我试试看。

以上是关于我的 dll 中没有资源。但为啥我的 dll 中的 .rdata 部分如此之大? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的项目引用指向“obj”目录中的 dll?

C#项目中如何调用C#写的dll中的资源文件,如 xml文件

为啥有的dll里没有导出函数?

为啥我的 C# 和 C++ dll 表现出不同的行为?

dll中的资源字符串在程序中加载后不完全可见

为啥我的 Visual Studio 2013 项目需要 mfc100.dll?