C++ 读取PE文件并十六进制打印输出
2014-02-16 23:42
621 查看
分析PE结构的时候,想自己把里边的结构理解后打印LoadPE分析的东西,在此先把读取PE 结构的C++代码贴出来:
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <fstream>
#define MAX 16*10000
using namespace std;
int value[MAX];
DWORD FileSize()
{
TCHAR szFileName[MAX_PATH]=TEXT("D:\\vs2010\\LoadPE\\Debug\\PE.exe");
HANDLE hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (INVALID_HANDLE_VALUE==hFile)
{
if (0==GetLastError())
{
printf("file not exist");
}
return 0;
}
DWORD dwFileSize = 0;
dwFileSize = GetFileSize(hFile,NULL);
CloseHandle(hFile);
return dwFileSize;
}
int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin("D:\\vs2010\\LoadPE\\Debug\\PE.exe",ios::binary);
if(!fin)
exit(0);
char c;
long i = 0,j = 0;
cout.setf(ios::uppercase);
cout<<setfill('0');
DWORD leng = FileSize();
while((j*16+i)<leng)//while((c=fin.get())!=EOF)
{
c=fin.get();
value[j*16+i] = (((int)c)&0x000000ff);
if(j % 150 == 0)
{
if(i == 0)
cout<<hex<<setw(7)<<j<<"0h: ";
cout<<hex<<setw(2)<<value[j*16+i]<<" ";
if(i++ == 15)
{
cout << endl;
i = 0;
j ++;
}
}
else
{
if(i++ == 15)
{
i = 0;
j ++;
}
}
}
fin.close();
return 0;
}运行结果:
使用LoadPE打开的结果:
我程序中是150行打印一次,因为全部打印的话,输出缓冲区的读写清除等等太慢,既然得到的想要的数据,那么分析就可以进行了,明天分析,哈哈。
参考:
C++格式化输出
C++ 判断文件大小
继续分析可以参考:
C++获取PE文件的入口点
获取PE文件的导出函数列表
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <fstream>
#define MAX 16*10000
using namespace std;
int value[MAX];
DWORD FileSize()
{
TCHAR szFileName[MAX_PATH]=TEXT("D:\\vs2010\\LoadPE\\Debug\\PE.exe");
HANDLE hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (INVALID_HANDLE_VALUE==hFile)
{
if (0==GetLastError())
{
printf("file not exist");
}
return 0;
}
DWORD dwFileSize = 0;
dwFileSize = GetFileSize(hFile,NULL);
CloseHandle(hFile);
return dwFileSize;
}
int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin("D:\\vs2010\\LoadPE\\Debug\\PE.exe",ios::binary);
if(!fin)
exit(0);
char c;
long i = 0,j = 0;
cout.setf(ios::uppercase);
cout<<setfill('0');
DWORD leng = FileSize();
while((j*16+i)<leng)//while((c=fin.get())!=EOF)
{
c=fin.get();
value[j*16+i] = (((int)c)&0x000000ff);
if(j % 150 == 0)
{
if(i == 0)
cout<<hex<<setw(7)<<j<<"0h: ";
cout<<hex<<setw(2)<<value[j*16+i]<<" ";
if(i++ == 15)
{
cout << endl;
i = 0;
j ++;
}
}
else
{
if(i++ == 15)
{
i = 0;
j ++;
}
}
}
fin.close();
return 0;
}运行结果:
使用LoadPE打开的结果:
我程序中是150行打印一次,因为全部打印的话,输出缓冲区的读写清除等等太慢,既然得到的想要的数据,那么分析就可以进行了,明天分析,哈哈。
参考:
C++格式化输出
C++ 判断文件大小
继续分析可以参考:
C++获取PE文件的入口点
获取PE文件的导出函数列表
相关文章推荐
- 示例:Servlet读取文件内容并在页面打印输出
- C++中的文件输入/输出(2):读取文件
- c++ 读取txt文件并输出到控制台
- C++中将打印结果输出到文件中
- C++实现读取文件,输出单词
- C++ 读取PE文件 工具类
- Log(C/C++和Java)->写到Log设备文件 LogCat->读取Log设备文件(LogCat默认输出控制台)
- C/C++中关于文件的读取和输出
- c++ 打印简单log信息,输出内容到某一文件中
- C++ 打印输出日志文件
- c++读取文件目录下所有文件并输出
- C++打印PE文件头信息Demo
- c++ 打印简单log信息,输出内容到某一文件中
- C++ 把输出结果写入文件/从文件中读取数据
- 将文件读取到内存、打印pe结构
- C++打印日志输出文件
- C++ 控制台打印无输出 无法查找或打开PDB文件
- C++打印PE文件头信息Demo
- C++调用GDAL库读取并输出tif文件,并计算斑块面积输出景观指数:CSD
- C++打印PE文件头信息Demo