BearParser
Portable Executable parsing library (from PE-bear)
ExeFactory.cpp
Go to the documentation of this file.
1#include "ExeFactory.h"
2
3#include "pe/DOSExe.h"
4#include "pe/PEFile.h"
5
6std::map<ExeFactory::exe_type, ExeBuilder*> ExeFactory::builders;
7
9{
10 if (builders.size() > 0) {
11 return; // already initialized
12 }
13 builders[MZ] = new DOSExeBuilder();
14 builders[PE] = new PEFileBuilder();
15}
16
18{
19 std::map<exe_type, ExeBuilder*>::iterator itr;
20 for (itr = builders.begin(); itr != builders.end(); itr++) {
21 ExeBuilder* builder = itr->second;
22 delete builder;
23 }
24 builders.clear();
25}
26
28{
29 if (!buf) return NONE;
30
31 std::map<exe_type, ExeBuilder*>::iterator itr;
32 for (itr = builders.begin(); itr != builders.end(); itr++) {
33
34 ExeBuilder* builder = itr->second;
35 if (builder == NULL) continue;
36
37 if (builder->signatureMatches(buf)) {
38 return itr->first;
39 }
40 }
41 return NONE;
42}
43
45{
46 if (builders.find(type) == builders.end()) return NULL;
47
48 ExeBuilder* builder = builders[type];
49 if (builder == NULL) return NULL;
50
51 return builder->build(buf);
52}
53
55{
56 if (builders.find(type) == builders.end()) return "Not supported";
57
58 ExeBuilder* builder = builders[type];
59 if (builder == NULL) return "Not supported";
60
61 return builder->typeName();
62}
virtual Executable * build(AbstractByteBuffer *buf)=0
virtual bool signatureMatches(AbstractByteBuffer *buf)=0
virtual QString typeName()=0
static exe_type findMatching(AbstractByteBuffer *buf)
Definition: ExeFactory.cpp:27
static std::map< exe_type, ExeBuilder * > builders
Definition: ExeFactory.h:29
static void destroy()
Definition: ExeFactory.cpp:17
static Executable * build(AbstractByteBuffer *buf, exe_type type)
Definition: ExeFactory.cpp:44
static void init()
Definition: ExeFactory.cpp:8
static QString getTypeName(exe_type type)
Definition: ExeFactory.cpp:54