DWORD RvaToOffset(PBYTE pMapping, DWORD dwRva)
{
IMAGE_DOS_HEADER *pidh = (IMAGE_DOS_HEADER *)pMapping;
IMAGE_NT_HEADERS *pinh = (IMAGE_NT_HEADERS *)(pMapping + pidh->e_lfanew);
IMAGE_SECTION_HEADER *pish = (IMAGE_SECTION_HEADER *)((PBYTE)pinh + sizeof(IMAGE_NT_HEADERS));
WORD nSections = pinh->FileHeader.NumberOfSections;
for (int i = 0; i < nSections; ++i)
{
if ((dwRva >= pish[i].VirtualAddress) && (dwRva <= pish[i].VirtualAddress + pish[i].SizeOfRawData))
{
return pish[i].PointerToRawData + (dwRva - pish[i].VirtualAddress);
}
}
return -1;
}
RvaToOffset 函数实现
最新推荐文章于 2023-04-21 10:54:48 发布