From ded7b845a6ffd6d98d216623adfa507c46be84b7 Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Tue, 3 Mar 2026 06:10:27 -0500 Subject: [PATCH] GP-6502: Removing DVRT references --- .../util/bin/format/pe/BaseRelocation.java | 27 +++++++++---------- .../util/bin/format/pe/dvrt/ImageArm64X.java | 15 +++++------ ...mageFunctionOverrideDynamicRelocation.java | 6 ++--- .../pe/dvrt/ImageImportControlTransfer.java | 15 +++++------ .../pe/dvrt/ImageIndirControlTransfer.java | 15 +++++------ .../pe/dvrt/ImageSwitchtableBranch.java | 15 +++++------ 6 files changed, 44 insertions(+), 49 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/BaseRelocation.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/BaseRelocation.java index fb88d68f71..ed62bf5745 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/BaseRelocation.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/BaseRelocation.java @@ -23,8 +23,7 @@ import ghidra.app.util.bin.*; import ghidra.app.util.importer.MessageLog; import ghidra.program.model.address.Address; import ghidra.program.model.data.*; -import ghidra.program.model.listing.*; -import ghidra.program.model.symbol.*; +import ghidra.program.model.listing.Program; import ghidra.util.DataConverter; import ghidra.util.exception.DuplicateNameException; import ghidra.util.task.TaskMonitor; @@ -192,9 +191,9 @@ public class BaseRelocation implements StructConverter, ByteArrayConverter { public void markup(Program program, Address addr, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader) throws DuplicateNameException, IOException { - ReferenceManager refMgr = program.getReferenceManager(); - Listing listing = program.getListing(); - Address imageBase = program.getImageBase(); +// ReferenceManager refMgr = program.getReferenceManager(); +// Listing listing = program.getListing(); +// Address imageBase = program.getImageBase(); DataType dt = toDataType(); PeUtils.createData(program, addr, dt, log); addr = addr.add(dt.getLength()); @@ -206,14 +205,14 @@ public class BaseRelocation implements StructConverter, ByteArrayConverter { DataType typeOffsetDt = typeOffset.toDataType(); PeUtils.createData(program, addr, typeOffsetDt, log); - if (typeOffset.typeOffset != 0) { - refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + typeOffset.offset), - RefType.DATA, SourceType.IMPORTED, 0); - listing.setComment(addr, CommentType.EOL, getName(typeOffset.type)); - } - else { - listing.setComment(addr, CommentType.EOL, "padding"); - } +// if (typeOffset.typeOffset != 0) { +// refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + typeOffset.offset), +// RefType.DATA, SourceType.IMPORTED, 0); +// listing.setComment(addr, CommentType.EOL, getName(typeOffset.type)); +// } +// else { +// listing.setComment(addr, CommentType.EOL, "padding"); +// } addr = addr.add(typeOffsetDt.getLength()); } @@ -223,7 +222,7 @@ public class BaseRelocation implements StructConverter, ByteArrayConverter { public DataType toDataType() throws DuplicateNameException { StructureDataType struct = new StructureDataType(NAME, 0); - struct.add(IBO32, "VirtualAddress", null); + struct.add(DWORD, "VirtualAddress", null); struct.add(DWORD,"SizeOfBlock",null); struct.setCategoryPath(new CategoryPath("/PE")); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageArm64X.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageArm64X.java index 64dedeee7d..1559645e1f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageArm64X.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageArm64X.java @@ -27,7 +27,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.data.*; import ghidra.program.model.listing.Program; import ghidra.program.model.mem.MemoryAccessException; -import ghidra.program.model.symbol.*; import ghidra.program.model.util.CodeUnitInsertionException; import ghidra.util.exception.DuplicateNameException; import ghidra.util.task.TaskMonitor; @@ -86,7 +85,7 @@ public class ImageArm64X extends AbstractImageDynamicRelocationHeader { public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader) throws DuplicateNameException, CodeUnitInsertionException, IOException, MemoryAccessException { - ReferenceManager refMgr = program.getReferenceManager(); +// ReferenceManager refMgr = program.getReferenceManager(); Address imageBase = program.getImageBase(); DataType dt = toDataType(); Address addr = imageBase.add(rva); @@ -94,11 +93,11 @@ public class ImageArm64X extends AbstractImageDynamicRelocationHeader { addr = addr.add(dt.getLength()); for (ImageArm64XDynamicRelocation reloc : relocs) { reloc.markup(program, isBinary, monitor, log, ntHeader); - int pageRelativeOffset = reloc.getPageRelativeOffset(); - if (pageRelativeOffset != 0) { - refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), - RefType.DATA, SourceType.IMPORTED, 0); - } +// int pageRelativeOffset = reloc.getPageRelativeOffset(); +// if (pageRelativeOffset != 0) { +// refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), +// RefType.DATA, SourceType.IMPORTED, 0); +// } addr = addr.add(reloc.toDataType().getLength() + reloc.getData().length); } } @@ -106,7 +105,7 @@ public class ImageArm64X extends AbstractImageDynamicRelocationHeader { @Override public DataType toDataType() throws DuplicateNameException, IOException { StructureDataType struct = new StructureDataType("IMAGE_ARM64X", 0); - struct.add(IBO32, "VirtualAddress", null); + struct.add(DWORD, "VirtualAddress", null); struct.add(DWORD, "SizeOfBlock", null); struct.setCategoryPath(new CategoryPath("/PE")); return struct; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageFunctionOverrideDynamicRelocation.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageFunctionOverrideDynamicRelocation.java index c0e2ca4ff0..7073c31dbb 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageFunctionOverrideDynamicRelocation.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageFunctionOverrideDynamicRelocation.java @@ -114,8 +114,8 @@ public class ImageFunctionOverrideDynamicRelocation implements StructConverter, PeUtils.createData(program, addr, dt, log); addr = addr.add(dt.getLength()); for (int i = 0; i < rvas.length; i++) { - PeUtils.createData(program, addr, IBO32, log); - addr = addr.add(IBO32.getLength()); + PeUtils.createData(program, addr, DWORD, log); + addr = addr.add(DWORD.getLength()); } for (BaseRelocation baseReloc : baseRelocs) { baseReloc.markup(program, addr, isBinary, monitor, log, ntHeader); @@ -127,7 +127,7 @@ public class ImageFunctionOverrideDynamicRelocation implements StructConverter, public DataType toDataType() throws DuplicateNameException, IOException { StructureDataType struct = new StructureDataType("IMAGE_FUNCTION_OVERRIDE_DYNAMIC_RELOCATION", 0); - struct.add(IBO32, "OriginalRva", "RVA of original function"); + struct.add(DWORD, "OriginalRva", "RVA of original function"); struct.add(DWORD, "BDDOffset", "Offset into the BDD region"); struct.add(DWORD, "RvaSize", "Size in bytes taken by RVAs. Must be multiple of sizeof(DWORD)."); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageImportControlTransfer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageImportControlTransfer.java index eb7f5db947..ba670d8f43 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageImportControlTransfer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageImportControlTransfer.java @@ -27,7 +27,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.data.*; import ghidra.program.model.listing.Program; import ghidra.program.model.mem.MemoryAccessException; -import ghidra.program.model.symbol.*; import ghidra.program.model.util.CodeUnitInsertionException; import ghidra.util.exception.DuplicateNameException; import ghidra.util.task.TaskMonitor; @@ -87,7 +86,7 @@ public class ImageImportControlTransfer extends AbstractImageDynamicRelocationHe public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader) throws DuplicateNameException, CodeUnitInsertionException, IOException, MemoryAccessException { - ReferenceManager refMgr = program.getReferenceManager(); +// ReferenceManager refMgr = program.getReferenceManager(); Address imageBase = program.getImageBase(); DataType dt = toDataType(); Address addr = imageBase.add(rva); @@ -95,11 +94,11 @@ public class ImageImportControlTransfer extends AbstractImageDynamicRelocationHe addr = addr.add(dt.getLength()); for (ImageImportControlTransferDynamicRelocation reloc : relocs) { reloc.markup(program, isBinary, monitor, log, ntHeader); - int pageRelativeOffset = reloc.getPageRelativeOffset(); - if (pageRelativeOffset != 0) { - refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), - RefType.DATA, SourceType.IMPORTED, 0); - } +// int pageRelativeOffset = reloc.getPageRelativeOffset(); +// if (pageRelativeOffset != 0) { +// refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), +// RefType.DATA, SourceType.IMPORTED, 0); +// } addr = addr.add(reloc.toDataType().getLength()); } } @@ -107,7 +106,7 @@ public class ImageImportControlTransfer extends AbstractImageDynamicRelocationHe @Override public DataType toDataType() throws DuplicateNameException, IOException { StructureDataType struct = new StructureDataType("IMAGE_IMPORT_CONTROL_TRANSFER", 0); - struct.add(IBO32, "VirtualAddress", null); + struct.add(DWORD, "VirtualAddress", null); struct.add(DWORD, "SizeOfBlock", null); struct.setCategoryPath(new CategoryPath("/PE")); return struct; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageIndirControlTransfer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageIndirControlTransfer.java index 87d1c3f316..f44390bb9b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageIndirControlTransfer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageIndirControlTransfer.java @@ -27,7 +27,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.data.*; import ghidra.program.model.listing.Program; import ghidra.program.model.mem.MemoryAccessException; -import ghidra.program.model.symbol.*; import ghidra.program.model.util.CodeUnitInsertionException; import ghidra.util.exception.DuplicateNameException; import ghidra.util.task.TaskMonitor; @@ -87,7 +86,7 @@ public class ImageIndirControlTransfer extends AbstractImageDynamicRelocationHea public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader) throws DuplicateNameException, CodeUnitInsertionException, IOException, MemoryAccessException { - ReferenceManager refMgr = program.getReferenceManager(); +// ReferenceManager refMgr = program.getReferenceManager(); Address imageBase = program.getImageBase(); DataType dt = toDataType(); Address addr = imageBase.add(rva); @@ -95,11 +94,11 @@ public class ImageIndirControlTransfer extends AbstractImageDynamicRelocationHea addr = addr.add(dt.getLength()); for (ImageIndirControlTransferDynamicRelocation reloc : relocs) { reloc.markup(program, isBinary, monitor, log, ntHeader); - int pageRelativeOffset = reloc.getPageRelativeOffset(); - if (pageRelativeOffset != 0) { - refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), - RefType.DATA, SourceType.IMPORTED, 0); - } +// int pageRelativeOffset = reloc.getPageRelativeOffset(); +// if (pageRelativeOffset != 0) { +// refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), +// RefType.DATA, SourceType.IMPORTED, 0); +// } addr = addr.add(reloc.toDataType().getLength()); } } @@ -107,7 +106,7 @@ public class ImageIndirControlTransfer extends AbstractImageDynamicRelocationHea @Override public DataType toDataType() throws DuplicateNameException, IOException { StructureDataType struct = new StructureDataType("IMAGE_INDIR_CONTROL_TRANSFER", 0); - struct.add(IBO32, "VirtualAddress", null); + struct.add(DWORD, "VirtualAddress", null); struct.add(DWORD, "SizeOfBlock", null); struct.setCategoryPath(new CategoryPath("/PE")); return struct; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageSwitchtableBranch.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageSwitchtableBranch.java index d98ee5634c..67000d840b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageSwitchtableBranch.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/dvrt/ImageSwitchtableBranch.java @@ -27,7 +27,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.data.*; import ghidra.program.model.listing.Program; import ghidra.program.model.mem.MemoryAccessException; -import ghidra.program.model.symbol.*; import ghidra.program.model.util.CodeUnitInsertionException; import ghidra.util.exception.DuplicateNameException; import ghidra.util.task.TaskMonitor; @@ -86,7 +85,7 @@ public class ImageSwitchtableBranch extends AbstractImageDynamicRelocationHeader public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader) throws DuplicateNameException, CodeUnitInsertionException, IOException, MemoryAccessException { - ReferenceManager refMgr = program.getReferenceManager(); +// ReferenceManager refMgr = program.getReferenceManager(); Address imageBase = program.getImageBase(); DataType dt = toDataType(); Address addr = imageBase.add(rva); @@ -94,11 +93,11 @@ public class ImageSwitchtableBranch extends AbstractImageDynamicRelocationHeader addr = addr.add(dt.getLength()); for (ImageSwitchtableBranchDynamicRelocation reloc : relocs) { reloc.markup(program, isBinary, monitor, log, ntHeader); - int pageRelativeOffset = reloc.getPageRelativeOffset(); - if (pageRelativeOffset != 0) { - refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), - RefType.DATA, SourceType.IMPORTED, 0); - } +// int pageRelativeOffset = reloc.getPageRelativeOffset(); +// if (pageRelativeOffset != 0) { +// refMgr.addMemoryReference(addr, imageBase.add(virtualAddress + pageRelativeOffset), +// RefType.DATA, SourceType.IMPORTED, 0); +// } addr = addr.add(reloc.toDataType().getLength()); } } @@ -106,7 +105,7 @@ public class ImageSwitchtableBranch extends AbstractImageDynamicRelocationHeader @Override public DataType toDataType() throws DuplicateNameException, IOException { StructureDataType struct = new StructureDataType("IMAGE_SWITCHTABLE_BRANCH", 0); - struct.add(IBO32, "VirtualAddress", null); + struct.add(DWORD, "VirtualAddress", null); struct.add(DWORD, "SizeOfBlock", null); struct.setCategoryPath(new CategoryPath("/PE")); return struct;