From e56b4a746b234880f8ce03c50053022ed1c829f8 Mon Sep 17 00:00:00 2001 From: James <49045138+ghidracadabra@users.noreply.github.com> Date: Mon, 21 Apr 2025 13:01:12 -0400 Subject: [PATCH] GP-5604 add listener to bsim overview table --- .../bsim/gui/overview/BSimOverviewModel.java | 10 ++++--- .../gui/overview/BSimOverviewProvider.java | 13 +++++++++ .../gui/overview/BSimOverviewRowObject.java | 27 ++++++++++++++----- .../results/BSimSearchResultsProvider.java | 1 + 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewModel.java b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewModel.java index e3540f3346..e666c18b64 100755 --- a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewModel.java +++ b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewModel.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -98,7 +98,8 @@ public class BSimOverviewModel extends AddressBasedTableModel { + if (ev.contains(SYMBOL_RENAMED, RESTORED)) { + overviewModel.fireTableDataChanged(); + } + }; + program.addListener(listener); + } public Program getProgram() { @@ -217,6 +229,7 @@ public class BSimOverviewProvider extends ComponentProviderAdapter { public void componentHidden() { super.componentHidden(); if (plugin != null) { + program.removeListener(listener); plugin.providerClosed(this); } } diff --git a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewRowObject.java b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewRowObject.java index 231c8dfe6b..35cc28d80c 100755 --- a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewRowObject.java +++ b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/overview/BSimOverviewRowObject.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -21,21 +21,31 @@ import ghidra.features.bsim.query.description.FunctionDescription; import ghidra.features.bsim.query.description.SignatureRecord; import ghidra.features.bsim.query.protocol.SimilarityVectorResult; import ghidra.program.model.address.Address; +import ghidra.program.model.listing.Function; +import ghidra.program.model.listing.Program; /** * Table row object for BSim Overview results table */ public class BSimOverviewRowObject { private Address addr; - private FunctionDescription func; private SimilarityVectorResult simvec; private double selfsignif; // Maximum significance score a query with this function could return private long vectorHash; + private Function function; - public BSimOverviewRowObject(SimilarityVectorResult result,Address ad,LSHVectorFactory vectorFactory) { + /** + * Constructor. + * @param result results for queried function + * @param ad address of function + * @param vectorFactory vectoryFactory + * @param program program containing queried function + */ + public BSimOverviewRowObject(SimilarityVectorResult result, Address ad, + LSHVectorFactory vectorFactory, Program program) { addr = ad; simvec = result; - func = simvec.getBase(); + FunctionDescription func = simvec.getBase(); selfsignif = 0.0; SignatureRecord sigrec = func.getSignatureRecord(); if (sigrec != null) { @@ -43,11 +53,14 @@ public class BSimOverviewRowObject { } LSHVector lshVector = func.getSignatureRecord().getLSHVector(); vectorHash = lshVector.calcUniqueHash(); - + function = program.getFunctionManager().getFunctionAt(ad); } public String getFunctionName() { - return func.getFunctionName(); + if (function == null || function.isDeleted()) { + return null; + } + return function.getName(); } public Address getFunctionEntryPoint() { diff --git a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java index bfd5abb2bb..556f09569a 100644 --- a/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java +++ b/Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java @@ -127,6 +127,7 @@ public class BSimSearchResultsProvider extends ComponentProviderAdapter { public void componentHidden() { super.componentHidden(); if (plugin != null) { + program.removeListener(listener); plugin.providerClosed(this); } }