【问题标题】:How to Increase C# assembly size?如何增加 C# 程序集的大小?
【发布时间】:2014-10-02 06:03:30
【问题描述】:

我有一个类库项目,其磁盘大小为 14,0 KB。是否可以通过添加垃圾字节来增加程序集文件的大小?

例如:

private byte[] junk = new byte[1500];

将在内存中分配 1500 个字节,但我希望它们保留在任何 PE 模块部分(如 .data 部分)中。

我知道 C# 可以与 MSIL 一起使用,但有没有保留物理内存的选项?。

为什么我需要这个?一个客户要求我模仿他从以前的开发人员那里得到的一个库,在功能和他能找到的每一个细节上,包括文件大小、名称、版本等。我向他解释说,任何有足够知识的人都会发现这个库是不是原版,但他坚持在每个细节上都匹配。

我知道他为什么需要这个,但那不是主题。

【问题讨论】:

  • 可能与资源或其他程序集合并?

标签: c# .net visual-studio dll


【解决方案1】:

要扩大您的程序集大小,可以将图像添加到资源中(双击 resosurces.resx)或添加参考。

我建议你添加一些假图片,这是最不坏的解决方案:-)

例如

【讨论】:

  • 我只是添加一个文本文件来填充所需文件并将其标记为嵌入式资源。这是一个非常蹩脚的解决方案,我希望我能知道如何告诉 MSIl 保留物理尺寸。但现在这可行
【解决方案2】:

最简单的方法可能是添加嵌入式资源。

【讨论】:

  • 我支持这个概念。只需制作一个添加所需大小的假位图并将其添加为嵌入资源(您可能需要减去一些字节以说明嵌入资源的代码/填充。
【解决方案3】:

理论上,由于 .Net Dll 和 Exe 是遵循 microsoft PE 文件格式的标准 PE 文件

http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/pecoff.doc

您应该能够只在文件末尾填充 0 个字节,因为规范涉及使用块大小和指针偏移量,因此在加载时不考虑文件末尾并将 0 个字节附加到在不修改任何大小或偏移量的情况下结束它应该不会影响 dll 的加载/引用。

不过,这只是一个理论。我没有尝试/测试过这个。

如果可行,您可以编写一个简单的控制台应用程序将文件填充 x 0 字节,类似于

Console.Write("Enter File Name To Pad: ");
string fileName = Console.ReadLine();
Console.Write("Enter Number of Bytes to Pad: ");
int bytesToPad = Int.Parse(Console.ReadLine());
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.None))
{
    byte[] emptyBytes = new byte[bytesToPad];
    fs.Write(emptyBytes, 0, emptyBytes.Length);
}

如果可行,您可以修改它以从传递给 Main 函数的 args 中获取文件名和字节,然后将其设置为 Visual Studio 中的构建后事件,该事件在代码构建完成后运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2017-09-05
    • 2012-07-01
    • 2018-05-07
    • 1970-01-01
    • 2015-08-14
    • 2016-04-23
    相关资源
    最近更新 更多