gpt4 book ai didi

.net - 在每个文件的 list 中可以在哪里看到哈希值?

转载 作者:行者123 更新时间:2023-12-04 05:55:40 25 4
gpt4 key购买 nike

这是来自 Jeffrey Richter 的 CLR 通过 C# 书的引用:

“当你构建一个强命名程序集时,程序集的
FileDef list 元数据表包括组成程序集的所有文件的列表。
随着每个文件的名称被添加到 list 中,文件的内容被散列,并且这个散列
值与文件名一起存储在 FileDef 表中。”

问题:
你能解释一下每个文件(我的理解是引用程序集+资源)是否被散列,如果每个文件的散列值存储在 list 中,我在哪里/如何在 list 中找到/查看这些散列值?

当我打开 list 时,我无法为我拥有的示例程序集找到它。我只在 .assembly ConsoleTests {...} 下看到程序集信息

最佳答案

对于组成程序集的所有文件,作者的意思是 netmodule s,不是引用的程序集。

如果程序集只包含它自己的单个文件,FileDef表将是空的。
如果您尝试构建由多个模块组成的程序集,您将能够在 list 中看到哈希值。试试这个:

(1)创建三个源文件(三个模块):

// module1.cs
namespace MultiModuleAssembly
{
public class Class1 { }
}

// module2.cs
namespace MultiModuleAssembly
{
public class Class2 { }
}

// main.cs
namespace MultiModuleAssembly
{
public class Program
{
public static void Main(string[] args)
{
Class1 c1 = new Class1();
Class2 c2 = new Class2();
}
}
}

(2) 将每个文件编译成 .netmodule :
csc /t:module module1.cs
csc /t:module module2.cs
csc /t:module main.cs /addmodule:module1.netmodule /addmodule:module2.netmodule

(3) 用 key 对主模块进行签名:
al main.netmodule /keyfile:key.snk /out:main-signed.dll

(4) 打开 main-signed.dllildasm ,然后双击 M A N I F E S T节点:
// Somewhere in the middle of the listing
.file main.netmodule
.hash = (89 84 FB F2 BB 72 AA 13 44 76 A5 49 8F 13 99 3E // .....r..Dv.I...>
54 30 24 84 ) // T0$.

关于.net - 在每个文件的 list 中可以在哪里看到哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9545125/

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