Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40608
  • 博文数量: 21
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-11 18:55
文章分类
文章存档

2013年(1)

2011年(2)

2010年(18)

我的朋友

分类: WINDOWS

2010-12-01 21:31:00

这个函数是虚拟地址转到文件偏移的函数:
DWORD VA2FOffset(LPVOID MapFileBase,DWORD Va)
{
 IMAGE_FILE_HEADER* pehdr = (IMAGE_FILE_HEADER*)((BYTE*)MapFileBase + ((PIMAGE_DOS_HEADER)MapFileBase)->e_lfanew + 4);
 int NumOfSec = pehdr->NumberOfSections;
 LPVOID ppe = (BYTE*)MapFileBase + ((PIMAGE_DOS_HEADER)MapFileBase)->e_lfanew + sizeof(IMAGE_FILE_HEADER)+ 4 + sizeof(IMAGE_OPTIONAL_HEADER);
 IMAGE_SECTION_HEADER *ish;
 int offsetsec=-1;
 for(int i=0;i {
  ish = (IMAGE_SECTION_HEADER*)((BYTE*)ppe + 40*i);
  if(VaVirtualAddress)
  { 
   offsetsec = i-1;
   break;
  }
 }
 if (offsetsec==-1)
 {
  return 0;
 }
 ish = (IMAGE_SECTION_HEADER*)((BYTE*)ppe + 40*offsetsec);
 return Va - ish->VirtualAddress + ish->PointerToRawData;
}
阅读(518) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-02 14:27:09

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com