⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 section.cpp

📁 一个用BCB写的壳!
💻 CPP
字号:
// Section.cpp: implementation of the CSection class.
//
//////////////////////////////////////////////////////////////////////

#include "StdAfx.h"
#include "Section.h"

using namespace std;

namespace PE {

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSection::CSection()
{
    m_pData = NULL;
    m_dwSize = 0;
    ZeroMemory(&m_hdr, sizeof(IMAGE_SECTION_HEADER));
}

CSection::~CSection()
{
    Cleanup();
}

// Copy constructor
CSection::CSection(const CSection &rSection)
{
    rSection.GetHeader(m_hdr);
    m_dwSize = rSection.GetData(NULL);

    if (m_dwSize) {
        m_pData = new BYTE [m_dwSize];
        rSection.GetData(m_pData);
    } else {
        m_pData = NULL;
    }
}

// Cleanup
void CSection::Cleanup(void)
{
    if (m_pData) {
        delete [] m_pData;
        m_pData = NULL;
    }

    m_dwSize = 0;
    ZeroMemory(&m_hdr, sizeof(IMAGE_SECTION_HEADER));
}

// Set section header
void CSection::SetHeader(IMAGE_SECTION_HEADER &hdrNew)
{
    CopyMemory(&m_hdr, &hdrNew, sizeof(IMAGE_SECTION_HEADER));
}

// Set section data
void CSection::SetData(LPBYTE pData, DWORD cbData)
{
    if (m_pData) {
        delete [] m_pData;
        m_pData = NULL;
    }

    m_dwSize = 0;

    if (cbData) {
        if (IsBadReadPtr(pData, cbData) == FALSE) {
            m_pData = new BYTE[cbData];

            if (m_pData) {
                CopyMemory(m_pData, pData, cbData);
                m_dwSize = cbData;
            }
        }
    }
}

// Check if Relative Virtual Address within section
BOOL CSection::WithinRVA(DWORD dwRVA) const
{
    if ((dwRVA >= m_hdr.VirtualAddress) && (dwRVA < (m_hdr.VirtualAddress + m_hdr.Misc.VirtualSize)))
        return (TRUE);

    return(FALSE);
}

// Check if File Offset within section
BOOL CSection::WithinFO(DWORD dwFO) const
{
    if ((dwFO >= m_hdr.PointerToRawData) && (dwFO < (m_hdr.PointerToRawData + m_hdr.SizeOfRawData)))
        return(TRUE);

    return(FALSE);
}

// Get header
void CSection::GetHeader(IMAGE_SECTION_HEADER &hdr) const
{
    CopyMemory(&hdr, &m_hdr, sizeof(IMAGE_SECTION_HEADER));
}

// Get data
DWORD CSection::GetData(LPBYTE pData) const
{
    if (m_dwSize) {
        if (IsBadWritePtr(pData, m_dwSize) == FALSE) {
            if (IsBadReadPtr(m_pData, m_dwSize) == FALSE) {
                CopyMemory(pData, m_pData, m_dwSize);
            }
        }
    }

    return(m_dwSize);
}

// Resize section
void CSection::Resize(DWORD dwNewSize)
{
    LPBYTE pNewData;

    if (dwNewSize) {
        if (IsBadReadPtr(m_pData, m_dwSize) == FALSE) {
            pNewData = new BYTE [dwNewSize];
            if (pNewData) {
                if (dwNewSize > m_dwSize) {
                    // New size more than original
                    ZeroMemory(pNewData, dwNewSize);
                    CopyMemory(pNewData, m_pData, m_dwSize);
                } else {
                    // New size less than original
                    CopyMemory(pNewData, m_pData, dwNewSize);
                }
                SetData(pNewData, dwNewSize);
            }
            if (pNewData) delete [] pNewData;
        }
    }
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -