diff --git a/Ghidra/Debug/Debugger-agent-gdb/certification.manifest b/Ghidra/Debug/Debugger-agent-gdb/certification.manifest index 4e32539fa4..aaa7ad0026 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/certification.manifest +++ b/Ghidra/Debug/Debugger-agent-gdb/certification.manifest @@ -2,5 +2,6 @@ ##MODULE IP: JSch License Module.manifest||GHIDRA||||END| data/scripts/fallback_info_proc_mappings.gdb||GHIDRA||||END| +data/scripts/fallback_maintenance_info_sections.gdb||GHIDRA||||END| data/scripts/getpid-linux-i386.gdb||GHIDRA||||END| data/scripts/wine32_info_proc_mappings.gdb||GHIDRA||||END| diff --git a/Ghidra/Debug/Debugger-agent-gdb/data/scripts/fallback_maintenance_info_sections.gdb b/Ghidra/Debug/Debugger-agent-gdb/data/scripts/fallback_maintenance_info_sections.gdb new file mode 100644 index 0000000000..8398a8b023 --- /dev/null +++ b/Ghidra/Debug/Debugger-agent-gdb/data/scripts/fallback_maintenance_info_sections.gdb @@ -0,0 +1,4 @@ +define maintenance info sections +echo Exec file: `name_of_executable', file type elf64-x86-64. \n +echo [0] 0x0->0xFFFFFFFFFFFFFFFF at 0x00000000: .text ALLOC LOAD READWRITE CODE HAS_CONTENTS +end diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/MemoryRange.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/MemoryRange.java index 157074e6ea..0fbe6a492f 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/MemoryRange.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/MemoryRange.java @@ -27,7 +27,7 @@ public class MemoryRange implements StructConverter { public final static String NAME = "MINIDUMP_MEMORY_RANGE"; private long startOfMemoryRange; - private int dataSize; + private long dataSize; private int RVA; private DumpFileReader reader; @@ -44,7 +44,7 @@ public class MemoryRange implements StructConverter { reader.setPointerIndex(index); setStartOfMemoryRange(reader.readNextLong()); - setDataSize(reader.readNextInt()); + setDataSize(reader.readNextUnsignedInt()); setRVA(reader.readNextInt()); } @@ -52,6 +52,7 @@ public class MemoryRange implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -72,11 +73,11 @@ public class MemoryRange implements StructConverter { this.startOfMemoryRange = startOfMemoryRange; } - public int getDataSize() { + public long getDataSize() { return dataSize; } - public void setDataSize(int dataSize) { + public void setDataSize(long dataSize) { this.dataSize = dataSize; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Module.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Module.java index 8c83415084..1f10963953 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Module.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Module.java @@ -27,7 +27,7 @@ public class Module implements StructConverter { public final static String NAME = "MINIDUMP_MODULE"; private long baseOfImage; - private int sizeOfImage; + private long sizeOfImage; private int checkSum; private int timeDateStamp; private int moduleNameRVA; @@ -70,7 +70,7 @@ public class Module implements StructConverter { reader.setPointerIndex(index); setBaseOfImage(reader.readNextLong()); - setSizeOfImage(reader.readNextInt()); + setSizeOfImage(reader.readNextUnsignedInt()); setCheckSum(reader.readNextInt()); setTimeDateStamp(reader.readNextInt()); setModuleNameRVA(reader.readNextInt()); @@ -113,6 +113,7 @@ public class Module implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -164,11 +165,11 @@ public class Module implements StructConverter { this.baseOfImage = baseOfImage; } - public int getSizeOfImage() { + public long getSizeOfImage() { return sizeOfImage; } - public void setSizeOfImage(int sizeOfImage) { + public void setSizeOfImage(long sizeOfImage) { this.sizeOfImage = sizeOfImage; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Thread.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Thread.java index 048cc397d8..5430f2939d 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Thread.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Thread.java @@ -33,7 +33,7 @@ public class Thread implements StructConverter { private int priority; private long teb; private long stackStartOfMemoryRange; - private int stackDataSize; + private long stackDataSize; private int stackRVA; private int contextDataSize; private int contextRVA; @@ -57,7 +57,7 @@ public class Thread implements StructConverter { setPriority(reader.readNextInt()); setTeb(reader.readNextLong()); setStackStartOfMemoryRange(reader.readNextLong()); - setStackDataSize(reader.readNextInt()); + setStackDataSize(reader.readNextUnsignedInt()); setStackRVA(reader.readNextInt()); setContextDataSize(reader.readNextInt()); setContextRVA(reader.readNextInt()); @@ -67,6 +67,7 @@ public class Thread implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -149,11 +150,11 @@ public class Thread implements StructConverter { this.stackStartOfMemoryRange = stackStartOfMemoryRange; } - public int getStackDataSize() { + public long getStackDataSize() { return stackDataSize; } - public void setStackDataSize(int stackDataSize) { + public void setStackDataSize(long stackDataSize) { this.stackDataSize = stackDataSize; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/ThreadEx.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/ThreadEx.java index 5f3086c008..230f35ddfc 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/ThreadEx.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/ThreadEx.java @@ -33,7 +33,7 @@ public class ThreadEx implements StructConverter { private int priority; private long teb; private long stackStartOfMemoryRange; - private int stackDataSize; + private long stackDataSize; private int stackRVA; private int contextDataSize; private int contextRVA; @@ -60,7 +60,7 @@ public class ThreadEx implements StructConverter { setPriority(reader.readNextInt()); setTeb(reader.readNextLong()); setStackStartOfMemoryRange(reader.readNextLong()); - setStackDataSize(reader.readNextInt()); + setStackDataSize(reader.readNextUnsignedInt()); setStackRVA(reader.readNextInt()); setContextDataSize(reader.readNextInt()); setContextRVA(reader.readNextInt()); @@ -73,6 +73,7 @@ public class ThreadEx implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -161,11 +162,11 @@ public class ThreadEx implements StructConverter { this.stackStartOfMemoryRange = stackStartOfMemoryRange; } - public int getStackDataSize() { + public long getStackDataSize() { return stackDataSize; } - public void setStackDataSize(int stackDataSize) { + public void setStackDataSize(long stackDataSize) { this.stackDataSize = stackDataSize; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/UnloadedModule.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/UnloadedModule.java index 4665b238c2..cbe1e441d5 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/UnloadedModule.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/UnloadedModule.java @@ -27,7 +27,7 @@ public class UnloadedModule implements StructConverter { public final static String NAME = "MINIDUMP_UNLOADED_MODULE"; private long baseOfImage; - private int sizeOfImage; + private long sizeOfImage; private int checkSum; private int timeDateStamp; private int moduleNameRVA; @@ -46,7 +46,7 @@ public class UnloadedModule implements StructConverter { reader.setPointerIndex(index); setBaseOfImage(reader.readNextLong()); - setSizeOfImage(reader.readNextInt()); + setSizeOfImage(reader.readNextUnsignedInt()); setCheckSum(reader.readNextInt()); setTimeDateStamp(reader.readNextInt()); setModuleNameRVA(reader.readNextInt()); @@ -56,6 +56,7 @@ public class UnloadedModule implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -78,11 +79,11 @@ public class UnloadedModule implements StructConverter { this.baseOfImage = baseOfImage; } - public int getSizeOfImage() { + public long getSizeOfImage() { return sizeOfImage; } - public void setSizeOfImage(int sizeOfImage) { + public void setSizeOfImage(long sizeOfImage) { this.sizeOfImage = sizeOfImage; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/KldrDataTableEntry.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/KldrDataTableEntry.java index d9c3c5ef9f..26a881911e 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/KldrDataTableEntry.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/KldrDataTableEntry.java @@ -34,7 +34,7 @@ public class KldrDataTableEntry implements StructConverter { private long NonPagedDebugInfo; private long DllBase; private long EntryPoint; - private int SizeOfImage; + private long SizeOfImage; private long FullDllName; private long BaseDllName; private int Flags; @@ -69,7 +69,7 @@ public class KldrDataTableEntry implements StructConverter { setNonPagedDebugInfo(reader.readNextPointer()); setDllBase(reader.readNextPointer()); setEntryPoint(reader.readNextPointer()); - setSizeOfImage(reader.readNextInt()); + setSizeOfImage(reader.readNextUnsignedInt()); reader.readNextInt(); reader.readNextPointer(); setFullDllName(reader.readNextPointer()); @@ -89,6 +89,7 @@ public class KldrDataTableEntry implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -152,11 +153,11 @@ public class KldrDataTableEntry implements StructConverter { EntryPoint = entryPoint; } - public int getSizeOfImage() { + public long getSizeOfImage() { return SizeOfImage; } - public void setSizeOfImage(int sizeOfImage) { + public void setSizeOfImage(long sizeOfImage) { SizeOfImage = sizeOfImage; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/Pagedump.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/Pagedump.java index d3af56676c..fc7b1e3f0c 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/Pagedump.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/Pagedump.java @@ -128,7 +128,7 @@ public class Pagedump extends DumpFile { is32Bit = header.is32Bit(); isPAE = header.getPaeEnabled() != 0; - int hdrLen = header.toDataType().getLength(); + long hdrLen = header.toDataType().getLength(); addInteriorAddressObject("DumpHeader", 0, 0L, hdrLen); data.add(new DumpData(0, header.toDataType())); @@ -143,7 +143,7 @@ public class Pagedump extends DumpFile { case DUMP_TYPE_BITMAP_FULL: case DUMP_TYPE_BITMAP_KERNEL: int signature = reader.readInt(hdrLen); - int offset = hdrLen; + long offset = hdrLen; switch (signature) { case SIG_SUMMARY: case SIG_FULL: @@ -175,7 +175,7 @@ public class Pagedump extends DumpFile { addInteriorAddressObject("DumpHeader", hdrLen, hdrLen, triage.getSizeOfDump()); - int next = hdrLen + triage.getSizeOfDump(); + long next = hdrLen + triage.getSizeOfDump(); addInteriorAddressObject("Unknown", next, next, reader.length() - next); @@ -424,7 +424,7 @@ public class Pagedump extends DumpFile { continue; } Long addr = pfnToVA.get(pfnx); - addInteriorAddressObject(DumpFileLoader.MEMORY, fileOffset(pfnx), addr, 0x1000); + addInteriorAddressObject(DumpFileLoader.MEMORY, fileOffset(pfnx), addr, 0x1000L); monitor.setProgress(count++); } /* @@ -462,6 +462,7 @@ public class Pagedump extends DumpFile { return Integer.toHexString(header.getMachineImageType()); } + @Override public void analyze(TaskMonitor monitor) { boolean analyzeEmbeddedObjects = OptionUtils.getBooleanOptionValue(ANALYZE_EMBEDDED_OBJECTS_OPTION_NAME, @@ -611,9 +612,10 @@ public class Pagedump extends DumpFile { */ /** - * Get default Pagedump loader options. - * Includes {@link #DEBUG_DATA_PATH_OPTION_NAME} plus default {@link DumpFile} options - * (see {@link DumpFile#getDefaultOptions(DumpFileReader)}). + * Get default Pagedump loader options. Includes + * {@link #DEBUG_DATA_PATH_OPTION_NAME} plus default {@link DumpFile} options (see + * {@link DumpFile#getDefaultOptions(DumpFileReader)}). + * * @param reader dump file reader * @return default collection of Pagedump loader options */ diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDataBlock.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDataBlock.java index ff0eb69bca..bbe52c9156 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDataBlock.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDataBlock.java @@ -27,7 +27,7 @@ public class TriageDataBlock implements StructConverter { private long address; private int offset; - private int size; + private long size; private DumpFileReader reader; private long index; @@ -46,7 +46,7 @@ public class TriageDataBlock implements StructConverter { setAddress(reader.readNextPointer()); setOffset(reader.readNextInt()); - setSize(reader.readNextInt()); + setSize(reader.readNextUnsignedInt()); } @@ -79,11 +79,11 @@ public class TriageDataBlock implements StructConverter { this.offset = offset; } - public int getSize() { + public long getSize() { return size; } - public void setSize(int size) { + public void setSize(long size) { this.size = size; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDump.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDump.java index 00255af9a6..a409ac84d6 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDump.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDump.java @@ -26,7 +26,7 @@ public class TriageDump implements StructConverter { public final static String NAME = "PAGEDUMP_TRIAGE"; private int servicePackBuild; - private int sizeOfDump; + private long sizeOfDump; private int validOffset; private int contextOffset; private int exceptionOffset; @@ -75,7 +75,7 @@ public class TriageDump implements StructConverter { reader.setPointerIndex(index); setServicePackBuild(reader.readNextInt()); - setSizeOfDump(reader.readNextInt()); + setSizeOfDump(reader.readNextUnsignedInt()); setValidOffset(reader.readNextInt()); setContextOffset(reader.readNextInt()); setExceptionOffset(reader.readNextInt()); @@ -156,11 +156,11 @@ public class TriageDump implements StructConverter { this.servicePackBuild = servicePackBuild; } - public int getSizeOfDump() { + public long getSizeOfDump() { return sizeOfDump; } - public void setSizeOfDump(int sizeOfDump) { + public void setSizeOfDump(long sizeOfDump) { this.sizeOfDump = sizeOfDump; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Module.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Module.java index 2e96608fdf..077d0bc787 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Module.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Module.java @@ -27,7 +27,7 @@ public class Module implements StructConverter { public final static String NAME = "MODULE_"; private long moduleBase; - private int moduleSize; + private long moduleSize; private int moduleNameLength; private String moduleName; @@ -45,7 +45,7 @@ public class Module implements StructConverter { reader.setPointerIndex(index); setModuleBase(reader.readNextPointer()); - setModuleSize(reader.readNextInt()); + setModuleSize(reader.readNextUnsignedInt()); setModuleNameLength(reader.readNextInt()); setModuleName(reader.readNextAsciiString(getModuleNameLength())); } @@ -53,6 +53,7 @@ public class Module implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME + Long.toHexString(moduleBase), 0); @@ -85,14 +86,14 @@ public class Module implements StructConverter { /** * @return the moduleSize */ - public int getModuleSize() { + public long getModuleSize() { return moduleSize; } /** * @param moduleSize the moduleSize to set */ - public void setModuleSize(int moduleSize) { + public void setModuleSize(long moduleSize) { this.moduleSize = moduleSize; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Thread.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Thread.java index a82488673d..3e20e87f22 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Thread.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Thread.java @@ -33,7 +33,7 @@ public class Thread implements StructConverter { private int priority; private long teb; private long stackStartOfMemoryRange; - private int stackDataSize; + private long stackDataSize; private int stackRVA; private int contextDataSize; private int contextRVA; @@ -57,7 +57,7 @@ public class Thread implements StructConverter { setPriority(reader.readNextInt()); setTeb(reader.readNextLong()); setStackStartOfMemoryRange(reader.readNextLong()); - setStackDataSize(reader.readNextInt()); + setStackDataSize(reader.readNextUnsignedInt()); setStackRVA(reader.readNextInt()); setContextDataSize(reader.readNextInt()); setContextRVA(reader.readNextInt()); @@ -67,6 +67,7 @@ public class Thread implements StructConverter { /** * @see ghidra.app.util.bin.StructConverter#toDataType() */ + @Override public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); @@ -151,11 +152,11 @@ public class Thread implements StructConverter { this.stackStartOfMemoryRange = stackStartOfMemoryRange; } - public int getStackDataSize() { + public long getStackDataSize() { return stackDataSize; } - public void setStackDataSize(int stackDataSize) { + public void setStackDataSize(long stackDataSize) { this.stackDataSize = stackDataSize; } diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Userdump.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Userdump.java index c446eaa419..de8a522333 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Userdump.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/Userdump.java @@ -72,9 +72,9 @@ public class Userdump extends DumpFile { DataType dt = header.toDataType(); data.add(new DumpData(0, "DumpHeader", dt.getLength())); - int regionOffset = (int) header.getMemoryRegionOffset(); + long regionOffset = header.getMemoryRegionOffset(); addInteriorAddressObject("DumpHeader", 0, 0L, regionOffset); - int blocksLength = (int) (reader.length() - regionOffset); + long blocksLength = reader.length() - regionOffset; addInteriorAddressObject("RawBlocks", regionOffset, header.getMemoryRegionOffset(), blocksLength); @@ -163,6 +163,7 @@ public class Userdump extends DumpFile { return Integer.toHexString(header.getMachineImageType()); } + @Override public void analyze(TaskMonitor monitor) { boolean analyzeEmbeddedObjects = OptionUtils.getBooleanOptionValue(ANALYZE_EMBEDDED_OBJECTS_OPTION_NAME, @@ -174,8 +175,9 @@ public class Userdump extends DumpFile { } /** - * Get default Userdump loader options. - * See {@link DumpFile#getDefaultOptions(DumpFileReader)}. + * Get default Userdump loader options. See + * {@link DumpFile#getDefaultOptions(DumpFileReader)}. + * * @param reader dump file reader * @return default collection of Userdump loader options */