mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-02-08 03:30:16 +00:00
minor cleanup
This commit is contained in:
parent
c5fdf6f9ec
commit
86bc0cc80b
@ -19,5 +19,5 @@ assert_fail
|
|||||||
assert_rtn
|
assert_rtn
|
||||||
fortify_fail
|
fortify_fail
|
||||||
ZSt9terminatev
|
ZSt9terminatev
|
||||||
_ZN10__cxxabiv111__terminateEPFvvE
|
ZN10__cxxabiv111__terminateEPFvvE
|
||||||
pthread_exit
|
pthread_exit
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* ###
|
/* ###
|
||||||
* IP: GHIDRA
|
* IP: GHIDRA
|
||||||
* REVIEWED: YES
|
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -23,10 +22,10 @@ public interface MemoryFaultHandler {
|
|||||||
/**
|
/**
|
||||||
* An attempt has been made to read uninitialized memory at the
|
* An attempt has been made to read uninitialized memory at the
|
||||||
* specified address.
|
* specified address.
|
||||||
* @param address
|
* @param address uninitialized storage address (memory, register or unique)
|
||||||
* @param size
|
* @param size number of uninitialized bytes
|
||||||
* @param buf
|
* @param buf storage buffer
|
||||||
* @param bufOffset
|
* @param bufOffset read offset within buffer
|
||||||
* @return true if data should be treated as initialized
|
* @return true if data should be treated as initialized
|
||||||
*/
|
*/
|
||||||
boolean uninitializedRead(Address address, int size, byte[] buf, int bufOffset);
|
boolean uninitializedRead(Address address, int size, byte[] buf, int bufOffset);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* ###
|
/* ###
|
||||||
* IP: GHIDRA
|
* IP: GHIDRA
|
||||||
* REVIEWED: YES
|
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -16,6 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package ghidra.program.database.register;
|
package ghidra.program.database.register;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import db.*;
|
||||||
|
import db.util.ErrorHandler;
|
||||||
import ghidra.program.database.ManagerDB;
|
import ghidra.program.database.ManagerDB;
|
||||||
import ghidra.program.database.ProgramDB;
|
import ghidra.program.database.ProgramDB;
|
||||||
import ghidra.program.database.code.CodeManager;
|
import ghidra.program.database.code.CodeManager;
|
||||||
@ -30,13 +36,6 @@ import ghidra.util.Msg;
|
|||||||
import ghidra.util.exception.*;
|
import ghidra.util.exception.*;
|
||||||
import ghidra.util.task.TaskMonitor;
|
import ghidra.util.task.TaskMonitor;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.math.BigInteger;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import db.*;
|
|
||||||
import db.util.ErrorHandler;
|
|
||||||
|
|
||||||
public class ProgramRegisterContextDB extends AbstractStoredProgramContext implements ManagerDB {
|
public class ProgramRegisterContextDB extends AbstractStoredProgramContext implements ManagerDB {
|
||||||
|
|
||||||
private DBHandle dbHandle;
|
private DBHandle dbHandle;
|
||||||
@ -63,8 +62,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
|||||||
throw new VersionException(true);
|
throw new VersionException(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
registerValueMap = new HashMap<Register, RegisterValueStore>();
|
registerValueMap = new HashMap<>();
|
||||||
defaultRegisterValueMap = new HashMap<Register, RegisterValueStore>();
|
defaultRegisterValueMap = new HashMap<>();
|
||||||
initializeDefaultValues(lang, compilerSpec);
|
initializeDefaultValues(lang, compilerSpec);
|
||||||
initializedCurrentValues();
|
initializedCurrentValues();
|
||||||
|
|
||||||
@ -154,8 +153,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
|||||||
String registerName = table.getName().substring(tableNamePrefix.length());
|
String registerName = table.getName().substring(tableNamePrefix.length());
|
||||||
Register register = getRegister(registerName);
|
Register register = getRegister(registerName);
|
||||||
if (register != null) {
|
if (register != null) {
|
||||||
RangeMapAdapter adapter =
|
RangeMapAdapter adapter = new DatabaseRangeMapAdapter(register, dbHandle,
|
||||||
new DatabaseRangeMapAdapter(register, dbHandle, addrMap, lock, errorHandler);
|
addrMap, lock, errorHandler);
|
||||||
createRegisterValueStore(register, adapter);
|
createRegisterValueStore(register, adapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,7 +219,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(Address start, Address end, Register register) throws ContextChangeException {
|
public void remove(Address start, Address end, Register register)
|
||||||
|
throws ContextChangeException {
|
||||||
lock.acquire();
|
lock.acquire();
|
||||||
boolean restore = false;
|
boolean restore = false;
|
||||||
try {
|
try {
|
||||||
@ -269,6 +269,9 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
|||||||
lock.acquire();
|
lock.acquire();
|
||||||
boolean restore = false;
|
boolean restore = false;
|
||||||
try {
|
try {
|
||||||
|
// FIXME: We do not properly handle painting context across the full
|
||||||
|
// address space which should be avoided. A non-zero image
|
||||||
|
// base offset can result in a improperly coalesced long key-range.
|
||||||
checkContextWrite(value.getRegister(), start, end);
|
checkContextWrite(value.getRegister(), start, end);
|
||||||
restore = !changing; // indicates that we just initiated a change
|
restore = !changing; // indicates that we just initiated a change
|
||||||
changing = true;
|
changing = true;
|
||||||
@ -293,12 +296,7 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
|||||||
// Sort the registers by size so that largest come first.
|
// Sort the registers by size so that largest come first.
|
||||||
// This prevents the remove call below from incorrectly clearing
|
// This prevents the remove call below from incorrectly clearing
|
||||||
// smaller registers that are part of a larger register.
|
// smaller registers that are part of a larger register.
|
||||||
Arrays.sort(registers, new Comparator<Register>() {
|
Arrays.sort(registers, (r1, r2) -> r2.getBitLength() - r1.getBitLength());
|
||||||
@Override
|
|
||||||
public int compare(Register r1, Register r2) {
|
|
||||||
return r2.getBitLength() - r1.getBitLength();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Map all register stores to new registers
|
// Map all register stores to new registers
|
||||||
for (Register register : registers) {
|
for (Register register : registers) {
|
||||||
@ -314,7 +312,8 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
|
|||||||
// Update storage range map
|
// Update storage range map
|
||||||
if (!store.setLanguage(translator, monitor)) {
|
if (!store.setLanguage(translator, monitor)) {
|
||||||
// Clear and remove old register value store
|
// Clear and remove old register value store
|
||||||
Msg.warn(this, "WARNING! Discarding all context for register " + register.getName());
|
Msg.warn(this,
|
||||||
|
"WARNING! Discarding all context for register " + register.getName());
|
||||||
store.clearAll();
|
store.clearAll();
|
||||||
}
|
}
|
||||||
registerValueMap.remove(register);
|
registerValueMap.remove(register);
|
||||||
|
@ -36,8 +36,8 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
|||||||
|
|
||||||
protected AbstractStoredProgramContext(Register[] registers) {
|
protected AbstractStoredProgramContext(Register[] registers) {
|
||||||
super(registers);
|
super(registers);
|
||||||
registerValueMap = new HashMap<Register, RegisterValueStore>();
|
registerValueMap = new HashMap<>();
|
||||||
defaultRegisterValueMap = new HashMap<Register, RegisterValueStore>();
|
defaultRegisterValueMap = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -79,7 +79,7 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
|||||||
public void setRegisterValue(Address start, Address end, RegisterValue value)
|
public void setRegisterValue(Address start, Address end, RegisterValue value)
|
||||||
throws ContextChangeException {
|
throws ContextChangeException {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
throw new IllegalArgumentException("Value cannot be null, use clear() instead!");
|
throw new IllegalArgumentException("Value cannot be null, use remove() instead!");
|
||||||
}
|
}
|
||||||
Register baseRegister = value.getRegister().getBaseRegister();
|
Register baseRegister = value.getRegister().getBaseRegister();
|
||||||
RegisterValueStore store = registerValueMap.get(baseRegister);
|
RegisterValueStore store = registerValueMap.get(baseRegister);
|
||||||
@ -177,8 +177,8 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
|||||||
if (store == null) {
|
if (store == null) {
|
||||||
return new AddressSet().getAddressRanges();
|
return new AddressSet().getAddressRanges();
|
||||||
}
|
}
|
||||||
return new RegisterAddressRangeIterator(register,
|
return new RegisterAddressRangeIterator(register, store.getAddressRangeIterator(start, end),
|
||||||
store.getAddressRangeIterator(start, end), registerValueMap);
|
registerValueMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -198,14 +198,14 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
|||||||
if (store == null) {
|
if (store == null) {
|
||||||
return new AddressSet().getAddressRanges();
|
return new AddressSet().getAddressRanges();
|
||||||
}
|
}
|
||||||
return new RegisterAddressRangeIterator(register,
|
return new RegisterAddressRangeIterator(register, store.getAddressRangeIterator(start, end),
|
||||||
store.getAddressRangeIterator(start, end), defaultRegisterValueMap);
|
defaultRegisterValueMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Register[] getRegistersWithValues() {
|
public Register[] getRegistersWithValues() {
|
||||||
if (registersWithValues == null) {
|
if (registersWithValues == null) {
|
||||||
registersWithValues = new HashSet<Register>();
|
registersWithValues = new HashSet<>();
|
||||||
for (Register register : registers) {
|
for (Register register : registers) {
|
||||||
RegisterValueStore store = registerValueMap.get(register.getBaseRegister());
|
RegisterValueStore store = registerValueMap.get(register.getBaseRegister());
|
||||||
if (store != null && !store.isEmpty()) {
|
if (store != null && !store.isEmpty()) {
|
||||||
@ -247,7 +247,8 @@ abstract public class AbstractStoredProgramContext extends AbstractProgramContex
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(Address start, Address end, Register register) throws ContextChangeException {
|
public void remove(Address start, Address end, Register register)
|
||||||
|
throws ContextChangeException {
|
||||||
if (start.getAddressSpace() != end.getAddressSpace()) {
|
if (start.getAddressSpace() != end.getAddressSpace()) {
|
||||||
throw new AssertException("start and end address must be in the same address space");
|
throw new AssertException("start and end address must be in the same address space");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user