Ejemplo n.º 1
0
void Medusa::AnalyzeAsync(Address const& rAddr)
{
  auto pCell = GetCell(rAddr);
  if (pCell == nullptr) return;
  auto spArch = GetArchitecture(pCell->GetArchitectureTag());
  if (!spArch) return;
  boost::thread AnlzThread(&Medusa::Analyze, this, spArch, rAddr);
}
Ejemplo n.º 2
0
Tag Document::GetArchitectureTag(Address const& rAddress) const
{
  Tag ArchTag = MEDUSA_ARCH_UNK;

  auto const spCell = GetCell(rAddress);
  if (spCell != nullptr)
  {
    ArchTag = spCell->GetArchitectureTag();
    if (ArchTag != MEDUSA_ARCH_UNK)
      return ArchTag;
  }
  auto const pMemArea = GetMemoryArea(rAddress);
  if (pMemArea != nullptr)
  {
    ArchTag = pMemArea->GetArchitectureTag();
    if (ArchTag != MEDUSA_ARCH_UNK)
      return ArchTag;
  }

  return ArchTag;
}
Ejemplo n.º 3
0
u8 Document::GetMode(Address const& rAddress) const
{
  u8 Mode = 0;

  auto const spCell = GetCell(rAddress);
  if (spCell != nullptr)
  {
    auto spCellArch = ModuleManager::Instance().GetArchitecture(spCell->GetArchitectureTag());
    if (spCellArch != nullptr)
    {
      Mode = spCellArch->GetDefaultMode(rAddress);
      if (Mode != 0)
        return Mode;
    }
    Mode = spCell->GetMode();
    if (Mode != 0)
      return Mode;
  }

  auto const pMemArea = GetMemoryArea(rAddress);
  if (pMemArea != nullptr)
  {
    auto spMemAreaArch = ModuleManager::Instance().GetArchitecture(pMemArea->GetArchitectureTag());
    if (spMemAreaArch != nullptr)
    {
      Mode = spMemAreaArch->GetDefaultMode(rAddress);
      if (Mode != 0)
        return Mode;
    }
    Mode = pMemArea->GetArchitectureMode();
    if (Mode != 0)
      return Mode;
  }

  return Mode;
}