diff options
| author | Josh Ferrell <josh@vector35.com> | 2024-06-06 15:41:48 -0400 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2024-06-06 15:41:48 -0400 |
| commit | 783a3cb0f4c2f2943653293937010b3de1aaf900 (patch) | |
| tree | fb9090dd138d4058b24b3e286d3647a95a651b13 /rust/examples/dwarf/dwarf_import/src/lib.rs | |
| parent | 7dd6f311b81460478b2ffc2726bfd3cb0e62c9ed (diff) | |
Support for local debug directories
Diffstat (limited to 'rust/examples/dwarf/dwarf_import/src/lib.rs')
| -rw-r--r-- | rust/examples/dwarf/dwarf_import/src/lib.rs | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/lib.rs b/rust/examples/dwarf/dwarf_import/src/lib.rs index c8b48792..1f4fce4d 100644 --- a/rust/examples/dwarf/dwarf_import/src/lib.rs +++ b/rust/examples/dwarf/dwarf_import/src/lib.rs @@ -270,7 +270,9 @@ struct DWARFParser; impl CustomDebugInfoParser for DWARFParser { fn is_valid(&self, view: &BinaryView) -> bool { - dwarfreader::is_valid(view) || dwarfreader::can_use_debuginfod(view) + dwarfreader::is_valid(view) || + dwarfreader::can_use_build_id(view) || + dwarfreader::can_use_debuginfod(view) } fn parse_info( @@ -280,13 +282,29 @@ impl CustomDebugInfoParser for DWARFParser { debug_file: &BinaryView, progress: Box<dyn Fn(usize, usize) -> Result<(), ()>>, ) -> bool { - let external_file = if !dwarfreader::is_valid(bv) && dwarfreader::can_use_debuginfod(bv) { - if let Ok(debug_view) = helpers::download_debug_info(bv) { - Some(debug_view) - } else { + let external_file = if !dwarfreader::is_valid(bv) { + if dwarfreader::can_use_build_id(bv) { + if let Ok(Some(debug_view)) = helpers::load_debug_info_for_build_id(bv) { + Some(debug_view) + } + else { + if dwarfreader::can_use_debuginfod(bv) { + if let Ok(debug_view) = helpers::download_debug_info(bv) { + Some(debug_view) + } else { + None + } + } + else { + None + } + } + } + else { None } - } else { + } + else { None }; @@ -333,6 +351,18 @@ pub extern "C" fn CorePluginInit() -> bool { }"#, ); + settings.register_setting_json( + "analysis.debugInfo.debugDirectories", + r#"{ + "title" : "Debug File Directories", + "type" : "array", + "elementType" : "string", + "default" : [], + "description" : "Paths to folder containing debug info stored by build id.", + "ignore" : [] + }"#, + ); + DebugInfoParser::register("DWARF", DWARFParser {}); true } |
