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