Chinaunix首页 | 论坛 | 博客

=.=

  • 博客访问: 139334
  • 博文数量: 50
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 550
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-25 17:22
文章分类

全部博文(50)

文章存档

2010年(7)

2009年(43)

我的朋友

分类: WINDOWS

2010-04-29 09:13:51

了解一点PE文件的同学因该都知道的,不解释啦:


ULONG RVA2Offset(PIMAGE_NT_HEADERS pNtHeader, ULONG ulRVA)
{
    PIMAGE_SECTION_HEADER pSection = (PIMAGE_SECTION_HEADER)((ULONG)pNtHeader + sizeof(IMAGE_NT_HEADERS));
    ULONG i = 0;

    for( i = 0; i < pNtHeader->FileHeader.NumberOfSections; i++)
    {
        if(ulRVA >= pSection[i].VirtualAddress && ulRVA < (pSection[i].VirtualAddress + pSection[i].SizeOfRawData))
        {
            return pSection[i].PointerToRawData + (ulRVA - pSection[i].VirtualAddress);
        }
    }

    return 0;
}

ULONG Offset2RVA( PIMAGE_NT_HEADERS pNtHeader, ULONG ulOffset )
{
    PIMAGE_SECTION_HEADER pSection = (PIMAGE_NT_HEADERS)( (ULONG)pNtHeader + sizeof(IMAGE_NT_HEADERS) );
    ULONG i = 0;

    for ( i = 0; i < pNtHeader->FileHeader.NumberOfSections; i++ )
    {
        if ( ulOffset >= pSection[i].PointerToRawData && ulOffset < pSection[i].PointerToRawData + pSection[i].Misc.VirtualSize )
        {
            return pSection[i].VirtualAddress + ( ulOffset - pSection[i].PointerToRawData );
        }
    }

    return 0;
}


阅读(1409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~