diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/DyldCacheFileSystem.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/DyldCacheFileSystem.java index f6ac1f863e..86275c6739 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/DyldCacheFileSystem.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/DyldCacheFileSystem.java @@ -15,7 +15,8 @@ */ package ghidra.file.formats.ios.dyldcache; -import java.io.*; +import java.io.IOException; +import java.io.InputStream; import java.util.*; import ghidra.app.util.bin.BinaryReader; @@ -64,8 +65,7 @@ public class DyldCacheFileSystem extends GFileSystemBase { */ FixupMacho32bitArmOffsets fixer = new FixupMacho32bitArmOffsets(); - File fixedFile = fixer.fix(file, machHeaderStartIndexInProvider, provider, monitor); - return new FileInputStream(fixedFile); + return fixer.fix(file, machHeaderStartIndexInProvider, provider, monitor); } catch (MachException e) { throw new IOException("Invalid Mach-O header detected at 0x" + diff --git a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/FixupMacho32bitArmOffsets.java b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/FixupMacho32bitArmOffsets.java index 97133525e2..d52284f5f4 100644 --- a/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/FixupMacho32bitArmOffsets.java +++ b/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dyldcache/FixupMacho32bitArmOffsets.java @@ -15,6 +15,10 @@ */ package ghidra.file.formats.ios.dyldcache; +import java.io.*; +import java.util.*; + +import generic.continues.RethrowContinuesFactory; import ghidra.app.util.bin.ByteProvider; import ghidra.app.util.bin.format.macho.*; import ghidra.app.util.bin.format.macho.commands.*; @@ -23,16 +27,11 @@ import ghidra.util.*; import ghidra.util.exception.DuplicateNameException; import ghidra.util.task.TaskMonitor; -import java.io.*; -import java.util.*; - -import generic.continues.RethrowContinuesFactory; - public class FixupMacho32bitArmOffsets { private DataConverter converter = new LittleEndianDataConverter(); - public File fix(GFile file, long offsetAdjustment, ByteProvider provider, TaskMonitor monitor) - throws IOException, MachException { + public InputStream fix(GFile file, long offsetAdjustment, ByteProvider provider, + TaskMonitor monitor) throws IOException, MachException { Map changeMap = new HashMap(); //check to make sure mach-o header is valid @@ -146,9 +145,8 @@ public class FixupMacho32bitArmOffsets { List indexList = new ArrayList( changeMap.keySet() ); Collections.sort( indexList ); - - File tempMachoFile = File.createTempFile( "ghidra" + "_" + file.getName() + "_", ".macho.tmp" ); - OutputStream tempOut = new FileOutputStream( tempMachoFile ); + + ByteArrayOutputStream tempOut = new ByteArrayOutputStream(); try { long tempIndex = offsetAdjustment; while ( !monitor.isCancelled() ) { @@ -174,6 +172,6 @@ public class FixupMacho32bitArmOffsets { tempOut.close(); } - return tempMachoFile; + return new ByteArrayInputStream(tempOut.toByteArray()); } }