Add new flag to allow granular control over the use of objdump.
This adds a new flag `enable_objdump_for_exploitability_` to the MinidumpProcessor, which allows enabling objdump separately for crash address fixups and for exploitability analysis, as the performance cost of the exploitability analysis is significantly higher. Change-Id: I667ffdce7cc0a970793f91413c3d2e3af93f4247 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/4507067 Reviewed-by: Ivan Penkov <ivanpe@google.com> Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
This commit is contained in:
parent
f4a3b346f3
commit
463ae7cd60
3 changed files with 21 additions and 6 deletions
|
@ -126,8 +126,18 @@ class MinidumpProcessor {
|
||||||
// does not exist or cannot be determined.
|
// does not exist or cannot be determined.
|
||||||
static string GetAssertion(Minidump* dump);
|
static string GetAssertion(Minidump* dump);
|
||||||
|
|
||||||
|
// Sets the flag to enable/disable use of objdump during normal crash
|
||||||
|
// processing. This is independent from the flag for use of objdump during
|
||||||
|
// exploitability analysis.
|
||||||
void set_enable_objdump(bool enabled) { enable_objdump_ = enabled; }
|
void set_enable_objdump(bool enabled) { enable_objdump_ = enabled; }
|
||||||
|
|
||||||
|
// Sets the flag to enable/disable use of objdump during exploitability
|
||||||
|
// analysis. This is independent from the flag for use of objdump during
|
||||||
|
// normal crash processing.
|
||||||
|
void set_enable_objdump_for_exploitability(bool enabled) {
|
||||||
|
enable_objdump_for_exploitability_ = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StackFrameSymbolizer* frame_symbolizer_;
|
StackFrameSymbolizer* frame_symbolizer_;
|
||||||
// Indicate whether resolver_helper_ is owned by this instance.
|
// Indicate whether resolver_helper_ is owned by this instance.
|
||||||
|
@ -138,9 +148,15 @@ class MinidumpProcessor {
|
||||||
// memory corruption issue.
|
// memory corruption issue.
|
||||||
bool enable_exploitability_;
|
bool enable_exploitability_;
|
||||||
|
|
||||||
// This flag permits the exploitability scanner to shell out to objdump
|
// This flag permits the processor to shell out to objdump for purposes of
|
||||||
// for purposes of disassembly.
|
// disassembly during normal crash processing, but not during exploitability
|
||||||
|
// analysis.
|
||||||
bool enable_objdump_;
|
bool enable_objdump_;
|
||||||
|
|
||||||
|
// This flag permits the exploitability scanner to shell out to objdump for
|
||||||
|
// purposes of disassembly. This results in significantly more overhead than
|
||||||
|
// the enable_objdump_ flag.
|
||||||
|
bool enable_objdump_for_exploitability_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace google_breakpad
|
} // namespace google_breakpad
|
||||||
|
|
|
@ -84,7 +84,7 @@ ExploitabilityFor(const string& filename) {
|
||||||
SimpleSymbolSupplier supplier(TestDataDir() + "/symbols");
|
SimpleSymbolSupplier supplier(TestDataDir() + "/symbols");
|
||||||
BasicSourceLineResolver resolver;
|
BasicSourceLineResolver resolver;
|
||||||
MinidumpProcessor processor(&supplier, &resolver, true);
|
MinidumpProcessor processor(&supplier, &resolver, true);
|
||||||
processor.set_enable_objdump(true);
|
processor.set_enable_objdump_for_exploitability(true);
|
||||||
ProcessState state;
|
ProcessState state;
|
||||||
|
|
||||||
string minidump_file = TestDataDir() + "/" + filename;
|
string minidump_file = TestDataDir() + "/" + filename;
|
||||||
|
|
|
@ -375,9 +375,8 @@ ProcessResult MinidumpProcessor::Process(
|
||||||
// rating.
|
// rating.
|
||||||
if (enable_exploitability_) {
|
if (enable_exploitability_) {
|
||||||
scoped_ptr<Exploitability> exploitability(
|
scoped_ptr<Exploitability> exploitability(
|
||||||
Exploitability::ExploitabilityForPlatform(dump,
|
Exploitability::ExploitabilityForPlatform(
|
||||||
process_state,
|
dump, process_state, enable_objdump_for_exploitability_));
|
||||||
enable_objdump_));
|
|
||||||
// The engine will be null if the platform is not supported
|
// The engine will be null if the platform is not supported
|
||||||
if (exploitability != NULL) {
|
if (exploitability != NULL) {
|
||||||
process_state->exploitability_ = exploitability->CheckExploitability();
|
process_state->exploitability_ = exploitability->CheckExploitability();
|
||||||
|
|
Loading…
Reference in a new issue