我正在尝试使用可选标头计算 CLI 标头文件偏移量,我手动检查了示例 .NET 程序集,并注意到可选标头为我提供了 CLI 标头的 RVA,即0x2008
CLI 标头的文件偏移量是0x208
。如何计算 RVA 中的文件偏移量?
谢谢。
PE 文件包含一堆节,这些节使用节表(就在可选标头之后)映射到页对齐的虚拟地址。
因此,要阅读 CLI 标头,您可以:
- 使用类似的东西加载库 https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx or 加载库Ex https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179%28v=vs.85%29.aspx将其映射到内存中,然后将 RVA 添加到返回的模块基地址,
- 或者您可以读取节表并使用它来将 RVA 映射到文件位置。
/* pseudo code */
int GetFilePosition(int rva)
{
foreach (var section in Sections)
{
var pos = rva - section.VirtualAddress;
if (pos >= 0 && pos < section.VirtualSize)
{
return pos + section.PointerToRawData;
}
}
Explode();
}
节表的描述见ECMA-335 http://www.ecma-international.org/publications/standards/Ecma-335.htm第二部分第 25.3 节
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)