ROSE  0.11.98.0
BinaryAnalysis/Utils.h
1 // This file contains binary analysis utilities that are either not a critical part of the analysis framework, or which cannot
2 // be easily incorporated into the main header files because they would introduce circular #include dependencies.
3 
4 #ifndef ROSE_BinaryAnalysis_Utils_H
5 #define ROSE_BinaryAnalysis_Utils_H
6 #include <featureTests.h>
7 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
8 
9 #include "AsmUnparser_compat.h"
10 
11 namespace Rose {
12 namespace BinaryAnalysis { // documented elsewhere
13 
16 template<class Graph>
18  const Graph &cfg;
19  InsnCFGVertexWriter(Graph &cfg): cfg(cfg) {}
20  typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
21  void operator()(std::ostream &output, const Vertex &v) const {
22  SgAsmInstruction *insn = get_ast_node(cfg, v);
23  SgAsmX86Instruction *x86 = isSgAsmX86Instruction(insn);
24  SgAsmFunction *func = SageInterface::getEnclosingNode<SgAsmFunction>(insn);
25  output <<"[ label=\"[" <<v << "] " <<insn->toString() <<"\"";
26  if (insn->get_address()==func->get_entry_va()) {
27  output <<", style=filled, color=\"#cd853f\"";
28  } else if (x86 && x86_ret==x86->get_kind()) {
29  output <<", style=filled, color=\"#fed3a7\"";
30  }
31  output <<" ]";
32  }
33 };
34 
35 } // namespace
36 } // namespace
37 
38 #endif
39 #endif
Base class for machine instructions.
Represents a synthesized function.
Main namespace for the ROSE library.
Represents one Intel x86 machine instruction.
A vertex property writer for instruction-based CFGs.
Binary analysis.
rose_addr_t get_entry_va() const
Property: Primary entry address.
virtual std::string toString() const
Converts the instruction to a string.
Rose::BinaryAnalysis::X86InstructionKind get_kind() const
Property: Instruction kind.
rose_addr_t get_address() const
Property: Starting virtual address.