首页
社区
课程
招聘
[旧帖] [求助]请问MapViewOfFile映射文件与PE装载文件是否不同? 0.00雪花
发表于: 2009-10-20 14:39 3878

[旧帖] [求助]请问MapViewOfFile映射文件与PE装载文件是否不同? 0.00雪花

2009-10-20 14:39
3878
我想问下。MapViewOfFile映射文件。PE文件其实还是以磁盘文件结构映到内存中去?就是以文件对齐方式在内存?
PE加载的。就是以节对齐之后的排列在内存中。

我求证一下。~~那位说说。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
以内存对齐方式
2009-10-20 14:42
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
以内存对齐么?那么MapViewOfFile 返回的是指向文件映射到内存的起始位置,加上+对文件头的偏移
   是指的是什么呢?

============
RVAToOffset PROC uses edi esi edx ecx pFileMap:DWORD,RVA:DWORD
        mov esi,pFileMap
        assume esi:ptr IMAGE_DOS_HEADER
        add esi,[esi].e_lfanew
        assume esi:ptr IMAGE_NT_HEADERS
        mov edi,RVA        ; edi == RVA
        mov edx,esi
        add edx,sizeof IMAGE_NT_HEADERS
        mov cx,[esi].FileHeader.NumberOfSections
        movzx ecx,cx
        assume edx:ptr IMAGE_SECTION_HEADER
        .while ecx>0        ; check all sections
                .if edi>=[edx].VirtualAddress
                        mov eax,[edx].VirtualAddress
                        add eax,[edx].SizeOfRawData
                        .if edi<eax        ; The address is in this section
                                mov eax,[edx].VirtualAddress
                                sub edi,eax        ; edi == difference between the specified RVA and the section's RVA
                                mov eax,[edx].PointerToRawData
                                add eax,edi        ; eax == file offset
                                ret
                        .endif
                .endif
                add edx,sizeof IMAGE_SECTION_HEADER
                dec ecx
        .endw
        assume edx:nothing
        assume esi:nothing
        mov eax,edi
        ret
RVAToOffset endp

=============
ShowTheFunctions proc uses esi ecx ebx hDlg:DWORD, pNTHdr:DWORD
        LOCAL temp[512]:BYTE
        invoke SetDlgItemText,hDlg,IDC_EDIT,0
        invoke AppendText,hDlg,addr buffer
        mov edi,pNTHdr
        assume edi:ptr IMAGE_NT_HEADERS
        mov edi, [edi].OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY].VirtualAddress
        invoke RVAToOffset,pMapping,edi
        mov edi,eax ;文件偏移
        add edi,pMapping ;文件偏移+文件开头
        assume edi:ptr IMAGE_IMPORT_DESCRIPTOR

但是它这里是指向导入表的。若是内存对齐。应指向不了这个表起始位置吧?是否这样?
2009-10-20 14:48
0
游客
登录 | 注册 方可回帖
返回
//