PageRenderTime 20ms CodeModel.GetById 13ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 1ms

/thirdparty/breakpad/processor/exploitability.cc

http://github.com/tomahawk-player/tomahawk
C++ | 105 lines | 58 code | 14 blank | 33 comment | 8 complexity | 928e8b1fef118c1082471dc17adfd907 MD5 | raw file
  1// Copyright (c) 2010 Google Inc.
  2// All rights reserved.
  3//
  4// Redistribution and use in source and binary forms, with or without
  5// modification, are permitted provided that the following conditions are
  6// met:
  7//
  8//     * Redistributions of source code must retain the above copyright
  9// notice, this list of conditions and the following disclaimer.
 10//     * Redistributions in binary form must reproduce the above
 11// copyright notice, this list of conditions and the following disclaimer
 12// in the documentation and/or other materials provided with the
 13// distribution.
 14//     * Neither the name of Google Inc. nor the names of its
 15// contributors may be used to endorse or promote products derived from
 16// this software without specific prior written permission.
 17//
 18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 29
 30// exploitability_engine.cc: Generic exploitability engine.
 31//
 32// See exploitable_engine.h for documentation.
 33//
 34// Author: Cris Neckar
 35
 36
 37#include <cassert>
 38
 39#include "google_breakpad/processor/exploitability.h"
 40#include "google_breakpad/processor/minidump.h"
 41#include "google_breakpad/processor/process_state.h"
 42#include "processor/exploitability_win.h"
 43#include "processor/logging.h"
 44#include "processor/scoped_ptr.h"
 45
 46namespace google_breakpad {
 47
 48Exploitability::Exploitability(Minidump *dump,
 49                               ProcessState *process_state)
 50    : dump_(dump),
 51      process_state_(process_state) {}
 52
 53ExploitabilityRating Exploitability::CheckExploitability() {
 54  return CheckPlatformExploitability();
 55}
 56
 57Exploitability *Exploitability::ExploitabilityForPlatform(
 58    Minidump *dump,
 59    ProcessState *process_state) {
 60  Exploitability *platform_exploitability = NULL;
 61  MinidumpSystemInfo *minidump_system_info = dump->GetSystemInfo();
 62  if (!minidump_system_info)
 63    return NULL;
 64
 65  const MDRawSystemInfo *raw_system_info =
 66    minidump_system_info->system_info();
 67  if (!raw_system_info)
 68    return NULL;
 69
 70  switch (raw_system_info->platform_id) {
 71    case MD_OS_WIN32_NT:
 72    case MD_OS_WIN32_WINDOWS: {
 73      platform_exploitability = new ExploitabilityWin(dump,
 74                                                      process_state);
 75      break;
 76    }
 77    case MD_OS_MAC_OS_X:
 78    case MD_OS_IOS:
 79    case MD_OS_LINUX:
 80    case MD_OS_UNIX:
 81    case MD_OS_SOLARIS:
 82    default: {
 83      platform_exploitability = NULL;
 84      break;
 85    }
 86  }
 87
 88  BPLOG_IF(ERROR, !platform_exploitability) <<
 89    "No Exploitability module for platform: " <<
 90    process_state->system_info()->os;
 91  return platform_exploitability;
 92}
 93
 94bool Exploitability::AddressIsAscii(u_int64_t address) {
 95  for (int i = 0; i < 8; i++) {
 96    u_int8_t byte = (address >> (8*i)) & 0xff;
 97    if ((byte >= ' ' && byte <= '~') || byte == 0)
 98      continue;
 99    return false;
100  }
101  return true;
102}
103
104}  // namespace google_breakpad
105