00001
00002
00003 #ifndef __BinCompass_interruptanalysis__
00004 #define __BinCompass_interruptanalysis__
00005
00006 #include "RoseBin_DataFlowAbstract.h"
00007
00008 class InterruptAnalysis : public RoseBin_DataFlowAbstract {
00009
00010 public:
00011 InterruptAnalysis(GraphAlgorithms* algo):RoseBin_DataFlowAbstract(algo) {}
00012 ~InterruptAnalysis() {}
00013
00014 bool run(std::string& name, SgGraphNode* node,
00015 SgGraphNode* previous);
00016
00017 void getValueForDefinition(std::vector<uint64_t>& vec,
00018 std::vector<uint64_t>& positions,
00019 uint64_t& fpos,
00020 SgGraphNode* node,
00021 std::pair<X86RegisterClass, int> reg );
00022
00023 std::string getIntCallName_Linux32bit(uint64_t rax,RoseBin_DataTypes::DataTypes& data_ebx,
00024 RoseBin_DataTypes::DataTypes& data_ecx,
00025 RoseBin_DataTypes::DataTypes& data_edx,
00026 std::vector<uint64_t>& val_rbx,
00027 std::vector<uint64_t>& val_rcx,
00028 std::vector<uint64_t>& val_rdx,
00029 std::vector<uint64_t>& pos_ebx,
00030 std::vector<uint64_t>& pos_ecx,
00031 std::vector<uint64_t>& pos_edx,
00032 uint64_t fpos_rbx, uint64_t fpos_rcx, uint64_t fpos_rdx);
00033 std::string getIntCallName_Linux64bit(uint64_t rax,RoseBin_DataTypes::DataTypes& data_ebx,
00034 RoseBin_DataTypes::DataTypes& data_ecx,
00035 RoseBin_DataTypes::DataTypes& data_edx,
00036 std::vector<uint64_t>& val_rbx,
00037 std::vector<uint64_t>& val_rcx,
00038 std::vector<uint64_t>& val_rdx,
00039 std::vector<uint64_t>& pos_ebx,
00040 std::vector<uint64_t>& pos_ecx,
00041 std::vector<uint64_t>& pos_edx,
00042 uint64_t fpos_rbx, uint64_t fpos_rcx, uint64_t fpos_rdx);
00043 std::string getIntCallName(uint64_t rax,RoseBin_DataTypes::DataTypes& data_ebx,
00044 RoseBin_DataTypes::DataTypes& data_ecx,
00045 RoseBin_DataTypes::DataTypes& data_edx,
00046 std::vector<uint64_t>& val_rbx,
00047 std::vector<uint64_t>& val_rcx,
00048 std::vector<uint64_t>& val_rdx,
00049 std::vector<uint64_t>& pos_ebx,
00050 std::vector<uint64_t>& pos_ecx,
00051 std::vector<uint64_t>& pos_edx,
00052 uint64_t fpos_rbx, uint64_t fpos_rcx, uint64_t fpos_rdx);
00053
00054 bool runEdge(SgGraphNode* node, SgGraphNode* next) {
00055 return false;
00056 }
00057
00058 void init(RoseBin_Graph* vg) {
00059 vizzGraph = vg;
00060 }
00061
00062 };
00063
00064 #endif
00065