首页
社区
课程
招聘
[已解决]写PE文件区段表时遇到的问题
发表于: 2008-6-30 10:15 4852

[已解决]写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;
}

问题是如图:

问题出在哪里了?应该怎么改啊`~~

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 431
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
_Section[x].Misc.PhysicalAddress = m_SectionTab->Misc.PhysicalAddress;

你为什么赋值?
m_SectionTab你根本就没偏移!
2008-6-30 11:12
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=kcynic;473814]_Section[x].Misc.PhysicalAddress = m_SectionTab->Misc.PhysicalAddress;

你为什么赋值?
m_SectionTab你根本就没偏移![/QUOTE]

谢谢指教哦,我怎么就这么笨哦`~~`
问题解决了!
2008-6-30 11:27
0
游客
登录 | 注册 方可回帖
返回
//