83 lines
2.9 KiB
C++
83 lines
2.9 KiB
C++
#ifndef _IMAGE_EXPORTDESCRIPTOR_HPP_
|
|
#define _IMAGE_EXPORTDESCRIPTOR_HPP_
|
|
#ifndef _COMMON_PUREDWORD_HPP_
|
|
#include <common/puredwrd.hpp>
|
|
#endif
|
|
#ifndef _COMMON_PUREWORD_HPP_
|
|
#include <common/purewrd.hpp>
|
|
#endif
|
|
#ifndef _COMMON_PUREVIEWOFFILE_HPP_
|
|
#include <common/pview.hpp>
|
|
#endif
|
|
#ifndef _COMMON_ARRAY_HPP_
|
|
#include <common/array.hpp>
|
|
#endif
|
|
#ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_
|
|
#include <image/sctnhdrs.hpp>
|
|
#endif
|
|
#ifndef _IMAGE_IMAGEEXPORTDIRECTORY_HPP_
|
|
#include <image/expdir.hpp>
|
|
#endif
|
|
#ifndef _IMAGE_IMAGEEXPORTDESCRIPTOR_HPP_
|
|
#include <image/expdsc.hpp>
|
|
#endif
|
|
|
|
class ImageExportDescriptors : public ImageExportDirectory, public Array<ImageExportDescriptor>
|
|
{
|
|
public:
|
|
ImageExportDescriptors(void);
|
|
ImageExportDescriptors(const ImageExportDescriptors &someImageExportDescriptors);
|
|
virtual ~ImageExportDescriptors();
|
|
ImageExportDescriptors &operator=(const ImageExportDescriptors &someImageExportDecsriptors);
|
|
WORD operator==(const ImageExportDescriptors &someImageExportDescriptors)const;
|
|
WORD loadImageExports(PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,WORD sortFlag);
|
|
WORD locateImageExportName(String imageExportName,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex);
|
|
WORD locateImageExportOrdinal(DWORD exportOrdinal,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex);
|
|
private:
|
|
enum {OrdinalPrefix='@'};
|
|
WORD loadExportNames(Array<String> &exportNames,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView);
|
|
WORD loadExportOrdinals(Array<PureWORD> &exportOrdinals,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView);
|
|
WORD loadExportFunctions(Array<PureDWORD> &exportFunctions,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView);
|
|
WORD combineExportDescriptors(Array<String> &exportNames,Array<PureWORD> &exportOrdinals,Array<PureDWORD> &exportFunctions);
|
|
WORD makeOrdinalValue(String imageExportName,WORD &exportOrdinal)const;
|
|
};
|
|
|
|
inline
|
|
ImageExportDescriptors::ImageExportDescriptors(void)
|
|
{
|
|
}
|
|
|
|
inline
|
|
ImageExportDescriptors::ImageExportDescriptors(const ImageExportDescriptors &someImageExportDescriptors)
|
|
{
|
|
*this=someImageExportDescriptors;
|
|
}
|
|
|
|
inline
|
|
ImageExportDescriptors::~ImageExportDescriptors()
|
|
{
|
|
}
|
|
|
|
inline
|
|
ImageExportDescriptors &ImageExportDescriptors::operator=(const ImageExportDescriptors &someImageExportDescriptors)
|
|
{
|
|
(Array<ImageExportDescriptor>&)*this=(Array<ImageExportDescriptor>&)someImageExportDescriptors;
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
WORD ImageExportDescriptors::operator==(const ImageExportDescriptors &someImageExportDescriptors)const
|
|
{
|
|
return (Array<ImageExportDescriptor>&)*this==(Array<ImageExportDescriptor>&)someImageExportDescriptors;
|
|
}
|
|
|
|
inline
|
|
WORD ImageExportDescriptors::makeOrdinalValue(String imageExportName,WORD &exportOrdinal)const
|
|
{
|
|
if(imageExportName.isNull())return FALSE;
|
|
if(OrdinalPrefix!=imageExportName[(DWORD)0])return FALSE;
|
|
exportOrdinal=(int)imageExportName.betweenString(OrdinalPrefix,0).toInt();
|
|
return TRUE;
|
|
}
|
|
#endif
|