diff --git a/include/base/SMPProgram.h b/include/base/SMPProgram.h index 9b237968e4520b9f6aba7692ef5049f1f9c6559b..154a45a59461f89c8e98559e2048d5cfa5c3b8b5 100644 --- a/include/base/SMPProgram.h +++ b/include/base/SMPProgram.h @@ -80,6 +80,10 @@ inline bool IsImmedNumeric(STARS_ea_t ImmedValue) { return (!(IsImmedGlobalAddress(ImmedValue) || global_STARS_program->IsImmedCodeAddress(ImmedValue))); } +inline bool IsAddressInCodeRange(STARS_ea_t addr) { + return ((addr >= LowestCodeAddress) && (addr <= HighestCodeAddress)); +} + class LessOff { public: bool operator()(const std::pair<size_t, bool> &Off1, const std::pair<size_t, bool> &Off2) const { diff --git a/src/interfaces/abstract/STARSProgram.cpp b/src/interfaces/abstract/STARSProgram.cpp index 4176e748d53ed502b9ce6d753bec9dad70e31cd3..490e33766bc6dfd8ae41d3e999161f6d039b49b6 100644 --- a/src/interfaces/abstract/STARSProgram.cpp +++ b/src/interfaces/abstract/STARSProgram.cpp @@ -11,6 +11,7 @@ #include "interfaces/SMPDBInterface.h" // #include "interfaces/abstract/all.h" #include "base/SMPDataFlowAnalysis.h" +#include "base/SMPProgram.h" using namespace std; @@ -399,14 +400,18 @@ bool STARS_Program_t::AreInstIDsInSameFunction(const STARS_ea_t InstID1, const S // Utility functions to print code xrefs to STARS_XrefsFile void STARS_Program_t::PrintCodeToCodeXref(STARS_ea_t FromAddr, STARS_ea_t ToAddr, std::size_t InstrSize) { - SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMIB %18llx \n", - (unsigned long long) ToAddr, InstrSize, (unsigned long long) FromAddr); + if (IsAddressInCodeRange(ToAddr)) { + SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMIB %18llx \n", + (unsigned long long) ToAddr, InstrSize, (unsigned long long) FromAddr); + } return; } void STARS_Program_t::PrintDataToCodeXref(STARS_ea_t FromDataAddr, STARS_ea_t ToCodeAddr, std::size_t InstrSize) { - SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMDATA %18llx \n", - (unsigned long long) ToCodeAddr, InstrSize, (unsigned long long) FromDataAddr); + if (IsAddressInCodeRange(ToCodeAddr)) { + SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMDATA %18llx \n", + (unsigned long long) ToCodeAddr, InstrSize, (unsigned long long) FromDataAddr); + } return; }