- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
从磁盘位置读取 PE 文件时,我需要将 RVA(从 pdb 文件获取的相对虚拟地址)映射到 PE 文件 (EXE) 偏移量。为此,我需要将 RVA 转换为文件偏移量,以便我可以从该位置读出 GUIDS(CLSID,IID's)。
问候乌斯曼
最佳答案
template <class T> LPVOID GetPtrFromRVA(
DWORD rva,
T* pNTHeader,
PBYTE imageBase ) // 'T' = PIMAGE_NT_HEADERS
{
PIMAGE_SECTION_HEADER pSectionHdr;
INT delta;
pSectionHdr = GetEnclosingSectionHeader( rva, pNTHeader);
if ( !pSectionHdr )
return 0;
delta = (INT)(pSectionHdr->VirtualAddress-pSectionHdr->PointerToRawData);
return (PVOID) ( imageBase + rva - delta );
}
template <class T> PIMAGE_SECTION_HEADER GetEnclosingSectionHeader(
DWORD rva,
T* pNTHeader) // 'T' == PIMAGE_NT_HEADERS
{
PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(pNTHeader);
unsigned i;
for ( i=0; i < pNTHeader->FileHeader.NumberOfSections; i++, section++ )
{
// This 3 line idiocy is because Watcom's linker actually sets the
// Misc.VirtualSize field to 0. (!!! - Retards....!!!)
DWORD size = section->Misc.VirtualSize;
if ( 0 == size )
size = section->SizeOfRawData;
// Is the RVA within this section?
if ( (rva >= section->VirtualAddress) &&
(rva < (section->VirtualAddress + size)))
return section;
}
return 0;
}
应该做的伎俩...
关于c++ - 我们如何将一个位置的 RVA(相对虚拟地址)映射到 PE 文件偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524837/
我在使用 Win32 NT header 时遇到问题,因为它给我的导入名称提供了奇怪的 RVA。这是给我问题的相关代码: //Get a pointer to the import table PIM
相对虚拟地址和相对于文件基址的偏移有什么区别? 最佳答案 RVA是相对虚拟地址,即与首选基地址的距离。首选基地址在 PE header 中说明,并且是当可执行文件加载到内存中时内存中图像开始的(首选)
我正在尝试读取 PE 文件。 问题是数据使用 RVA 指针,而我需要在文件中偏移 得到我需要的东西。 如何将 RVA 转换为文件中的偏移量? 最佳答案 要通过 RVA 确定文件偏移量,您需要: 确定在
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我目前正在编写 PE 解析器/加载器。我已经使用标准 c 文件 io 成功地将 PE 文件加载到内存中,检索到有效的 DOS 和 PE header (可选 header )以及获得对 PE 部分的访
Microsoft's documentation对于 PE 可选 header 标准字段(第 25.2.3.1 节)中的“入口点 RVA”字段,该字段应为: RVA of entry point,
A file that is given as input to the linker is called Object File. The linker produces an Image file
我已经成功构建了一个基本的 JAVA 反汇编器,仅仅是因为已经构建的开源反汇编器(pecoff4j 及其分支)尽管非常出色但没有帮助。我已经设法解析所有 PE header ,将其与 Lord PE
从磁盘位置读取 PE 文件时,我需要将 RVA(从 pdb 文件获取的相对虚拟地址)映射到 PE 文件 (EXE) 偏移量。为此,我需要将 RVA 转换为文件偏移量,以便我可以从该位置读出 GUIDS
我正在使用 sounddevice 录制音频,我想通过 pygame 通过虚拟音频线播放它,我一直收到此错误 Exception has occurred: error mpg123_seek: In
我一直在网上搜寻这个问题的答案,但似乎没有找到答案。在提出这个问题之前,我查阅了以下资料。 http://www.csn.ul.ie/~caolan/publink/winresdump/winres
我是一名优秀的程序员,十分优秀!