From 6cb671483fe02f0e9ab20bab189101d1cc8210a1 Mon Sep 17 00:00:00 2001 From: Mark Rowe Date: Tue, 8 Jul 2025 10:30:26 -0700 Subject: [MachO] Avoid leaking MachoObjCProcessor This would leak if parsing of CFStrings was enabled while parsing of Objective-C metadata was disabled. It would also leak if exceptions were thrown or early returns were taken in the ~500 lines between where the object was allocated and it was deleted. --- view/macho/machoview.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'view/macho/machoview.h') diff --git a/view/macho/machoview.h b/view/macho/machoview.h index dfbb24fe..253af9d1 100644 --- a/view/macho/machoview.h +++ b/view/macho/machoview.h @@ -1456,8 +1456,6 @@ namespace BinaryNinja QualifiedName filesetEntryCommandQualName; } m_typeNames; - MachoObjCProcessor* m_objcProcessor = nullptr; - uint64_t m_universalImageOffset; bool m_parseOnly, m_backedByDatabase; int64_t m_imageBaseAdjustment; @@ -1488,7 +1486,7 @@ namespace BinaryNinja void RebaseThreadStarts(BinaryReader& virtualReader, std::vector& threadStarts, uint64_t stepMultiplier); Ref DefineMachoSymbol( BNSymbolType type, const std::string& name, uint64_t addr, BNSymbolBinding binding, bool deferred); - void ParseSymbolTable(BinaryReader& reader, MachOHeader& header, const symtab_command& symtab, const std::vector& symbolStubsList); + void ParseSymbolTable(BinaryReader& reader, MachOHeader& header, const symtab_command& symtab, const std::vector& symbolStubsList, MachoObjCProcessor*); bool IsValidFunctionStart(uint64_t addr); void ParseFunctionStarts(Platform* platform, uint64_t textBase, function_starts_command functionStarts); bool ParseRelocationEntry(const relocation_info& info, uint64_t start, BNRelocationInfo& result); @@ -1503,8 +1501,8 @@ namespace BinaryNinja BNSymbolBinding binding); bool GetSectionPermissions(MachOHeader& header, uint64_t address, uint32_t &flags); bool GetSegmentPermissions(MachOHeader& header, uint64_t address, uint32_t &flags); - void ParseChainedFixups(MachOHeader& header, linkedit_data_command chainedFixups); - void ParseChainedStarts(MachOHeader& header, section_64 chainedStarts); + void ParseChainedFixups(MachOHeader& header, linkedit_data_command chainedFixups, MachoObjCProcessor*); + void ParseChainedStarts(MachOHeader& header, section_64 chainedStarts, MachoObjCProcessor*); virtual uint64_t PerformGetEntryPoint() const override; -- cgit v1.3.1