2014-10-02 67 views
0

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

例如:

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

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

我知道C#与MSIL一起工作,但有没有选择预留物理内存?

为什么我需要这个?那么客户要求我模仿他以前的开发者在功能上和他能找到的每个细节中的库,包括文件大小,名称,版本等等。我向他解释说,任何具有相当知识的人都会发现图书馆是不是原来的,但他坚持要在每一个细节上进行匹配。

我有一个想法,他为什么需要这个,但那是主题。

+0

与资源或其他程序集合并吗? – Mephy 2014-10-02 06:05:38

回答

5

放大您的程序集大小可以添加图像资源(双击resosurces.resx)或添加引用。

我建议你添加一些假的照片,这是:-)

enter image description here

最少最坏的解决方案,例如

enter image description here

+0

我只是添加一个文本文件来填充这是一个非常蹩脚的解决方案,我希望我能知道如何告诉MSIl保留物理大小,但现在这个工作 – ffenix 2014-10-02 06:23:59

5

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

+0

我第二个这个概念。只需制作一个假的位图,添加您需要的大小,并将其添加为嵌入的资源(您可能需要减去一些字节以考虑嵌入资源的代码/填充。) – 2014-10-02 06:19:42

1

从理论上讲,因为NET的DLL的和EXE的是标准PE文件坚持微软PE文件格式

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

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

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

如果一切正常,你可以只写一个简单的控制台应用程序,以PADD通过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函数,然后将其设置为Visual Studio中的后构建事件,该代码在代码完成构建后运行。