GT-2976 - Fixed NPE in Version Tracking hashing

This commit is contained in:
dragonmacher 2019-07-15 13:24:04 -04:00
parent 1cc8de3e67
commit 4885e5f8a9
22 changed files with 55 additions and 57 deletions

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import generic.stl.Pair;
import ghidra.program.model.address.AddressSet;

View file

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.ArrayList;
@ -46,9 +46,8 @@ public class ExactBytesFunctionHasher extends AbstractFunctionHasher {
byte[] buffer = new byte[byteCount];
int offset = 0;
for (CodeUnit codeUnit : units) {
if (monitor.isCancelled()) {
return 0;
}
monitor.checkCanceled();
try {
codeUnit.getBytesInCodeUnit(buffer, offset);
}

View file

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.ArrayList;
@ -22,9 +22,7 @@ import generic.hash.MessageDigest;
import generic.stl.Pair;
import ghidra.program.model.lang.IncompatibleMaskException;
import ghidra.program.model.lang.Mask;
import ghidra.program.model.listing.CodeUnit;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.Instruction;
import ghidra.program.model.listing.*;
import ghidra.program.model.mem.MemoryAccessException;
import ghidra.util.Msg;
import ghidra.util.exception.CancelledException;
@ -75,15 +73,14 @@ public class ExactInstructionsFunctionHasher extends AbstractFunctionHasher {
byte[] buffer = new byte[byteCount];
int offset = 0;
for (CodeUnit codeUnit : units) {
if (monitor.isCancelled()) {
return 0;
}
monitor.checkCanceled();
try {
codeUnit.getBytesInCodeUnit(buffer, offset);
applyMask(buffer, offset, codeUnit);
}
catch (MemoryAccessException e) {
Msg.warn(this, "Could not get code unit bvtes at " + codeUnit.getAddress());
Msg.warn(this, "Could not get code unit bytes at " + codeUnit.getAddress());
}
offset += codeUnit.getLength();
}
@ -98,15 +95,22 @@ public class ExactInstructionsFunctionHasher extends AbstractFunctionHasher {
}
private static void applyMask(byte[] buffer, int offset, CodeUnit codeUnit) {
if (codeUnit instanceof Instruction) {
Instruction i = (Instruction) codeUnit;
Mask mask = i.getPrototype().getInstructionMask();
try {
mask.applyMask(buffer, offset, buffer, offset);
}
catch (IncompatibleMaskException e) {
throw new RuntimeException(e);
}
if (!(codeUnit instanceof Instruction)) {
return;
}
Instruction i = (Instruction) codeUnit;
Mask mask = i.getPrototype().getInstructionMask();
if (mask == null) {
return;
}
try {
mask.applyMask(buffer, offset, buffer, offset);
}
catch (IncompatibleMaskException e) {
throw new RuntimeException(e);
}
}
}

View file

@ -13,16 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.ArrayList;
import ghidra.program.model.listing.CodeUnit;
import ghidra.program.model.listing.Instruction;
import ghidra.program.model.mem.MemoryAccessException;
import ghidra.util.Msg;
import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor;
import java.util.ArrayList;
public class ExactMnemonicsFunctionHasher extends ExactInstructionsFunctionHasher {
@SuppressWarnings("hiding")
public static final ExactMnemonicsFunctionHasher INSTANCE = new ExactMnemonicsFunctionHasher();
@ -36,9 +37,8 @@ public class ExactMnemonicsFunctionHasher extends ExactInstructionsFunctionHashe
throws MemoryAccessException, CancelledException {
StringBuilder sb = new StringBuilder();
for (CodeUnit codeUnit : units) {
if (monitor.isCancelled()) {
return 0;
}
monitor.checkCanceled();
if (codeUnit instanceof Instruction) {
Instruction inst = (Instruction) codeUnit;
String mnemonic = inst.getMnemonicString();
@ -56,7 +56,8 @@ public class ExactMnemonicsFunctionHasher extends ExactInstructionsFunctionHashe
}
sb.append(chars);
}
catch (Exception e) {
catch (MemoryAccessException e) {
Msg.warn(this, "Could not get code unit bytes at " + codeUnit.getAddress());
sb.append(codeUnit.getAddressString(true, true));
}
}

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import ghidra.program.model.listing.Function;
import ghidra.util.exception.CancelledException;

View file

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.ArrayList;

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,7 +19,7 @@
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import ghidra.program.model.address.Address;
import ghidra.program.model.listing.CodeUnit;

View file

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import generic.stl.Pair;
import ghidra.program.model.address.*;

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressSetView;

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,7 +19,7 @@
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.Arrays;
import java.util.HashSet;

View file

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.*;

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -14,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import ghidra.program.model.address.Address;
import ghidra.program.model.listing.Data;

View file

@ -1,6 +1,5 @@
/* ###
* IP: GHIDRA
* REVIEWED: YES
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,7 +19,7 @@
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import ghidra.program.model.address.Address;

View file

@ -19,7 +19,7 @@
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package ghidra.app.plugin.prototype.match;
package ghidra.app.plugin.match;
import java.util.ArrayList;

View file

@ -15,8 +15,8 @@
*/
package ghidra.feature.vt.api.correlator.program;
import ghidra.app.plugin.prototype.match.MatchData;
import ghidra.app.plugin.prototype.match.MatchedData;
import ghidra.app.plugin.match.MatchData;
import ghidra.app.plugin.match.MatchedData;
import ghidra.feature.vt.api.main.*;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelator;
import ghidra.framework.options.ToolOptions;

View file

@ -15,7 +15,7 @@
*/
package ghidra.feature.vt.api.correlator.program;
import ghidra.app.plugin.prototype.match.ExactInstructionsFunctionHasher;
import ghidra.app.plugin.match.ExactInstructionsFunctionHasher;
import ghidra.feature.vt.api.main.VTProgramCorrelator;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelatorFactory;
import ghidra.feature.vt.api.util.VTOptions;

View file

@ -15,7 +15,7 @@
*/
package ghidra.feature.vt.api.correlator.program;
import ghidra.app.plugin.prototype.match.ExactBytesFunctionHasher;
import ghidra.app.plugin.match.ExactBytesFunctionHasher;
import ghidra.feature.vt.api.main.VTProgramCorrelator;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelatorFactory;
import ghidra.feature.vt.api.util.VTOptions;

View file

@ -15,7 +15,7 @@
*/
package ghidra.feature.vt.api.correlator.program;
import ghidra.app.plugin.prototype.match.ExactInstructionsFunctionHasher;
import ghidra.app.plugin.match.ExactInstructionsFunctionHasher;
import ghidra.feature.vt.api.main.VTProgramCorrelator;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelatorFactory;
import ghidra.feature.vt.api.util.VTOptions;

View file

@ -15,7 +15,7 @@
*/
package ghidra.feature.vt.api.correlator.program;
import ghidra.app.plugin.prototype.match.ExactMnemonicsFunctionHasher;
import ghidra.app.plugin.match.ExactMnemonicsFunctionHasher;
import ghidra.feature.vt.api.main.VTProgramCorrelator;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelatorFactory;
import ghidra.feature.vt.api.util.VTOptions;

View file

@ -19,9 +19,9 @@ import java.util.ArrayList;
import java.util.List;
import ghidra.app.plugin.core.entropy.EntropyCalculate;
import ghidra.app.plugin.prototype.match.FunctionHasher;
import ghidra.app.plugin.prototype.match.MatchFunctions;
import ghidra.app.plugin.prototype.match.MatchFunctions.MatchedFunctions;
import ghidra.app.plugin.match.FunctionHasher;
import ghidra.app.plugin.match.MatchFunctions;
import ghidra.app.plugin.match.MatchFunctions.MatchedFunctions;
import ghidra.feature.vt.api.main.*;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelator;
import ghidra.framework.options.ToolOptions;

View file

@ -17,8 +17,8 @@ package ghidra.feature.vt.api.correlator.program;
import java.util.*;
import ghidra.app.plugin.prototype.match.MatchSymbol;
import ghidra.app.plugin.prototype.match.MatchSymbol.MatchedSymbol;
import ghidra.app.plugin.match.MatchSymbol;
import ghidra.app.plugin.match.MatchSymbol.MatchedSymbol;
import ghidra.feature.vt.api.main.*;
import ghidra.feature.vt.api.util.VTAbstractProgramCorrelator;
import ghidra.framework.options.ToolOptions;

View file

@ -93,6 +93,7 @@ ghidra/app/plugin/core/printing/**
ghidra/file/formats/**
ghidra/file/jad/**
ghidra/app/cmd/formats/**
ghidra/app/util/bin/format/**
mobiledevices/**