-
-
[已解决]写PE文件区段表时遇到的问题
-
发表于:
2008-6-30 10:15
4852
-
我想写一个PE头修改的程序!
我是用列表视图控件存放区段信息的如图:
在修改完区段信息以后,需要将信息保存到PE文件中!
我是用一个CString类型的变量来存储这个控件信息的!
所以,需要将CString中的信息存放到_IMAGE_SECTION_HEADER的对象中!
因此我写了一个函数,代码如下:
/*
*函数名:CStrtoSec
*功能:将CString中的信息存放到_IMAGE_SECTION_HEADER的对象中!
*参数一 sSection:是存有区段信息的字符串
*参数二 nCount:是区段的数量
*/
_IMAGE_SECTION_HEADER* CPEFrm::CStrtoSec(CString _sSection,int nCount)
{
_IMAGE_SECTION_HEADER* _Section = NULL;
_Section = new _IMAGE_SECTION_HEADER[nCount];
nSectionCount = nCount;
int i = 0;
CString szTemp = "";
CString strTemp = "";
int Temp = 0;
for(int y = 0,x = 0;y < _sSection.GetLength();y++)
{
if('\t' != _sSection.GetAt(y))
szTemp += _sSection.GetAt(y);
else
{
if(x < nCount)
{
switch(i)
{
case 1:
{
for(int i = 0;i < 8;i++)
_Section[x].Name[i] = '\0';
if(szTemp.GetLength() <= 8)
for(int a = 0;a < szTemp.GetLength();a++)
_Section[x].Name[a] = szTemp.GetAt(a);
else
for(int a = 0;a < 8;a++)
_Section[x].Name[a] = szTemp.GetAt(a);
break;
}
case 2: sscanf(szTemp,"%X",&Temp);
_Section[x].VirtualAddress = Temp;
break;
case 3: sscanf(szTemp,"%X",&Temp);
_Section[x].Misc.VirtualSize = Temp;
strTemp.Format(_T("%.8X"),_Section[x].Misc.VirtualSize);
::AfxMessageBox(strTemp);//[COLOR="Red"]这里都可以正确的把虚拟大小给显示出来![/COLOR]
break;
case 4: sscanf(szTemp,"%X",&Temp);
_Section[x].PointerToRawData = Temp;
break;
case 5: sscanf(szTemp,"%X",&Temp);
_Section[x].SizeOfRawData = Temp;
break;
case 6: sscanf(szTemp,"%X",&Temp);
_Section[x].Characteristics = Temp;
_Section[x].Misc.PhysicalAddress = m_SectionTab->Misc.PhysicalAddress;
_Section[x].NumberOfLinenumbers = m_SectionTab->NumberOfLinenumbers;
_Section[x].NumberOfRelocations = m_SectionTab->NumberOfRelocations;
_Section[x].PointerToRelocations = m_SectionTab->PointerToRelocations;
_Section[x].PointerToLinenumbers = m_SectionTab->PointerToLinenumbers;
x++;
break;
default:
{
i = 0;
}
}
szTemp = "";
i++;
}
}
}
//下面这个循环是用来检测VirtualSize中的值是否正确!
for(int b = 0;b < nCount; b++)
{
szTemp.Format(_T("%.8X"),_Section[b].Misc.VirtualSize);
::AfxMessageBox(szTemp);//[COLOR="red"]这里输出的永远都是第一次附给它的值[/COLOR]
}
return _Section;
}
问题是如图:
问题出在哪里了?应该怎么改啊`~~
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!