RCSDropper/GenericSection.cpp
#include "GenericSection.h"
#include "PEObject.h"
GenericSection::GenericSection(PEObject& pe, string name )
: _pe(pe), _data(NULL), _size(0), _allocated(true), _name(name)
{
_header = new IMAGE_SECTION_HEADER;
memset(_header, 0 , sizeof(IMAGE_SECTION_HEADER));
memcpy(_header->Name, name.c_str(), name.size() < IMAGE_SIZEOF_SHORT_NAME ? name.size() : IMAGE_SIZEOF_SHORT_NAME);
}
GenericSection::GenericSection(PEObject& pe, string name, IMAGE_SECTION_HEADER* header)
: _pe(pe), _header(header), _data(NULL), _size(0), _allocated(false), _name(name)
{
memcpy(_header->Name, name.c_str(), name.size() < IMAGE_SIZEOF_SHORT_NAME ? name.size() : IMAGE_SIZEOF_SHORT_NAME);
}
GenericSection::~GenericSection(void)
{
if (_allocated) {
if (_header)
delete _header;
if (_data)
delete [] _data;
}
}
DWORD GenericSection::FileAlignment()
{
return _pe.fileAlignment();
}
DWORD GenericSection::SectionAlignment()
{
return _pe.sectionAlignment();
}
void GenericSection::SetData( char const * const data, DWORD size )
{
cout << __FUNCTION__ << " data = 0x" << hex << (DWORD)data << " size: " << hex << size << endl;
_header->Misc.VirtualSize = alignTo(size, SectionAlignment());
_header->SizeOfRawData = alignTo(_header->Misc.VirtualSize, FileAlignment());
_data = new char[ _header->SizeOfRawData ];
memset(_data, 0, _header->SizeOfRawData);
cout << __FUNCTION__ << " _data = 0x" << hex << (DWORD)_data << " size: " << hex << _header->SizeOfRawData << endl;
memcpy(_data, data, size);
}