实现LoadPE功能

// MyTestPE.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include "winnt.h"
#include <tchar.h>
#include <iostream>
#include <string>

using namespace std;
//本程序实现打印出PE文件的段信息
/
PIMAGE_DOS_HEADER             pDosHeader;
PIMAGE_NT_HEADERS             pPEHeader;
PIMAGE_SECTION_HEADER         pSectionHeader;
PIMAGE_DATA_DIRECTORY         pDataDirectory;
PIMAGE_IMPORT_DESCRIPTOR      pImportDescriptor;
PIMAGE_EXPORT_DIRECTORY       pExportDirectory;
PIMAGE_THUNK_DATA             pThunkData;
PIMAGE_IMPORT_BY_NAME         pImportByName;
//定义了文件结构
int size =1024;
DWORD dwBytesRead=1024;

void GetInfo(string FileName)

 HANDLE  h_File;
 char*   pbuff   =   new   char[size];  
//(LPCTSTR )FileName.c_str(),_T("d://in.txt")
 h_File = CreateFile(_T("d://reverseMe.exe"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); //文件名的转化不懂
    if (h_File==INVALID_HANDLE_VALUE)                                    //这里这样传文件名和路径的时候打开出错,先写死了在说
    {
  cout<<"打开文件失败!";
  system("pause");
  return ;
    }
 else cout<<"文件成功打开!"<<endl;
 if (ReadFile(h_File,pbuff,size,&dwBytesRead,NULL))
 {
  cout<<"读取文件成功!"<<endl;
 }
 else
 {  
  CloseHandle(h_File);           //必须要文件关闭句柄
  cout<<endl<<"成功关闭了文件的句柄!";
  system("pause");
  return;
 }
 //
 //这里放置真正的分析程序;
     pDosHeader = PIMAGE_DOS_HEADER(pbuff);
 if ( pDosHeader->e_magic==IMAGE_DOS_SIGNATURE) //验证DOS头部的正确性。
 {
  cout<<"DOS 头部正确!"<<endl;
       
  pPEHeader=(PIMAGE_NT_HEADERS)(pbuff+pDosHeader->e_lfanew);
  if( pPEHeader->Signature==IMAGE_NT_SIGNATURE)
  {
   cout<<"此文件为PE文件!"<<endl;

   cout<<"PE文件块数:"<<pPEHeader->FileHeader.NumberOfSections<<endl;
   cout<<"文件信息标志:"<<pPEHeader->FileHeader.Characteristics<<endl;
   cout<<"程序入口地址:"<<pPEHeader->OptionalHeader.AddressOfEntryPoint<<endl;
   cout<<"文件创建时间:"<<pPEHeader->FileHeader.TimeDateStamp<<endl;
  }
  else
  {
   cout<<"不为PE文件!"<<endl;
   CloseHandle(h_File);           //必须要文件关闭句柄
   cout<<endl<<"成功关闭了文件的句柄!";
   system("pause");
   return;
  }
 }
 else
 {
  cout<<"DOS 头部不正确"<<endl;
  CloseHandle(h_File);           //必须要文件关闭句柄
  cout<<endl<<"成功关闭了文件的句柄!";
  system("pause");
  return;
 }
 //
    CloseHandle(h_File);           //必须要文件关闭句柄
 cout<<endl<<"成功关闭了文件的句柄!";
}
int main()
{  
 string FileName_in;
 //cout<<"请输入要分析文件的完整路径:";
 //cin>>FileName_in;
 
 GetInfo(FileName_in);   //将要打开的文件的路径传过去
 return 0;
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值