-
-
[求助]如何使用RVA获得FileOffSet值
-
发表于:
2010-3-18 20:29
4798
-
问个简单的问题, 现用CreateFile()函数打开一个PE文件, 已经获得了IMAGE_IMPORT_DESCRIPTOR 结构, 得到了Name1字段的RVA值, 现想用ReadFile()函数读取文件名, 也就是要获取文件偏移地址, 下面是我写的, 但是不知道为什么数据会读不出来...
DWORD GetReadStart(DWORD * VirtualAddress)
{
int readnum = 0;
int lasterror = 0;
int OffSize = 0;
OffSize = HeadersSize - fileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER); //HeaderSize是整个文件头的大小
SetFilePointer(hFile, OffSize, NULL, FILE_BEGIN);//将文件指针设置到第一个节表处
for (int i = 1; i <= fileHeader.NumberOfSections; i ++)
{
if (ReadFile(hFile, m_psecHeader, sizeof(IMAGE_SECTION_HEADER), (LPDWORD)&readnum, NULL))
{
if ((*VirtualAddress) >= m_psecHeader->VirtualAddress &&
(*VirtualAddress) < (m_psecHeader->VirtualAddress + m_psecHeader->SizeOfRawData))
return m_psecHeader->PointerToRawData + (*VirtualAddress) - m_psecHeader->VirtualAddress;
}
else
{
MessageBox(GetActiveWindow(), TEXT("Can't read section header"), NULL, MB_OK);
return FALSE;
}
}
MessageBox(GetActiveWindow(), TEXT("Can't find section"), NULL, MB_OK);
return 0;
}
下面是调用该函数
//ImportDescriptor是一个IMAGE_IMPORT_DESCRIPTOR结构.
ReadStart = GetReadStart(&ImportDescriptor.Name);
SetFilePointer(hFile, ReadStart, NULL, FILE_BEGIN);
//len = strlen(szTemp);
if (!ReadFile(hFile, &szTemp[strlen(szTemp)], 20, (LPDWORD)&readnum, NULL))
现ReadFile()函数的返回值为1, 想不明白是咋回事啊
还望哪位大虾赐教下..
[课程]Android-CTF解题方法汇总!