“〜”中的排序位向量字段的目的是什么? .NET程序集中的元数据头?

StackOverflow https://stackoverflow.com/questions/1619614

  •  06-07-2019
  •  | 
  •  

根据Partition II元数据,它说有效字段是一个位掩码,用于指出.NET可执行文件中存在哪些CLR元数据表 - 但我无法弄清楚的是“已排序”的内容。字段是为了什么 - 它的意义是什么,以及在创建我自己的.NET可移植可执行映像时我应该在这个字段中发出什么?

有帮助吗?

解决方案

我认为排序字段只是暗示特定元数据表是否已排序(它是一个有效的位域)。

这将允许实现运行时直接从memmapped数据对表进行二进制搜索。

其他提示

编辑:这不是一个答案,我误解了问题是关于有效字段而不是排序字段,但我将它留在这里,以防它与答案相关

“有效”您正在谈论的字段在分区II ,#167; 24.2.6,相关部分如下:

  

有效字段是64位位向量,它为存储在流中的每个表设置了特定的位;表格到索引的映射在§ 22的开头给出。例如,当逻辑元数据中存在DeclSecurity表时,应在有效向量中设置位0x0e。在Valid中包含不存在的表是无效的,因此0x2c以上的所有位都应为零。

以&#167; 22.2开头的第22节的每个子节描述一个表,并给出其位索引。例如,&#167; 22.2标题为“Assembly:0x20”。这意味着,当且仅当您的PE中存在&#167; 22.2中描述的汇编表时,必须在 Valid 字段中设置位0x20。请注意, NOT 表示 Valid&amp; 0x20 == 0x20 ,这意味着必须设置 Valid 的第0x20位(即第32位),也就是说 Valid&amp; (1&lt;&lt;&lt; 0x20)==(1&lt; <0x20)

有一段时间我不确定它是0索引还是1索引,所以我假设0索引。但我现在肯定知道它是0索引的,因为Module表是表0x00。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top