DlgSections.cpp
上传用户:tjjuxin
上传日期:2021-06-01
资源大小:3552k
文件大小:3k
源码类别:

Shell编程

开发平台:

Visual C++

  1. // DlgSections.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SkiиArt.h"
  5. #include "DlgSections.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CDlgSections dialog
  13. CDlgSections::CDlgSections(CWnd* pParent /*=NULL*/, char *pImage)
  14. : CDialog(CDlgSections::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CDlgSections)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. m_pImage = pImage;
  20. }
  21. void CDlgSections::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CDialog::DoDataExchange(pDX);
  24. //{{AFX_DATA_MAP(CDlgSections)
  25. DDX_Control(pDX, IDC_LIST1, m_list);
  26. //}}AFX_DATA_MAP
  27. }
  28. BEGIN_MESSAGE_MAP(CDlgSections, CDialog)
  29. //{{AFX_MSG_MAP(CDlgSections)
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CDlgSections message handlers
  34. BOOL CDlgSections::OnInitDialog() 
  35. {
  36. CDialog::OnInitDialog();
  37. // TODO: Add extra initialization here
  38. m_list.InsertColumn(0, "名称", LVCFMT_LEFT, 80);
  39. m_list.InsertColumn(1, "VOffset", LVCFMT_LEFT, 80);
  40. m_list.InsertColumn(2, "VSize", LVCFMT_LEFT, 80);
  41. m_list.InsertColumn(3, "Roffset", LVCFMT_LEFT, 80);
  42. m_list.InsertColumn(4, "RSize", LVCFMT_LEFT, 80);
  43. m_list.InsertColumn(5, "属性标志", LVCFMT_LEFT, 80);
  44. m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
  45. GetSections(m_pImage);
  46. return TRUE;  // return TRUE unless you set the focus to a control
  47.               // EXCEPTION: OCX Property Pages should return FALSE
  48. }
  49. void CDlgSections::GetSections(char *pImage)
  50. {
  51. PIMAGE_DOS_HEADER pDos = PIMAGE_DOS_HEADER (pImage);
  52. PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS )(pImage + pDos->e_lfanew);
  53. UINT uSectionCount = pNtHeaders->FileHeader.NumberOfSections;
  54. PIMAGE_SECTION_HEADER pFirstSection = (PIMAGE_SECTION_HEADER )(pNtHeaders->FileHeader.SizeOfOptionalHeader + (DWORD)pNtHeaders + sizeof(IMAGE_FILE_HEADER) + sizeof(pNtHeaders->Signature));
  55. char szTemp[100] = {0};
  56. unsigned char *pTemp = NULL;
  57. for (UINT i=0; i<uSectionCount; i++)
  58. {
  59. //set section name
  60. memcpy(szTemp, pFirstSection->Name, 8);
  61. if (strlen(szTemp) == 0)
  62. {
  63. memcpy(szTemp, "No Name", 8);
  64. }
  65. int iListCount = m_list.GetItemCount();
  66. m_list.InsertItem(iListCount, szTemp);
  67. //set address
  68. sprintf(szTemp, "0x%.8X", pFirstSection->VirtualAddress);
  69. m_list.SetItemText(iListCount, 1, szTemp);
  70. sprintf(szTemp, "0x%.8X", pFirstSection->Misc.VirtualSize);
  71. m_list.SetItemText(iListCount, 2, szTemp);
  72. sprintf(szTemp, "0x%.8X", pFirstSection->PointerToRawData);
  73. m_list.SetItemText(iListCount, 3, szTemp);
  74. sprintf(szTemp, "0x%.8X", pFirstSection->SizeOfRawData);
  75. m_list.SetItemText(iListCount, 4, szTemp);
  76. sprintf(szTemp, "0x%.8X", pFirstSection->Characteristics);
  77. m_list.SetItemText(iListCount, 5, szTemp);
  78. pFirstSection++;
  79. }
  80. }