1 #pragma once
2 
3 #include "../../analyzer/analyzer.h"
4 #include "pe_classifier.h"
5 #include <forward_list>
6 
7 namespace REDasm {
8 
9 class PEAnalyzer: public Analyzer
10 {
11     private:
12         typedef std::pair<size_t, std::string> APIInfo;
13 
14     public:
15         PEAnalyzer(const PEClassifier* classifier, DisassemblerAPI* disassembler);
16         void analyze() override;
17 
18     private:
19         Symbol *getImport(const std::string& library, const std::string& api);
20         ReferenceVector getAPIReferences(const std::string& library, const std::string& api);
21         void findWndProc(address_t address, size_t argidx);
22         void findCRTWinMain();
23         void findAllWndProc();
24 
25     protected:
26         const PEClassifier* m_classifier;
27 
28     private:
29         std::forward_list<APIInfo> m_wndprocapi;
30 };
31 
32 } // namespace REDasm
33