📄 optionhdrdlg.cpp
字号:
/********************************************************************
Copyright (c) Beijing Feitian Technologies
http://www.FTSafe.com
File : OptionHdrDlg.cpp
Created: 2003/11/04
Author: yihai
Purpose: ?
Revision: ?
*********************************************************************/
// OptionHdrDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PEViewer.h"
#include "OptionHdrDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COptionHdrDlg dialog
COptionHdrDlg::COptionHdrDlg(CPEImageFile& peFile,CWnd* pParent /*=NULL*/)
: CDialog(COptionHdrDlg::IDD, pParent),m_peFile(peFile)
{
//{{AFX_DATA_INIT(COptionHdrDlg)
m_strAddressOfEntryPoint = _T("");
m_strBaseOfCode = _T("");
m_strBaseOfData = _T("");
m_strImageBase = _T("");
m_strSectionAlignment = _T("");
m_strFileAlignment = _T("");
m_strMajorOperatingSystemVersion = _T("");
m_strMinorOperatingSystemVersion = _T("");
m_strMajorImageVersion = _T("");
m_strMinorImageVersion = _T("");
m_strMajorSubsystemVersion = _T("");
m_strMinorSubsystemVersion = _T("");
m_strWin32VersionValue = _T("");
m_strSizeOfImage = _T("");
m_strSizeOfHeaders = _T("");
m_strCheckSum = _T("");
m_strSubsystem = _T("");
m_strDllCharacteristics = _T("");
m_strSizeOfStackReserve = _T("");
m_strSizeOfStackCommit = _T("");
m_strSizeOfHeapReserve = _T("");
m_strSizeOfHeapCommit = _T("");
m_strLoaderFlags = _T("");
m_strNumberOfRvaAndSizes = _T("");
m_strMagic = _T("");
m_strMajorLinkerVersion = _T("");
m_strMinorLinkerVersion = _T("");
m_strSizeOfCode = _T("");
m_strSizeOfInitializedData = _T("");
m_strSizeOfUninitializedData = _T("");
m_strDirAddr = _T("");
m_strDirSize = _T("");
//}}AFX_DATA_INIT
}
void COptionHdrDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COptionHdrDlg)
DDX_Control(pDX, IDC_DATA_DIR, m_ctlDirData);
DDX_Text(pDX, IDC_ADDROFENPT, m_strAddressOfEntryPoint);
DDX_Text(pDX, IDC_BASEOFCODE, m_strBaseOfCode);
DDX_Text(pDX, IDC_BASEOFDATA, m_strBaseOfData);
DDX_Text(pDX, IDC_IMAGEBASE, m_strImageBase);
DDX_Text(pDX, IDC_SECALIGN, m_strSectionAlignment);
DDX_Text(pDX, IDC_FILEALGN, m_strFileAlignment);
DDX_Text(pDX, IDC_MAJOR_OSVER, m_strMajorOperatingSystemVersion);
DDX_Text(pDX, IDC_MINOR_OSVER, m_strMinorOperatingSystemVersion);
DDX_Text(pDX, IDC_MAJOR_IMGVER, m_strMajorImageVersion);
DDX_Text(pDX, IDC_MINOR_IMGVER, m_strMinorImageVersion);
DDX_Text(pDX, IDC_MAJOR_SUBSYSVER, m_strMajorSubsystemVersion);
DDX_Text(pDX, IDC_MINOR_SUBSYSVER, m_strMinorSubsystemVersion);
DDX_Text(pDX, IDC_WIN32VERVAL, m_strWin32VersionValue);
DDX_Text(pDX, IDC_SIZEOFIMAGE, m_strSizeOfImage);
DDX_Text(pDX, IDC_SIZEOFHEADERS, m_strSizeOfHeaders);
DDX_Text(pDX, IDC_CHECKSUM, m_strCheckSum);
DDX_Text(pDX, IDC_SUBSYSTEM, m_strSubsystem);
DDX_Text(pDX, IDC_DLL_CHAR, m_strDllCharacteristics);
DDX_Text(pDX, IDC_SIZEOFSTK, m_strSizeOfStackReserve);
DDX_Text(pDX, IDC_SIZEOFSTACKCMT, m_strSizeOfStackCommit);
DDX_Text(pDX, IDC_SIZEOFHEAP, m_strSizeOfHeapReserve);
DDX_Text(pDX, IDC_SIZEOFHEAPCMT, m_strSizeOfHeapCommit);
DDX_Text(pDX, IDC_LOADERFLAGS, m_strLoaderFlags);
DDX_Text(pDX, IDC_NUMOFRVAANDSIZES, m_strNumberOfRvaAndSizes);
DDX_Text(pDX, IDC_MAGIC, m_strMagic);
DDX_Text(pDX, IDC_MAJOR_LNK_VER, m_strMajorLinkerVersion);
DDX_Text(pDX, IDC_MINOR_LNK_VER, m_strMinorLinkerVersion);
DDX_Text(pDX, IDC_SIZEOFCODE, m_strSizeOfCode);
DDX_Text(pDX, IDC_SIZEOFINITDATA, m_strSizeOfInitializedData);
DDX_Text(pDX, IDC_SIZEOFUNINITDATA, m_strSizeOfUninitializedData);
DDX_Text(pDX, IDC_DATADIR_VIRADDR, m_strDirAddr);
DDX_Text(pDX, IDC_DATADIR_SUBSIZE, m_strDirSize);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COptionHdrDlg, CDialog)
//{{AFX_MSG_MAP(COptionHdrDlg)
ON_CBN_SELCHANGE(IDC_DATA_DIR, OnSelchangeDataDir)
ON_EN_CHANGE(IDC_DATADIR_SUBSIZE, OnChangeDatadirSubsize)
ON_EN_CHANGE(IDC_DATADIR_VIRADDR, OnChangeDatadirViraddr)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COptionHdrDlg message handlers
BOOL COptionHdrDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_strMagic.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.Magic);
m_strMajorLinkerVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorLinkerVersion);
m_strMinorLinkerVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorLinkerVersion);
m_strSizeOfCode.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfCode);
m_strSizeOfInitializedData.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfInitializedData);
m_strSizeOfUninitializedData.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfUninitializedData);
m_strAddressOfEntryPoint.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.AddressOfEntryPoint);
m_strBaseOfCode.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.BaseOfCode);
m_strBaseOfData.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.BaseOfData);
m_strImageBase.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.ImageBase);
m_strSectionAlignment.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SectionAlignment);
m_strFileAlignment.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.FileAlignment);
m_strMajorOperatingSystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorOperatingSystemVersion);
m_strMinorOperatingSystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorOperatingSystemVersion);
m_strMajorImageVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorImageVersion);
m_strMinorImageVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorImageVersion);
m_strMajorSubsystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorSubsystemVersion);
m_strMinorSubsystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorSubsystemVersion);
m_strWin32VersionValue.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.Win32VersionValue);
m_strSizeOfImage.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfImage);
m_strSizeOfHeaders.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeaders);
m_strCheckSum.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.CheckSum);
m_strSubsystem.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.Subsystem);
m_strDllCharacteristics.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.DllCharacteristics);
m_strSizeOfStackReserve.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackReserve);
m_strSizeOfStackCommit.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackCommit);
m_strSizeOfHeapReserve.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapReserve);
m_strSizeOfHeapCommit.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapCommit);
m_strLoaderFlags.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.LoaderFlags);
m_strNumberOfRvaAndSizes.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.NumberOfRvaAndSizes);
m_ctlDirData.SetCurSel(0);
m_strDirSize.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[0].Size);
m_strDirAddr.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[0].VirtualAddress);
for(int i=0;i<IMAGE_NUMBEROF_DIRECTORY_ENTRIES;i++)
m_DataDirectory[i] = m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[i];
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void COptionHdrDlg::UpdateCTX()
{
if(IsWindow(GetSafeHwnd()))
UpdateData();
m_peFile.m_pNtHdr->OptionalHeader.Magic = StrToHex(m_strMagic );
m_peFile.m_pNtHdr->OptionalHeader.MajorLinkerVersion = StrToHex(m_strMajorLinkerVersion );
m_peFile.m_pNtHdr->OptionalHeader.MinorLinkerVersion = StrToHex(m_strMinorLinkerVersion );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfCode = StrToHex(m_strSizeOfCode );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfInitializedData = StrToHex(m_strSizeOfInitializedData );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfUninitializedData = StrToHex(m_strSizeOfUninitializedData );
m_peFile.m_pNtHdr->OptionalHeader.AddressOfEntryPoint = StrToHex(m_strAddressOfEntryPoint );
m_peFile.m_pNtHdr->OptionalHeader.BaseOfCode = StrToHex(m_strBaseOfCode );
m_peFile.m_pNtHdr->OptionalHeader.BaseOfData = StrToHex(m_strBaseOfData );
m_peFile.m_pNtHdr->OptionalHeader.ImageBase = StrToHex(m_strImageBase );
m_peFile.m_pNtHdr->OptionalHeader.SectionAlignment = StrToHex(m_strSectionAlignment );
m_peFile.m_pNtHdr->OptionalHeader.FileAlignment = StrToHex(m_strFileAlignment );
m_peFile.m_pNtHdr->OptionalHeader.MajorOperatingSystemVersion= StrToHex(m_strMajorOperatingSystemVersion );
m_peFile.m_pNtHdr->OptionalHeader.MinorOperatingSystemVersion= StrToHex(m_strMinorOperatingSystemVersion );
m_peFile.m_pNtHdr->OptionalHeader.MajorImageVersion = StrToHex(m_strMajorImageVersion );
m_peFile.m_pNtHdr->OptionalHeader.MinorImageVersion = StrToHex(m_strMinorImageVersion );
m_peFile.m_pNtHdr->OptionalHeader.MajorSubsystemVersion = StrToHex(m_strMajorSubsystemVersion );
m_peFile.m_pNtHdr->OptionalHeader.MinorSubsystemVersion = StrToHex(m_strMinorSubsystemVersion );
m_peFile.m_pNtHdr->OptionalHeader.Win32VersionValue = StrToHex(m_strWin32VersionValue );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfImage = StrToHex(m_strSizeOfImage );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeaders = StrToHex(m_strSizeOfHeaders );
m_peFile.m_pNtHdr->OptionalHeader.CheckSum = StrToHex(m_strCheckSum );
m_peFile.m_pNtHdr->OptionalHeader.Subsystem = StrToHex(m_strSubsystem );
m_peFile.m_pNtHdr->OptionalHeader.DllCharacteristics = StrToHex(m_strDllCharacteristics );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackReserve = StrToHex(m_strSizeOfStackReserve );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackCommit = StrToHex(m_strSizeOfStackCommit );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapReserve = StrToHex(m_strSizeOfHeapReserve );
m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapCommit = StrToHex(m_strSizeOfHeapCommit );
m_peFile.m_pNtHdr->OptionalHeader.LoaderFlags = StrToHex(m_strLoaderFlags );
m_peFile.m_pNtHdr->OptionalHeader.NumberOfRvaAndSizes = StrToHex(m_strNumberOfRvaAndSizes );
for(int i=0;i<IMAGE_NUMBEROF_DIRECTORY_ENTRIES;i++)
m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[i] = m_DataDirectory[i];
}
void COptionHdrDlg::OnSelchangeDataDir()
{
int iIndex = m_ctlDirData.GetCurSel();
m_strDirSize.Format("%X",m_DataDirectory[iIndex].Size);
m_strDirAddr.Format("%X",m_DataDirectory[iIndex].VirtualAddress);
UpdateData(FALSE);
}
void COptionHdrDlg::OnChangeDatadirSubsize()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData();
int iIndex = m_ctlDirData.GetCurSel();
m_DataDirectory[iIndex].Size = StrToHex(m_strDirSize);
}
void COptionHdrDlg::OnChangeDatadirViraddr()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData();
int iIndex = m_ctlDirData.GetCurSel();
m_DataDirectory[iIndex].VirtualAddress = StrToHex(m_strDirAddr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -