diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractChangeExecutionModelMsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractChangeExecutionModelMsSymbol.java index e18767b251..c4374ba945 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractChangeExecutionModelMsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractChangeExecutionModelMsSymbol.java @@ -152,11 +152,12 @@ public abstract class AbstractChangeExecutionModelMsSymbol extends AbstractMsSym /** * Parses some specific values for this version of symbol. *
- * Implementing class must, in the appropriate order pertinent to itself, parse - * {@link #subtype} and {@link #flag} if - * {@link #model}=={@link #AbstractChangeExecutionModelMsSymbol.Model.COBOL} or - * {@link #offsetToPcodeFunctionTable} and {@link #offsetToSegmentPcodeInformation} if - * {@link #model}=={@link #AbstractChangeExecutionModelMsSymbol.Model.PCODE}. + * Implementing class must, in the appropriate order pertinent to itself, do the following: + *
+ * if {@link #model}=={@link #AbstractChangeExecutionModelMsSymbol.Model.COBOL}, then parse + * {@link #subtype} and {@link #flag} + * else if {@link #model}=={@link #AbstractChangeExecutionModelMsSymbol.Model.PCODE}, then parse + * {@link #offsetToPcodeFunctionTable} and {@link #offsetToSegmentPcodeInformation}.* @param reader {@link PdbByteReader} from which to parse the information. * @throws PdbException Upon not enough data left to parse. */ diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractCompile2MsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractCompile2MsSymbol.java index 31f988e978..6e26527478 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractCompile2MsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractCompile2MsSymbol.java @@ -75,7 +75,7 @@ public abstract class AbstractCompile2MsSymbol extends AbstractMsSymbol { while (reader.hasMore()) { AbstractString string = new StringUtf8Nt(); string.parse(reader); - if (string.get().length() == 0) { + if (string.get().isEmpty()) { break; } stringList.add(string); @@ -298,7 +298,7 @@ public abstract class AbstractCompile2MsSymbol extends AbstractMsSymbol { * @param flagsIn {@code long} containing unsigned int value. */ protected void processFlags(long flagsIn) { - language = new LanguageName((int) (flagsIn & 0xff)); + language = LanguageName.fromValue((int) (flagsIn & 0xff)); flagsIn >>= 8; compiledForEditAndContinue = ((flagsIn & 0x0001) == 0x0001); diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageMsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageMsSymbol.java index 37aa9ee5cd..af7dde9b16 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageMsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageMsSymbol.java @@ -53,10 +53,10 @@ public abstract class AbstractDataHighLevelShaderLanguageMsSymbol extends Abstra } /** - * Returns the register type. - * @return Register type. + * Returns the {@link HLSLRegisterType}. + * @return The {@link HLSLRegisterType}. */ - public String getRegisterType() { + public HLSLRegisterType getRegisterType() { return internals.getRegisterType(); } diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageSymbolInternals.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageSymbolInternals.java index 4e5b2614f9..5f9813fc11 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageSymbolInternals.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDataHighLevelShaderLanguageSymbolInternals.java @@ -15,6 +15,7 @@ */ package ghidra.pdb.pdbreader.symbol; +import ghidra.pdb.PdbByteReader; import ghidra.pdb.pdbreader.*; /** @@ -28,22 +29,14 @@ import ghidra.pdb.pdbreader.*; public abstract class AbstractDataHighLevelShaderLanguageSymbolInternals extends AbstractSymbolInternals { - protected static final String regTypeHLSL[] = { "TEMP", "INPUT", "OUTPUT", "INDEXABLE_TEMP", - "IMMEDIATE32", "IMMEDIATE64", "SAMPLER", "RESOURCE", "CONSTANT_BUFFER", - "IMMEDIATE_CONSTANT_BUFFER", "LABEL", "INPUT_PRIMITIVEID", "OUTPUT_DEPTH", "NULL", - "RASTERIZER", "OUTPUT_COVERAGE_MASK", "STREAM", "FUNCTION_BODY", "FUNCTION_TABLE", - "INTERFACE", "FUNCTION_INPUT", "FUNCTION_OUTPUT", "OUTPUT_CONTROL_POINT_ID", - "INPUT_FORK_INSTANCE_ID", "INPUT_JOIN_INSTANCE_ID", "INPUT_CONTROL_POINT", - "OUTPUT_CONTROL_POINT", "INPUT_PATCH_CONSTANT", "INPUT_DOMAIN_POINT", "THIS_POINTER", - "UNORDERED_ACCESS_VIEW", "THREAD_GROUP_SHARED_MEMORY", "INPUT_THREAD_ID", - "INPUT_THREAD_GROUP_ID", "INPUT_THREAD_ID_IN_GROUP", "INPUT_COVERAGE_MASK", - "INPUT_THREAD_ID_IN_GROUP_FLATTENED", "INPUT_GS_INSTANCE_ID", "OUTPUT_DEPTH_GREATER_EQUAL", - "OUTPUT_DEPTH_LESS_EQUAL", "CYCLE_COUNTER" }; - //============================================================================================== + /** + * Implementing class is required to parse these four fields in the + * {@link #parse(PdbByteReader)} method. + */ protected int typeIndex; protected long dataOffset; - protected int registerType; + protected HLSLRegisterType registerType; protected AbstractString name; //============================================================================================== @@ -59,11 +52,8 @@ public abstract class AbstractDataHighLevelShaderLanguageSymbolInternals return dataOffset; } - public String getRegisterType() { - if (registerType >= 0 && registerType < regTypeHLSL.length) { - return regTypeHLSL[registerType]; - } - return "INVALID_REG"; + public HLSLRegisterType getRegisterType() { + return registerType; } public int getTypeIndex() { diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDefinedSingleAddressRangeMsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDefinedSingleAddressRangeMsSymbol.java index 5309dc2271..585bc92733 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDefinedSingleAddressRangeMsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AbstractDefinedSingleAddressRangeMsSymbol.java @@ -112,7 +112,7 @@ public abstract class AbstractDefinedSingleAddressRangeMsSymbol extends Abstract protected void emitRangeAndGaps(StringBuilder builder) { builder.append(addressRange); builder.append(String.format(", %d Gaps", addressGapList.size())); - if (addressGapList.size() == 0) { + if (addressGapList.isEmpty()) { return; } builder.append(" (startOffset, length):"); diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AddressGap.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AddressGap.java index 8376eb2b56..97da2b08b9 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AddressGap.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/AddressGap.java @@ -18,7 +18,9 @@ package ghidra.pdb.pdbreader.symbol; import ghidra.pdb.*; /** - * Address Gap property used by a number of specific PDB symbol types. + * Address Gap property used by a number of specific PDB symbol types. This seems to specify + * one of potentially many address gaps in an address range. + * @see AbstractDefinedSingleAddressRangeMsSymbol */ public class AddressGap extends AbstractParsableItem { diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/Compile3MsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/Compile3MsSymbol.java index b5f9ce5a34..2a67f658e0 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/Compile3MsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/Compile3MsSymbol.java @@ -329,7 +329,7 @@ public class Compile3MsSymbol extends AbstractMsSymbol { * @param flagsIn {@code long} containing unsigned int value. */ protected void processFlags(long flagsIn) { - language = new LanguageName((int) (flagsIn & 0xff)); + language = LanguageName.fromValue((int) (flagsIn & 0xff)); flagsIn >>= 8; compiledForEditAndContinue = ((flagsIn & 0x0001) == 0x0001); diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/CompileFlagsMsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/CompileFlagsMsSymbol.java index 59c015ae53..70e15f8972 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/CompileFlagsMsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/CompileFlagsMsSymbol.java @@ -93,7 +93,7 @@ public class CompileFlagsMsSymbol extends AbstractMsSymbol { */ protected void processFlags(byte[] flagsIn) { int flagsByte = flagsIn[0]; - language = new LanguageName(flagsByte); + language = LanguageName.fromValue(flagsByte); flagsByte = flagsIn[1]; pcodePresent = ((flagsByte & 0x0001) == 0x0001); diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals.java index 74d2db24ad..f28e1ed47a 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals.java @@ -46,8 +46,8 @@ public class DataHighLevelShaderLanguageSymbolInternals @Override public void emit(StringBuilder builder) { - builder.append( - String.format(": Type: %s. %s\n", pdb.getTypeRecord(typeIndex), getRegisterType())); + builder.append(String.format(": Type: %s. %s\n", pdb.getTypeRecord(typeIndex), + getRegisterType().toString())); builder.append(String.format( " base data: slot = %d offset = %d, texture slot = %d, sampler slot = %d, UAV slot = %d\n", dataSlot, dataOffset, textureSlotStart, samplerSlotStart, uavSlotStart)); @@ -59,7 +59,8 @@ public class DataHighLevelShaderLanguageSymbolInternals typeIndex = reader.parseInt(); pdb.pushDependencyStack(new CategoryIndex(CategoryIndex.Category.DATA, typeIndex)); pdb.popDependencyStack(); - registerType = reader.parseUnsignedShortVal(); + registerType = HLSLRegisterType.fromValue( + reader.parseUnsignedShortVal()); dataSlot = reader.parseUnsignedShortVal(); dataOffset = reader.parseUnsignedShortVal(); textureSlotStart = reader.parseUnsignedShortVal(); diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32.java index 5670876626..ead3d55f5b 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32.java @@ -46,8 +46,8 @@ public class DataHighLevelShaderLanguageSymbolInternals32 @Override public void emit(StringBuilder builder) { - builder.append( - String.format(": Type: %s. %s\n", pdb.getTypeRecord(typeIndex), getRegisterType())); + builder.append(String.format(": Type: %s. %s\n", pdb.getTypeRecord(typeIndex), + getRegisterType().toString())); builder.append(String.format( " base data: slot = %d offset = %d, texture slot = %d, sampler slot = %d, UAV slot = %d\n", dataSlot, dataOffset, textureSlotStart, samplerSlotStart, uavSlotStart)); @@ -63,7 +63,8 @@ public class DataHighLevelShaderLanguageSymbolInternals32 textureSlotStart = reader.parseUnsignedIntVal(); samplerSlotStart = reader.parseUnsignedIntVal(); uavSlotStart = reader.parseUnsignedIntVal(); - registerType = reader.parseUnsignedShortVal(); + registerType = HLSLRegisterType.fromValue( + reader.parseUnsignedShortVal()); name.parse(reader); } diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32Extended.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32Extended.java index e2e137a463..fc1cd76a07 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32Extended.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/DataHighLevelShaderLanguageSymbolInternals32Extended.java @@ -45,8 +45,8 @@ public class DataHighLevelShaderLanguageSymbolInternals32Extended @Override public void emit(StringBuilder builder) { - builder.append( - String.format(": Type: %s. %s\n", pdb.getTypeRecord(typeIndex), getRegisterType())); + builder.append(String.format(": Type: %s. %s\n", pdb.getTypeRecord(typeIndex), + getRegisterType().toString())); builder.append(String.format( " register index = %d, base data offset start = %d, bind space = %d, bind slot = %d\n", registerIndex, dataOffset, bindSpace, bindSlot)); @@ -62,7 +62,8 @@ public class DataHighLevelShaderLanguageSymbolInternals32Extended dataOffset = reader.parseUnsignedIntVal(); bindSpace = reader.parseUnsignedIntVal(); bindSlot = reader.parseUnsignedIntVal(); - registerType = reader.parseUnsignedShortVal(); + registerType = HLSLRegisterType.fromValue( + reader.parseUnsignedShortVal()); name.parse(reader); } diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/EnvironmentBlockMsSymbol.java b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/EnvironmentBlockMsSymbol.java index bf11e82d0f..94f270cc07 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/EnvironmentBlockMsSymbol.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/pdb/pdbreader/symbol/EnvironmentBlockMsSymbol.java @@ -35,6 +35,13 @@ public class EnvironmentBlockMsSymbol extends AbstractMsSymbol { private int flags; // TODO: MSFT API struct shows rev; usage shows fEC somewhere (not in struct) private boolean rev; + /** + * These appear to be pairs of strings that we then output as + *
+ * string1 = string2 + *
+ * string3 = string4...
+ */
private List
- * Note: we do not necessarily understand each of these data type classes. Refer to the
- * base class for more information.
*/
public enum VtShapeDescriptorMsProperty {
diff --git a/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/symbol/SymbolsTest.java b/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/symbol/SymbolsTest.java
index d3356a0e77..066b272fde 100644
--- a/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/symbol/SymbolsTest.java
+++ b/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/symbol/SymbolsTest.java
@@ -15,7 +15,7 @@
*/
package ghidra.pdb.pdbreader.symbol;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
import java.math.BigInteger;
@@ -35,12 +35,13 @@ public class SymbolsTest extends AbstractGenericTest {
// ensure consistency across the tests. We are setting it int the pdb here (in the static
// assignment block), but we do not know the order that any tests are run, so having the
// same value will ensure consistent results.
- private static final int processorIndex = 0x0000;
- //private static TypeProgramInterface tpi;
- private static SymbolParser symbolParser;
- static {
+ private int processorIndex;
+ private SymbolParser symbolParser;
+
+ public SymbolsTest() {
try (DummyPdb700 dummyPdb700 = new DummyPdb700(4096, 4096, 4096, 4096)) {
pdb = dummyPdb700;
+ processorIndex = 0x0000;
pdb.setTargetProcessorIndexNumber(processorIndex);
symbolParser = pdb.getSymbolParser();
@@ -60,7 +61,7 @@ public class SymbolsTest extends AbstractGenericTest {
dummyPdb700.setItemRecord(4096, item);
}
catch (Exception e) {
- Msg.error(null, "Error in static initialization of test", e);
+ Msg.error(null, "Error in initialization of test", e);
assert false;
}
}
diff --git a/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/type/TypesTest.java b/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/type/TypesTest.java
index 0893833c1e..9b2afcd04c 100644
--- a/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/type/TypesTest.java
+++ b/Ghidra/Features/PDB/src/test/java/ghidra/pdb/pdbreader/type/TypesTest.java
@@ -15,7 +15,7 @@
*/
package ghidra.pdb.pdbreader.type;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
import java.math.BigInteger;
@@ -36,18 +36,20 @@ public class TypesTest extends AbstractGenericTest {
// ensure consistency across the tests. We are setting it int the pdb here (in the static
// assignment block), but we do not know the order that any tests are run, so having the
// same value will ensure consistent results.
- private static final int processorIndex = 0x0000;
- private static int stringIdMsType1;
- private static int stringIdMsType2;
- private static int substringListMsType1;
- private static int referencedSymbolMsType1;
- private static int methodList16MsType1;
- private static int methodListMsType1;
- private static int vtShapeMsType1;
- private static TypeParser typeParser;
- static {
+ private int processorIndex;
+ private int stringIdMsType1;
+ private int stringIdMsType2;
+ private int substringListMsType1;
+ private int referencedSymbolMsType1;
+ private int methodList16MsType1;
+ private int methodListMsType1;
+ private int vtShapeMsType1;
+ private TypeParser typeParser;
+
+ public TypesTest() {
try (DummyPdb700 dummyPdb700 = new DummyPdb700(4096, 4096, 4096, 4096)) {
pdb = dummyPdb700;
+ processorIndex = 0x0000;
pdb.setTargetProcessorIndexNumber(processorIndex);
typeParser = pdb.getTypeParser();