首页
社区
课程
招聘
求AlignSize的详细介绍
发表于: 2010-5-25 13:48 5001

求AlignSize的详细介绍

2010-5-25 13:48
5001
《加密解密3》16章 P444页有这样的代码:
        // 读DOS头
        ReadFile(hFile,&dosHeader, sizeof(dosHeader), &NumberOfBytesRW, NULL);

        // 定位到PE头起始处e_lfanew
        SetFilePointer(hFile,dosHeader.e_lfanew,  NULL,  FILE_BEGIN);
        // 读出PE头
        ReadFile(hFile,&ntHeaders, sizeof(ntHeaders), &NumberOfBytesRW, NULL);

        // 获取文件大小等信息
        nFileSize     = GetFileSize(hFile,NULL);
        nSectionNum   = ntHeaders.FileHeader.NumberOfSections;
        nImageSize    = ntHeaders.OptionalHeader.SizeOfImage;
        nFileAlign    = ntHeaders.OptionalHeader.FileAlignment;
        nSectionAlign = ntHeaders.OptionalHeader.SectionAlignment;
        nHeaderSize   = ntHeaders.OptionalHeader.SizeOfHeaders;

        // 修正可能存在的映象大小没有对齐的情况************************
        m_nImageSize = AlignSize(nImageSize, nSectionAlign);//****
         //*********************************************************
        
        // 申请内存用于保存映象
        m_pImageBase = new char[m_nImageSize];
…………………………………………………………………………………………………………
请教加红字体是怎么对齐内存的,对齐的是哪断内存?(最好有AlignSize的资料)

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DWORD AlignData(DWORD dwSize,DWORD dwAlign)
{
return (dwSize+dwAlign-1) / dwAlign * dwAlign;   
}

这个函数是自己定义的
2010-5-25 14:11
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
明白了,谢谢!它的作用就是完成下面解释中的 最后一个块根据其大小往上取整。 对吧?
-------------------------------
m_nImageSize = AlignSize(nImageSize, nSectionAlign);其中  
nImageSize 是映像装入内存后的总大小,从装入文件的Image Base到最后一个块的大小 。最后一个块根据其大小往上取整。

nSectionAlign 是内存中区块对齐大小。x86是4KB(1024*4 = 4096 bit)

m_nImageSize 是实际需要申请的内存大小。
2010-5-25 14:21
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不知道我上面想的对不对,如果正确就可以结贴啦!
2010-5-25 14:24
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢2楼!
结贴。
2010-5-25 14:30
0
游客
登录 | 注册 方可回帖
返回
//