From e6bc828e8170dc0a86cab06087f9fb034c14d524 Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Thu, 13 Jan 2022 01:22:20 -0500 Subject: [PATCH] GP-1675: Sorting PRELINK Mach-O files before processing them --- .../app/util/opinion/MachoPrelinkProgramBuilder.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoPrelinkProgramBuilder.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoPrelinkProgramBuilder.java index 49c17b2b5d..81e758c409 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoPrelinkProgramBuilder.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoPrelinkProgramBuilder.java @@ -182,6 +182,7 @@ public class MachoPrelinkProgramBuilder extends MachoProgramBuilder { } // Process each PRELINK Mach-O + Collections.sort(prelinkMachoInfoList); monitor.initialize(prelinkMachoInfoList.size()); for (int i = 0; i < prelinkMachoInfoList.size(); i++) { PrelinkMachoInfo info = prelinkMachoInfoList.get(i); @@ -192,7 +193,7 @@ public class MachoPrelinkProgramBuilder extends MachoProgramBuilder { info.processMemoryBlocks(); info.markupHeaders(); - info.addToProgramTree(next); + info.addToProgramTree(next); // assumes list is sorted monitor.incrementProgress(1); } @@ -533,7 +534,7 @@ public class MachoPrelinkProgramBuilder extends MachoProgramBuilder { /** * Convenience class to store information we need about an individual PRELINK Mach-O. */ - private class PrelinkMachoInfo { + private class PrelinkMachoInfo implements Comparable { private Address headerAddr; private MachHeader header; @@ -621,5 +622,10 @@ public class MachoPrelinkProgramBuilder extends MachoProgramBuilder { } } } + + @Override + public int compareTo(PrelinkMachoInfo o) { + return headerAddr.compareTo(o.headerAddr); + } } }