mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-24 13:21:22 +08:00
Merge branch 'GP-2482_ghidra1_PR-4446_astrelsky_FlatProgramAPI_mods'
This commit is contained in:
@@ -246,7 +246,7 @@ public class FlatProgramAPI {
|
||||
/**
|
||||
* Clears the code units (instructions or data) in the specified range.
|
||||
* @param start the start address
|
||||
* @param end the end address
|
||||
* @param end the end address (INCLUSIVE)
|
||||
* @throws CancelledException if cancelled
|
||||
*/
|
||||
public final void clearListing(Address start, Address end) throws CancelledException {
|
||||
@@ -1506,7 +1506,7 @@ public class FlatProgramAPI {
|
||||
/**
|
||||
* Returns the non-function namespace with the given name contained inside the
|
||||
* specified parent namespace.
|
||||
* Pass <code>null</code> for namespace to indicate the global namespace.
|
||||
* Pass <code>null</code> for parent to indicate the global namespace.
|
||||
* @param parent the parent namespace, or null for global namespace
|
||||
* @param namespaceName the requested namespace's name
|
||||
* @return the namespace with the given name or null if not found
|
||||
@@ -1514,6 +1514,66 @@ public class FlatProgramAPI {
|
||||
public final Namespace getNamespace(Namespace parent, String namespaceName) {
|
||||
return currentProgram.getSymbolTable().getNamespace(namespaceName, parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link Namespace} with the given name contained inside the
|
||||
* specified parent namespace.
|
||||
* Pass <code>null</code> for parent to indicate the global namespace.
|
||||
* If a {@link Namespace} or {@link GhidraClass} with the given name already exists, the
|
||||
* existing one will be returned.
|
||||
* @param parent the parent namespace, or null for global namespace
|
||||
* @param namespaceName the requested namespace's name
|
||||
* @return the namespace with the given name
|
||||
* @throws DuplicateNameException if a {@link Library} symbol exists with the given name
|
||||
* @throws InvalidInputException if the name is invalid
|
||||
* @throws IllegalArgumentException if parent Namespace does not correspond to
|
||||
* <code>currerntProgram</code>
|
||||
*/
|
||||
public final Namespace createNamespace(Namespace parent, String namespaceName)
|
||||
throws DuplicateNameException, InvalidInputException {
|
||||
SymbolTable symbolTable = currentProgram.getSymbolTable();
|
||||
Namespace ns = symbolTable.getNamespace(namespaceName, parent);
|
||||
if (ns != null) {
|
||||
SymbolType type = ns.getSymbol().getSymbolType();
|
||||
if (type == SymbolType.NAMESPACE || type == SymbolType.CLASS) {
|
||||
return ns;
|
||||
}
|
||||
}
|
||||
return symbolTable.createNameSpace(parent, namespaceName, SourceType.USER_DEFINED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link GhidraClass} with the given name contained inside the
|
||||
* specified parent namespace.
|
||||
* Pass <code>null</code> for parent to indicate the global namespace.
|
||||
* If a GhidraClass with the given name already exists, the existing one will be returned.
|
||||
* @param parent the parent namespace, or null for global namespace
|
||||
* @param className the requested classes name
|
||||
* @return the GhidraClass with the given name
|
||||
* @throws InvalidInputException if the name is invalid
|
||||
* @throws DuplicateNameException thrown if a {@link Library} or {@link Namespace}
|
||||
* symbol already exists with the given name.
|
||||
* Use {@link SymbolTable#convertNamespaceToClass(Namespace)} for converting an
|
||||
* existing Namespace to a GhidraClass.
|
||||
* @throws IllegalArgumentException if the given parent namespace is not from
|
||||
* the {@link #currentProgram}.
|
||||
* @throws ConcurrentModificationException if the given parent has been deleted
|
||||
* @throws IllegalArgumentException if parent Namespace does not correspond to
|
||||
* <code>currerntProgram</code>
|
||||
* @see SymbolTable#convertNamespaceToClass(Namespace)
|
||||
*/
|
||||
public final GhidraClass createClass(Namespace parent, String className)
|
||||
throws DuplicateNameException, InvalidInputException {
|
||||
SymbolTable symbolTable = currentProgram.getSymbolTable();
|
||||
Namespace ns = symbolTable.getNamespace(className, parent);
|
||||
if (ns != null) {
|
||||
SymbolType type = ns.getSymbol().getSymbolType();
|
||||
if (type == SymbolType.CLASS) {
|
||||
return (GhidraClass) ns;
|
||||
}
|
||||
}
|
||||
return symbolTable.createClass(parent, className, SourceType.USER_DEFINED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a fragment in the root folder of the default program tree.
|
||||
|
||||
+7
-2
@@ -2579,6 +2579,11 @@ public class SymbolManager implements SymbolTable, ManagerDB {
|
||||
|
||||
checkValidNamespaceArgument(namespace);
|
||||
|
||||
if (namespace.isGlobal() || namespace.isLibrary()) {
|
||||
throw new IllegalArgumentException(
|
||||
"May not convert namespace to class: " + namespace.getName(true));
|
||||
}
|
||||
|
||||
Symbol namespaceSymbol = namespace.getSymbol();
|
||||
String name = namespaceSymbol.getName();
|
||||
SourceType originalSource = namespaceSymbol.getSource();
|
||||
@@ -2729,7 +2734,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
|
||||
* it will be returned.
|
||||
* @param addr the address for the new symbol (memory or external)
|
||||
* @param name the name of the new symbol
|
||||
* @param namespace the namespace for the new symbol
|
||||
* @param namespace the namespace for the new symbol (null may be specified for global namespace)
|
||||
* @param source the SourceType of the new symbol
|
||||
* @param stringData special use depending on the symbol type and whether or not it is external
|
||||
* @return the new symbol
|
||||
@@ -2789,7 +2794,7 @@ public class SymbolManager implements SymbolTable, ManagerDB {
|
||||
*
|
||||
* @param addr the address for the new symbol
|
||||
* @param name the name of the new symbol
|
||||
* @param namespace the namespace for the new symbol
|
||||
* @param namespace the namespace for the new symbol (null may be specified for global namespace)
|
||||
* @param source the SourceType of the new symbol
|
||||
* @param stringData special use depending on the symbol type and whether or not it is external.
|
||||
* @return the new symbol
|
||||
|
||||
+28
-5
@@ -86,7 +86,8 @@ public interface SymbolTable {
|
||||
* @throws InvalidInputException thrown if names contains white space, is zero length, or is
|
||||
* null for non-default source. Also thrown if invalid parentNamespace is specified.
|
||||
* @throws IllegalArgumentException if you try to set the source to DEFAULT for a symbol type
|
||||
* that doesn't allow it, or an improper addr is specified
|
||||
* that doesn't allow it, specify an improper addr, or specify a namespace which does not
|
||||
* correspond to this symbol table's program.
|
||||
*/
|
||||
public Symbol createLabel(Address addr, String name, Namespace namespace, SourceType source)
|
||||
throws InvalidInputException;
|
||||
@@ -137,6 +138,8 @@ public interface SymbolTable {
|
||||
* @param namespace the namespace of the symbol to retrieve. May be null which indicates global
|
||||
* namespace.
|
||||
* @return the symbol which matches the specified criteria or null if not found
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
* @see #getGlobalSymbol(String, Address) for a convenience method if the namespace is the
|
||||
* global namespace.
|
||||
*/
|
||||
@@ -182,6 +185,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the symbols to search for.
|
||||
* @param namespace the namespace to search. If null, then the global namespace is assumed.
|
||||
* @return a list of all the label or function symbols with the given name in the given namespace.
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public List<Symbol> getLabelOrFunctionSymbols(String name, Namespace namespace);
|
||||
|
||||
@@ -190,6 +195,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the namespace symbol to retrieve.
|
||||
* @param namespace the namespace containing the symbol to retrieve.
|
||||
* @return a generic namespace symbol with the given name in the given namespace.
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public Symbol getNamespaceSymbol(String name, Namespace namespace);
|
||||
|
||||
@@ -205,6 +212,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the class.
|
||||
* @param namespace the namespace to search for the class.
|
||||
* @return the class symbol with the given name in the given namespace.
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public Symbol getClassSymbol(String name, Namespace namespace);
|
||||
|
||||
@@ -213,6 +222,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the parameter.
|
||||
* @param namespace the namespace (function) to search for the class.
|
||||
* @return the parameter symbol with the given name in the given namespace.
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public Symbol getParameterSymbol(String name, Namespace namespace);
|
||||
|
||||
@@ -221,6 +232,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the local variable.
|
||||
* @param namespace the namespace (function) to search for the class.
|
||||
* @return the local variable symbol with the given name in the given namespace.
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public Symbol getLocalVariableSymbol(String name, Namespace namespace);
|
||||
|
||||
@@ -233,6 +246,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the symbols to retrieve.
|
||||
* @param namespace the namespace to search for symbols.
|
||||
* @return all symbols which satisfy specified criteria
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public List<Symbol> getSymbols(String name, Namespace namespace);
|
||||
|
||||
@@ -252,6 +267,8 @@ public interface SymbolTable {
|
||||
* @param name the name of the namespace to be retrieved.
|
||||
* @param namespace the parent namespace of the namespace to be retrieved.
|
||||
* @return the namespace with the given name in the given parent namespace.
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public Namespace getNamespace(String name, Namespace namespace);
|
||||
|
||||
@@ -333,6 +350,8 @@ public interface SymbolTable {
|
||||
*
|
||||
* @param namespace the namespace to search for symbols.
|
||||
* @return symbol iterator
|
||||
* @throws IllegalArgumentException amespace which does not correspond to this
|
||||
* symbol table's program.
|
||||
*/
|
||||
public SymbolIterator getSymbols(Namespace namespace);
|
||||
|
||||
@@ -527,14 +546,15 @@ public interface SymbolTable {
|
||||
|
||||
/**
|
||||
* Create a class namespace in the given parent namespace.
|
||||
* @param parent parent namespace
|
||||
* @param parent parent namespace (may be null for global namespace)
|
||||
* @param name name of the namespace
|
||||
* @param source the source of this class namespace's symbol
|
||||
* @return new class namespace
|
||||
* @throws DuplicateNameException thrown if another non function or label symbol exists with
|
||||
* the given name
|
||||
* @throws InvalidInputException throw if the name has invalid characters or is null
|
||||
* @throws IllegalArgumentException if you try to set the source to 'Symbol.DEFAULT'.
|
||||
* @throws IllegalArgumentException if you try to set the source to 'Symbol.DEFAULT'
|
||||
* or specify a parent Namespace which does not correspond to this symbol table's program.
|
||||
*/
|
||||
public GhidraClass createClass(Namespace parent, String name, SourceType source)
|
||||
throws DuplicateNameException, InvalidInputException;
|
||||
@@ -565,14 +585,15 @@ public interface SymbolTable {
|
||||
|
||||
/**
|
||||
* Creates a new namespace.
|
||||
* @param parent the parent namespace for the new namespace
|
||||
* @param parent the parent namespace for the new namespace (may be null for global namespace)
|
||||
* @param name the name of the new namespace
|
||||
* @param source the source of this namespace's symbol
|
||||
* @return the new Namespace object.
|
||||
* @throws DuplicateNameException thrown if another non function or label symbol
|
||||
* exists with the given name
|
||||
* @throws InvalidInputException if the name is invalid.
|
||||
* @throws IllegalArgumentException if you try to set the source to 'Symbol.DEFAULT'.
|
||||
* @throws IllegalArgumentException if you try to set the source to 'Symbol.DEFAULT'
|
||||
* or specify a parent Namespace which does not correspond to this symbol table's program.
|
||||
*/
|
||||
public Namespace createNameSpace(Namespace parent, String name, SourceType source)
|
||||
throws DuplicateNameException, InvalidInputException;
|
||||
@@ -585,6 +606,8 @@ public interface SymbolTable {
|
||||
* @throws IllegalArgumentException if the given parent namespace is from a different program
|
||||
* than that of this symbol table
|
||||
* @throws ConcurrentModificationException if the given parent namespace has been deleted
|
||||
* @throws IllegalArgumentException namespace does not correspond to this symbol table's program
|
||||
* or namespace not allowed (e.g., global or library namespace).
|
||||
*/
|
||||
public GhidraClass convertNamespaceToClass(Namespace namespace);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user