Index: src/processor/exploitability_linux.h |
=================================================================== |
--- src/processor/exploitability_linux.h (revision 1471) |
+++ src/processor/exploitability_linux.h (working copy) |
@@ -37,11 +37,23 @@ |
#ifndef GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_LINUX_H_ |
#define GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_LINUX_H_ |
+#include "common/scoped_ptr.h" |
#include "google_breakpad/common/breakpad_types.h" |
#include "google_breakpad/processor/exploitability.h" |
namespace google_breakpad { |
+enum LinuxArchitectureType { |
+ // A 32-bit Linux architecture. |
+ LINUX_32_BIT, |
+ |
+ // A 64-bit Linux architecture. |
+ LINUX_64_BIT, |
+ |
+ // Some other architecture that is not Linux. |
+ UNSUPPORTED_ARCHITECTURE |
+}; |
+ |
class ExploitabilityLinux : public Exploitability { |
public: |
ExploitabilityLinux(Minidump *dump, |
@@ -57,6 +69,46 @@ |
// This method checks the exception that triggered the creation of the |
// minidump and reports whether the exception suggests no exploitability. |
bool BenignCrashTrigger(const MDRawExceptionStream *raw_exception_stream); |
+ |
+ // Checks if the minidump architecture is 32-bit or 64-bit. |
+ LinuxArchitectureType ArchitectureType(); |
+ |
+ // Loads ELF header data of the module present in the given memory |
+ // region into the scoped pointer. |
+ // This method takes a scoped pointer in which the ELF header data is |
+ // loaded, the memory region containing the ELF header, and the base |
+ // address of the ELF header. |
+ template<typename T> |
+ void LoadElfHeader(MinidumpMemoryRegion *memory, |
+ uint64_t base_address, |
+ T *header) { |
+ for (size_t i = 0; i < sizeof(T); i++) { |
+ uint8_t my_byte = 0; |
+ memory->GetMemoryAtAddress(base_address + i, &my_byte); |
+ *(reinterpret_cast<char *>(header) + i) = my_byte; |
+ } |
+ } |
+ |
+ // Loads the Program Header Table of the module present in the given |
+ // memory region into the scoped array. |
+ // This method takes a scoped array in which the header table data is |
+ // loaded, the memory region containing the table, the base address of |
+ // the program header table, and the number of entries in the table. |
+ template<typename T> |
+ void LoadElfHeaderTable(MinidumpMemoryRegion *memory, |
+ uint64_t base_address, |
+ uint16_t e_phnum, |
+ T table[]) { |
+ uint64_t offset = 0; |
+ for (size_t i = 0; i < e_phnum; i++) { |
+ T *entry = &table[i]; |
+ for (size_t j = 0; j < sizeof(T); j++) { |
+ uint8_t my_byte = 0; |
+ memory->GetMemoryAtAddress(base_address + offset++, &my_byte); |
+ *(reinterpret_cast<char *>(entry) + j) = my_byte; |
+ } |
+ } |
+ } |
}; |
} // namespace google_breakpad |