-
-
[己解决]关于第15章,区块合并有出入?
-
2009-6-2 17:41
5916
-
BOOL MergeSection()
{
UINT nSectionNum = 0;
PIMAGE_SECTION_HEADER psecHeader = m_psecHeader;
UINT nspareSize=NULL;
UINT nMergeVirtualSize =0;
try
{
//区块数
nSectionNum = m_pntHeaders->FileHeader.NumberOfSections;
//.code,.rdata,.data,.idata
for (UINT nIndex = 0; nIndex < nSectionNum; nIndex ++, psecHeader ++)
{
if ((m_psecHeader->Characteristics & IMAGE_SCN_MEM_SHARED) != 0)//共享区块不融合
break;
if ((strcmp((char *)psecHeader->Name, ".edata") == 0))
break;
if ((strcmp((char *)psecHeader->Name, ".rsrc") == 0))
break;
nMergeVirtualSize += psecHeader->Misc.VirtualSize;
}
//所有能压缩的区块合并成一个区块
m_psecHeader->Misc.VirtualSize = nMergeVirtualSize;
m_pntHeaders->FileHeader.NumberOfSections = nSectionNum - nIndex+1;// 现在的区块数
//(nIndex+1)*sizeof(IMAGE_SECTION_HEADER)//;剩余区块表的长度
memcpy(m_psecHeader+1,psecHeader,(nSectionNum - nIndex)*sizeof(IMAGE_SECTION_HEADER));//将剩余的区块移前
nspareSize=(nSectionNum - m_pntHeaders->FileHeader.NumberOfSections)*sizeof(IMAGE_SECTION_HEADER);//多余区块长度
//这一句m_psecHeader这就是多合并之后的块,为什么把其清零了,还+nSectionNum - nIndex+1这几个字节?
memset(m_psecHeader+nSectionNum - nIndex+1,0,nspareSize);
}
catch (...)
{
return FALSE;
}
return TRUE;
}
//这一句m_psecHeader这就是多合并之后的块,为什么把其清零了,还+nSectionNum - nIndex+1这几个字节?
memset(m_psecHeader+nSectionNum - nIndex+1,0,nspareSize);
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课