From d8bdcd4d39633170d53df9f820077622bf97d744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 25 May 2023 11:23:29 +0800 Subject: [PATCH 1/9] Silence more warnings --- .gitignore | 3 ++- MacDependency/ArchitectureModel.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b90654c..028fedc 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ xcuserdata/ # End of https://www.toptal.com/developers/gitignore/api/xcode build/ -build.xcresult/ \ No newline at end of file +build.xcresult/ +/archive.xcarchive diff --git a/MacDependency/ArchitectureModel.h b/MacDependency/ArchitectureModel.h index 3a6c995..7e61ffe 100644 --- a/MacDependency/ArchitectureModel.h +++ b/MacDependency/ArchitectureModel.h @@ -8,7 +8,7 @@ #import #import "MachOModel.h" -#include "macho/machoarchitecture.h" +#include "MachO/machoarchitecture.h" #include "MachO/machoheader.h" @class MyDocument; From 513629474c98f4a426474fefbd126c0567f3d829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 25 May 2023 11:25:15 +0800 Subject: [PATCH 2/9] Make cached library a warning Ref: https://github.com/kwin/macdependency/issues/15#issuecomment-1272392605 --- MacDependency/MachOModel.mm | 9 ++++----- MachO/internalfile.cpp | 12 +++++++++--- MachO/machoexception.cpp | 5 ++++- MachO/machoexception.h | 3 +++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/MacDependency/MachOModel.mm b/MacDependency/MachOModel.mm index a341663..7c67bfe 100644 --- a/MacDependency/MachOModel.mm +++ b/MacDependency/MachOModel.mm @@ -51,9 +51,8 @@ - (id) initWithFilename:(std::string&)filename command:(DylibCommand*)aCommand d NSString* log = [NSString stringWithFormat:NSLocalizedString(@"ERR_ARCHITECTURE_MISMATCH", nil), filename.c_str(), [parent name]]; [aDocument appendLogLine:log withModel:self state:state]; } - - } catch (MachOException& exc) { - [self setStateWithWarning:isWeakReference]; + } catch (MachOException& exc) { + [self setStateWithWarning:isWeakReference || exc.isWarning()]; NSString* log = [NSString stringWithStdString:exc.getCause()]; [aDocument appendLogLine:log withModel:self state:state]; // distinguish between weak and strong. In both cases append to tree with a status color @@ -176,10 +175,10 @@ - (NSColor*) textColor { NSColor* color; switch(state) { case StateWarning: - color = [NSColor systemOrangeColor]; + color = [NSColor systemYellowColor]; break; case StateError: - color = [NSColor systemOrangeColor]; + color = [NSColor systemRedColor]; break; default: color = [NSColor labelColor]; diff --git a/MachO/internalfile.cpp b/MachO/internalfile.cpp index c138410..5de50a0 100644 --- a/MachO/internalfile.cpp +++ b/MachO/internalfile.cpp @@ -1,6 +1,8 @@ #include "internalfile.h" #include "machoexception.h" +#include + // use reference counting to reuse files for all used architectures InternalFile* InternalFile::create(InternalFile* file) { file->counter++; @@ -24,9 +26,13 @@ filename(filename), counter(1) // open file handle file.open(this->filename, std::ios_base::in | std::ios_base::binary); if (file.fail()) { - std::ostringstream error; - error << "Couldn't open file '" << filename << "'."; - throw MachOException(error.str()); + void* dylib = dlopen(this->filename.c_str(), RTLD_LAZY); + if (dylib) { + dlclose(dylib); + throw MachOException("System cached library '" + filename + "'.", true); + } else { + throw MachOException("Couldn't open file '" + filename + "'."); + } } struct stat buffer; diff --git a/MachO/machoexception.cpp b/MachO/machoexception.cpp index 66ba42c..8496298 100644 --- a/MachO/machoexception.cpp +++ b/MachO/machoexception.cpp @@ -1,6 +1,9 @@ #include "machoexception.h" -MachOException::MachOException(const std::string& cause) : cause(cause) +MachOException::MachOException(const std::string& cause) : cause(cause), warning(false) { } +MachOException::MachOException(const std::string& cause, bool warning) : cause(cause), warning(warning) +{ +} diff --git a/MachO/machoexception.h b/MachO/machoexception.h index a6b3c08..e6580bb 100644 --- a/MachO/machoexception.h +++ b/MachO/machoexception.h @@ -7,9 +7,12 @@ class EXPORT MachOException { public: MachOException(const std::string&); + MachOException(const std::string&, bool warning); const std::string& getCause() { return cause; } + const bool isWarning() { return warning; } private: const std::string cause; + bool warning; }; #endif // MACHOEXCEPTION_H From 95e87efc1e634ed82b24259ecb22b3a2518c0f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 25 May 2023 11:30:25 +0800 Subject: [PATCH 3/9] Bump MACOSX_DEPLOYMENT_TARGET to 10.13 as 10.9 won't work with the latest XCode --- .../MacDependency.xcodeproj/project.pbxproj | 18 ++++++++++++------ .../xcschemes/MacDependency.xcscheme | 2 +- MachO/MachO.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/MachO.xcscheme | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/MacDependency/MacDependency.xcodeproj/project.pbxproj b/MacDependency/MacDependency.xcodeproj/project.pbxproj index fb48979..53f187d 100644 --- a/MacDependency/MacDependency.xcodeproj/project.pbxproj +++ b/MacDependency/MacDependency.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 53; objects = { /* Begin PBXBuildFile section */ @@ -263,7 +263,8 @@ 2A37F4A9FDCFA73011CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1310; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = "Konrad Windszus"; }; buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "MacDependency" */; @@ -399,11 +400,12 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; GCC_DYNAMIC_NO_PIC = NO; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.13; PRODUCT_BUNDLE_IDENTIFIER = "com.googlecode.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = MacDependency; SDKROOT = macosx; @@ -416,10 +418,11 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.13; PRODUCT_BUNDLE_IDENTIFIER = "com.googlecode.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = MacDependency; SDKROOT = macosx; @@ -430,6 +433,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -450,6 +454,7 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + DEAD_CODE_STRIPPING = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = c99; @@ -478,7 +483,7 @@ /opt/local/include, ./../, ); - MACOSX_DEPLOYMENT_TARGET = 10.7; + MACOSX_DEPLOYMENT_TARGET = 10.13; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; @@ -509,6 +514,7 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + DEAD_CODE_STRIPPING = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = c99; GCC_NO_COMMON_BLOCKS = YES; @@ -521,7 +527,7 @@ /opt/local/include, ./../, ); - MACOSX_DEPLOYMENT_TARGET = 10.9; + MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = macosx; }; name = Release; diff --git a/MacDependency/MacDependency.xcodeproj/xcshareddata/xcschemes/MacDependency.xcscheme b/MacDependency/MacDependency.xcodeproj/xcshareddata/xcschemes/MacDependency.xcscheme index d7d53df..77183b4 100644 --- a/MacDependency/MacDependency.xcodeproj/xcshareddata/xcschemes/MacDependency.xcscheme +++ b/MacDependency/MacDependency.xcodeproj/xcshareddata/xcschemes/MacDependency.xcscheme @@ -1,6 +1,6 @@ Date: Mon, 7 Sep 2026 15:19:30 +0800 Subject: [PATCH 4/9] Support cached library --- MachO/MachO.xcodeproj/project.pbxproj | 24 ++ MachO/diskinternalfile.cpp | 56 ++++ MachO/diskinternalfile.h | 27 ++ MachO/dyldcacheimage.cpp | 460 ++++++++++++++++++++++++++ MachO/dyldcacheimage.h | 43 +++ MachO/internalfile.cpp | 73 ++-- MachO/internalfile.h | 31 +- MachO/memoryinternalfile.cpp | 41 +++ MachO/memoryinternalfile.h | 30 ++ 9 files changed, 720 insertions(+), 65 deletions(-) create mode 100644 MachO/diskinternalfile.cpp create mode 100644 MachO/diskinternalfile.h create mode 100644 MachO/dyldcacheimage.cpp create mode 100644 MachO/dyldcacheimage.h create mode 100644 MachO/memoryinternalfile.cpp create mode 100644 MachO/memoryinternalfile.h diff --git a/MachO/MachO.xcodeproj/project.pbxproj b/MachO/MachO.xcodeproj/project.pbxproj index 2755f9a..04d034f 100644 --- a/MachO/MachO.xcodeproj/project.pbxproj +++ b/MachO/MachO.xcodeproj/project.pbxproj @@ -52,6 +52,12 @@ 8EA3E17B11B12B5A0093CD87 /* dylinkercommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EA3E17911B12B5A0093CD87 /* dylinkercommand.h */; }; 8ED32FDE100B99EC00EBF623 /* machocache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ED32FDC100B99EC00EBF623 /* machocache.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8ED32FDF100B99EC00EBF623 /* machocache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8ED32FDD100B99EC00EBF623 /* machocache.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A1C0DE0F1A2B3C4D5E0000A2 /* dyldcacheimage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000A1 /* dyldcacheimage.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A1C0DE0F1A2B3C4D5E0000A4 /* dyldcacheimage.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000A3 /* dyldcacheimage.h */; }; + A1C0DE0F1A2B3C4D5E0000B2 /* diskinternalfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000B1 /* diskinternalfile.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A1C0DE0F1A2B3C4D5E0000B4 /* diskinternalfile.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000B3 /* diskinternalfile.h */; }; + A1C0DE0F1A2B3C4D5E0000C2 /* memoryinternalfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000C1 /* memoryinternalfile.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A1C0DE0F1A2B3C4D5E0000C4 /* memoryinternalfile.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000C3 /* memoryinternalfile.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -106,6 +112,12 @@ 8EA3E17911B12B5A0093CD87 /* dylinkercommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dylinkercommand.h; sourceTree = ""; wrapsLines = 0; }; 8ED32FDC100B99EC00EBF623 /* machocache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = machocache.h; sourceTree = ""; wrapsLines = 0; }; 8ED32FDD100B99EC00EBF623 /* machocache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = machocache.cpp; sourceTree = ""; wrapsLines = 0; }; + A1C0DE0F1A2B3C4D5E0000A1 /* dyldcacheimage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dyldcacheimage.cpp; sourceTree = ""; wrapsLines = 0; }; + A1C0DE0F1A2B3C4D5E0000A3 /* dyldcacheimage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dyldcacheimage.h; sourceTree = ""; wrapsLines = 0; }; + A1C0DE0F1A2B3C4D5E0000B1 /* diskinternalfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diskinternalfile.cpp; sourceTree = ""; wrapsLines = 0; }; + A1C0DE0F1A2B3C4D5E0000B3 /* diskinternalfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diskinternalfile.h; sourceTree = ""; wrapsLines = 0; }; + A1C0DE0F1A2B3C4D5E0000C1 /* memoryinternalfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memoryinternalfile.cpp; sourceTree = ""; wrapsLines = 0; }; + A1C0DE0F1A2B3C4D5E0000C3 /* memoryinternalfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memoryinternalfile.h; sourceTree = ""; wrapsLines = 0; }; ADCDF193276D87BF002476ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -206,6 +218,12 @@ 8E131570100F7DB600367510 /* symboltableentry64.h */, 8ED32FDC100B99EC00EBF623 /* machocache.h */, 8ED32FDD100B99EC00EBF623 /* machocache.cpp */, + A1C0DE0F1A2B3C4D5E0000A1 /* dyldcacheimage.cpp */, + A1C0DE0F1A2B3C4D5E0000A3 /* dyldcacheimage.h */, + A1C0DE0F1A2B3C4D5E0000B1 /* diskinternalfile.cpp */, + A1C0DE0F1A2B3C4D5E0000B3 /* diskinternalfile.h */, + A1C0DE0F1A2B3C4D5E0000C1 /* memoryinternalfile.cpp */, + A1C0DE0F1A2B3C4D5E0000C3 /* memoryinternalfile.h */, ); name = Classes; sourceTree = ""; @@ -267,6 +285,9 @@ 8E212E93101237A50078924A /* machodemangleexception.h in Headers */, 8EA3DFF511AFD3790093CD87 /* uuidcommand.h in Headers */, 8EA3E17B11B12B5A0093CD87 /* dylinkercommand.h in Headers */, + A1C0DE0F1A2B3C4D5E0000A4 /* dyldcacheimage.h in Headers */, + A1C0DE0F1A2B3C4D5E0000B4 /* diskinternalfile.h in Headers */, + A1C0DE0F1A2B3C4D5E0000C4 /* memoryinternalfile.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -355,6 +376,9 @@ 8E212E94101237A50078924A /* machodemangleexception.cpp in Sources */, 8EA3DFF411AFD3790093CD87 /* uuidcommand.cpp in Sources */, 8EA3E17A11B12B5A0093CD87 /* dylinkercommand.cpp in Sources */, + A1C0DE0F1A2B3C4D5E0000A2 /* dyldcacheimage.cpp in Sources */, + A1C0DE0F1A2B3C4D5E0000B2 /* diskinternalfile.cpp in Sources */, + A1C0DE0F1A2B3C4D5E0000C2 /* memoryinternalfile.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MachO/diskinternalfile.cpp b/MachO/diskinternalfile.cpp new file mode 100644 index 0000000..ca98142 --- /dev/null +++ b/MachO/diskinternalfile.cpp @@ -0,0 +1,56 @@ +#include "diskinternalfile.h" +#include "machoexception.h" + +#include + +DiskInternalFile::DiskInternalFile(const std::string& filename) : +InternalFile(filename), fileSize(0), lastWriteTime(0) +{ + file.open(filename, std::ios_base::in | std::ios_base::binary); + if (file.fail()) { + throw MachOException("Couldn't open file '" + filename + "'."); + } + + struct stat buffer; + if (stat(filename.c_str(), &buffer) >= 0) { + fileSize = buffer.st_size; + lastWriteTime = buffer.st_mtime; + } +} + +DiskInternalFile::~DiskInternalFile() +{ + if (file.is_open()) + file.close(); +} + +unsigned long long DiskInternalFile::getSize() const { + return fileSize; +} + +bool DiskInternalFile::seek(long long int position) { + file.seekg(position, std::ios_base::beg); + if (file.fail()) { + file.clear(); + return false; + } + return true; +} + +std::streamsize DiskInternalFile::read(char* buffer, std::streamsize size) { + file.read(buffer, size); + if (file.fail()) { + file.clear(); + return file.gcount(); + } + // TODO: handle badbit + return size; +} + +long long int DiskInternalFile::getPosition() { + return file.tellg(); +} + +time_t DiskInternalFile::getLastModificationTime() const { + return lastWriteTime; +} diff --git a/MachO/diskinternalfile.h b/MachO/diskinternalfile.h new file mode 100644 index 0000000..b4e2886 --- /dev/null +++ b/MachO/diskinternalfile.h @@ -0,0 +1,27 @@ +#ifndef DISKINTERNALFILE_H +#define DISKINTERNALFILE_H + +#include "internalfile.h" + +#include + +/** An InternalFile backed by a real file on disk. */ +class DiskInternalFile : public InternalFile +{ +public: + explicit DiskInternalFile(const std::string& filename); + virtual ~DiskInternalFile(); + + virtual unsigned long long getSize() const; + virtual bool seek(long long int position); + virtual std::streamsize read(char* buffer, std::streamsize size); + virtual long long int getPosition(); + virtual time_t getLastModificationTime() const; + +private: + std::ifstream file; + unsigned long long fileSize; + time_t lastWriteTime; +}; + +#endif // DISKINTERNALFILE_H diff --git a/MachO/dyldcacheimage.cpp b/MachO/dyldcacheimage.cpp new file mode 100644 index 0000000..14c8334 --- /dev/null +++ b/MachO/dyldcacheimage.cpp @@ -0,0 +1,460 @@ +/* + * dyldcacheimage.cpp + * MachO + * + * Reads the symbol table of a library that has no file on disk, i.e. a library + * that only exists inside the dyld shared cache ("/usr/lib/libz.1.dylib" and + * friends since macOS 11). + * + * Those libraries cannot be opened with ifstream but they *can* be dlopen()ed, + * and once they are mapped the load commands and the LINKEDIT data are + * reachable in memory. This file copies them into a standalone Mach-O image. + */ + +#include "dyldcacheimage.h" +#include "machoexception.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifndef LC_DYLD_EXPORTS_TRIE +#define LC_DYLD_EXPORTS_TRIE 0x80000033u +#endif + +namespace { + +const uint8_t kFlagReexport = 0x08; +const uint8_t kFlagStubAndResolver = 0x10; + +const uint32_t kMaxLoadCommands = 100000u; +const uint32_t kMaxSymbols = 20000000u; +const unsigned long long kMaxHeaderSize = 64ull * 1024ull * 1024ull; + +/** Reads a little endian base 128 encoded integer (dyld's uleb128). */ +uint64_t readUleb(const uint8_t** cursor, const uint8_t* end) +{ + uint64_t result = 0; + unsigned int shift = 0; + while (*cursor < end) { + uint8_t byte = *(*cursor)++; + result |= (uint64_t)(byte & 0x7fu) << shift; + if ((byte & 0x80u) == 0) + break; + shift += 7; + } + return result; +} + +/** Collects every symbol of a dyld export trie. */ +class ExportTrie +{ +public: + typedef std::pair Entry; + + ExportTrie(const uint8_t* start, uint32_t size) + : start_(start), end_(start != 0 ? start + size : 0) {} + + void walk() + { + if (start_ != 0 && end_ > start_) + visit(0, std::string(), 0); + } + + const std::vector& entries() const { return entries_; } + +private: + void visit(uint32_t offset, const std::string& prefix, int depth) + { + if (depth > 64) + return; + + const uint8_t* node = start_ + offset; + if (node >= end_) + return; + + uint64_t terminalSize = readUleb(&node, end_); + if (terminalSize > (uint64_t)(end_ - node)) + return; + const uint8_t* children = node + terminalSize; + + if (terminalSize > 0 && node < end_) { + const uint8_t* cursor = node; + uint64_t flags = readUleb(&cursor, end_); + uint64_t value = 0; + if ((flags & kFlagReexport) != 0) { + // reexport: import ordinal followed by the imported name + readUleb(&cursor, end_); + while (cursor < end_ && *cursor != 0) + cursor++; + cursor++; + } else { + value = readUleb(&cursor, end_); + } + if ((flags & kFlagStubAndResolver) != 0) + readUleb(&cursor, end_); + + if (!prefix.empty()) + entries_.push_back(Entry(prefix, value)); + } + + if (children >= end_) + return; + uint8_t childCount = *children++; + for (uint8_t i = 0; i < childCount; i++) { + if (children >= end_) + return; + const uint8_t* terminator = children; + while (terminator < end_ && *terminator != 0) + terminator++; + if (terminator >= end_) + return; + + std::string next(prefix); + next.append((const char*)children, (size_t)(terminator - children)); + + const uint8_t* cursor = terminator + 1; + uint64_t childOffset = readUleb(&cursor, end_); + visit((uint32_t)childOffset, next, depth + 1); + children = cursor; + } + } + + const uint8_t* start_; + const uint8_t* end_; + std::vector entries_; +}; + +/** "a/b/libSystem.dylib" -> "libSystem.dylib" */ +std::string baseNameOf(const std::string& path) +{ + size_t slash = path.rfind('/'); + return (slash == std::string::npos) ? path : path.substr(slash + 1); +} + +/** "libSystem.B.dylib" -> "libSystem" (drops the ABI / version letter) */ +std::string stemOf(const std::string& baseName) +{ + size_t dot = baseName.find('.'); + return (dot == std::string::npos) ? baseName : baseName.substr(0, dot); +} + +/** + * Locates the loaded image belonging to `path`. Returns -1 when not found. + * dyld resolves aliases such as /usr/lib/libSystem.dylib to the real cache + * image /usr/lib/libSystem.B.dylib, so the file name alone is not always + * enough to find it. + */ +int findImageIndex(const std::string& path) +{ + uint32_t count = _dyld_image_count(); + + for (uint32_t i = 0; i < count; i++) { + const char* name = _dyld_get_image_name(i); + if (name != 0 && path == name) + return (int)i; + } + + std::string baseName = baseNameOf(path); + if (baseName.empty()) + return -1; + std::string requestedStem = stemOf(baseName); + + int stemMatch = -1; + for (uint32_t i = 0; i < count; i++) { + const char* name = _dyld_get_image_name(i); + if (name == 0) + continue; + std::string imageBase = baseNameOf(name); + if (imageBase == baseName) + return (int)i; + if (stemMatch < 0 && stemOf(imageBase) == requestedStem) + stemMatch = (int)i; + } + return stemMatch; +} + +/** Appends `size` zero bytes until the buffer is aligned on `alignment`. */ +void align(std::vector& buffer, size_t alignment) +{ + while ((buffer.size() % alignment) != 0) + buffer.push_back(0); +} + +template +void append(std::vector& buffer, const T& value) +{ + const char* bytes = reinterpret_cast(&value); + buffer.insert(buffer.end(), bytes, bytes + sizeof(T)); +} + +} // namespace + +DyldCacheImage::DyldCacheImage() +{ +} + +DyldCacheImage::~DyldCacheImage() +{ +} + +void DyldCacheImage::load(const std::string& path) +{ + // RTLD_NOLOAD first: if dyld already has the image there is no need to run + // its initializers. Only when it is not loaded yet do we pay for that. + // + // Known residual risk: a handful of system libraries abort or crash inside + // their initializers when they are dlopen()ed by an unrelated process + // (ActionKit, ActionKitUI, WorkflowUI, libcrypto, libssl and the + // TextToSpeechKonaSupport voices -- 24 out of the 3463 images of this + // machine's cache). Accepted for now; if it ever matters, load() should be + // moved into a short lived helper process. + void* handle = dlopen(path.c_str(), RTLD_NOLOAD); + if (handle == 0) + handle = dlopen(path.c_str(), RTLD_LAZY); + if (handle == 0) + throw MachOException("Couldn't open file '" + path + "'."); + + // NOTE: the handle is deliberately never dlclose()d. Closing it would run + // the image's terminators and could unmap memory we still point at, while + // keeping it costs nothing for shared cache images (dyld keeps them mapped + // for the lifetime of the process anyway). + + int index = findImageIndex(path); + if (index < 0) + throw MachOException("Couldn't find loaded image '" + path + "'."); + + const struct mach_header_64* header = + (const struct mach_header_64*)_dyld_get_image_header((uint32_t)index); + intptr_t slide = _dyld_get_image_vmaddr_slide((uint32_t)index); + if (header == 0) + throw MachOException("Invalid image header for '" + path + "'."); + + if (header->magic != MH_MAGIC_64) + throw MachOException("Only 64 bit images can be read from the dyld shared cache ('" + path + "')."); + + if (header->ncmds == 0 || header->ncmds > kMaxLoadCommands || header->sizeofcmds == 0) + throw MachOException("Invalid load commands in '" + path + "'."); + + unsigned long long headerSize = + (unsigned long long)sizeof(struct mach_header_64) + header->sizeofcmds; + if (headerSize > kMaxHeaderSize) + throw MachOException("Load commands of '" + path + "' are too large."); + + buffer.clear(); + const char* mappedHeader = reinterpret_cast(header); + buffer.insert(buffer.end(), mappedHeader, mappedHeader + headerSize); + + // ---- scan the load commands ------------------------------------------- + // Only offsets are kept: `buffer` is grown later on, which would invalidate + // any pointer into it. + size_t symtabCommandOffset = 0; + uint32_t symbolOffset = 0; + uint32_t numberOfSymbols = 0; + uint32_t stringOffset = 0; + uint32_t stringTableSize = 0; + uint64_t linkeditVmAddress = 0; + uint64_t linkeditVmSize = 0; + uint64_t linkeditFileOffset = 0; + uint32_t exportsTrieOffset = 0; + uint32_t exportsTrieSize = 0; + + size_t offset = sizeof(struct mach_header_64); + for (uint32_t i = 0; i < header->ncmds; i++) { + if (offset + sizeof(struct load_command) > (size_t)headerSize) + throw MachOException("Truncated load commands in '" + path + "'."); + + const struct load_command* command = + reinterpret_cast(&buffer[offset]); + uint32_t cmd = command->cmd; + uint32_t cmdSize = command->cmdsize; + + if (cmdSize < sizeof(struct load_command) || offset + cmdSize > (size_t)headerSize) + throw MachOException("Invalid load command size in '" + path + "'."); + + if (cmd == LC_SEGMENT_64) { + const struct segment_command_64* segment = + reinterpret_cast(command); + if (cmdSize >= sizeof(struct segment_command_64) && + strncmp(segment->segname, "__LINKEDIT", sizeof(segment->segname)) == 0) { + linkeditVmAddress = segment->vmaddr; + linkeditVmSize = segment->vmsize; + linkeditFileOffset = segment->fileoff; + } + } else if (cmd == LC_SYMTAB) { + const struct symtab_command* command2 = + reinterpret_cast(command); + symtabCommandOffset = offset; + symbolOffset = command2->symoff; + numberOfSymbols = command2->nsyms; + stringOffset = command2->stroff; + stringTableSize = command2->strsize; + } else if (cmd == LC_DYLD_EXPORTS_TRIE) { + const struct linkedit_data_command* command2 = + reinterpret_cast(command); + exportsTrieOffset = command2->dataoff; + exportsTrieSize = command2->datasize; + } + + offset += cmdSize; + } + + if (symtabCommandOffset == 0) + throw MachOException("Image '" + path + "' has no symbol table."); + if (linkeditVmSize == 0) + throw MachOException("Image '" + path + "' has no __LINKEDIT segment."); + + // Offsets of a mapped image are file offsets relative to the beginning of + // the file the image was loaded from -- for shared cache images that is the + // cache itself, hence __LINKEDIT is shared by all images and only symoff / + // stroff differ. The same formula works for ordinary mapped dylibs. + const uint8_t* linkeditBase = reinterpret_cast(linkeditVmAddress + slide); + const uint8_t* linkeditEnd = linkeditBase + linkeditVmSize; + + // An empty symbol table is not an error: some cached images (several + // libswift* dylibs for instance) keep LC_SYMTAB only as a placeholder and + // carry their exports exclusively in the export trie. + if (numberOfSymbols > kMaxSymbols) + throw MachOException("Image '" + path + "' has a symbol table of implausible size."); + if (symbolOffset < linkeditFileOffset || stringOffset < linkeditFileOffset) + throw MachOException("Symbol table of '" + path + "' lies outside __LINKEDIT."); + + const uint8_t* symbolTable = linkeditBase + (symbolOffset - linkeditFileOffset); + const uint8_t* stringTable = linkeditBase + (stringOffset - linkeditFileOffset); + if (symbolTable + (uint64_t)numberOfSymbols * sizeof(struct nlist_64) > linkeditEnd || + stringTable >= linkeditEnd) + throw MachOException("Symbol table of '" + path + "' lies outside __LINKEDIT."); + + const struct nlist_64* symbols = reinterpret_cast(symbolTable); + + // ---- build a compact string table -------------------------------------- + // The shared cache uses one gigantic string table for all of its images + // (hundreds of megabytes), so only the strings this image really references + // are copied and every n_strx is rewritten. + std::vector strings; + strings.push_back('\0'); // index 0 stays the empty string + std::vector newStringIndex(numberOfSymbols, 0); + std::unordered_map definedSymbols; + + for (uint32_t i = 0; i < numberOfSymbols; i++) { + uint32_t stringIndex = symbols[i].n_un.n_strx; + if (stringIndex == 0 || stringIndex >= stringTableSize) { + newStringIndex[i] = 0; + continue; + } + + if (stringTable + stringIndex >= linkeditEnd) { + newStringIndex[i] = 0; + continue; + } + + const char* name = reinterpret_cast(stringTable) + stringIndex; + size_t maxLength = (size_t)(stringTableSize - stringIndex); + size_t remaining = (size_t)(linkeditEnd - (stringTable + stringIndex)); + if (remaining < maxLength) + maxLength = remaining; + + size_t length = 0; + while (length < maxLength && name[length] != '\0') + length++; + + uint32_t offsetInNewTable = (uint32_t)strings.size(); + strings.insert(strings.end(), name, name + length + 1); + newStringIndex[i] = offsetInNewTable; + + uint8_t type = symbols[i].n_type; + if ((type & N_STAB) == 0 && (type & N_TYPE) != N_UNDF) { + definedSymbols.insert(std::make_pair(std::string(name, length), (size_t)i)); + } + } + + // ---- exports ------------------------------------------------------------ + // The export trie is authoritative. Symbols it exports but which the symbol + // table does not mark as external are upgraded in place; symbols missing + // from the symbol table altogether are appended. + struct AdditionalSymbol { + uint32_t stringIndex; + uint64_t value; + }; + std::vector additionalSymbols; + std::vector upgradedTypes(numberOfSymbols, 0); + bool hasUpgrades = false; + + if (exportsTrieSize > 0 && exportsTrieOffset >= linkeditFileOffset && + (uint64_t)exportsTrieOffset - linkeditFileOffset + exportsTrieSize <= linkeditVmSize) { + const uint8_t* trie = linkeditBase + (exportsTrieOffset - linkeditFileOffset); + if (trie + exportsTrieSize <= linkeditEnd) { + ExportTrie walker(trie, exportsTrieSize); + walker.walk(); + + uint64_t imageBase = (uint64_t)header - (uint64_t)slide; + + const std::vector& exports = walker.entries(); + for (size_t i = 0; i < exports.size(); i++) { + const std::string& name = exports[i].first; + + std::unordered_map::const_iterator found = + definedSymbols.find(name); + if (found != definedSymbols.end()) { + uint8_t& type = upgradedTypes[found->second]; + type = symbols[found->second].n_type; + type |= N_EXT; + type &= ~N_PEXT; + hasUpgrades = true; + continue; + } + + uint32_t stringOffset = (uint32_t)strings.size(); + strings.insert(strings.end(), name.begin(), name.end()); + strings.push_back('\0'); + + AdditionalSymbol symbol; + symbol.stringIndex = stringOffset; + symbol.value = exports[i].second != 0 ? imageBase + exports[i].second : 0; + additionalSymbols.push_back(symbol); + } + } + } + + // ---- assemble ---------------------------------------------------------- + align(buffer, 8); + uint32_t newSymbolOffset = (uint32_t)buffer.size(); + + for (uint32_t i = 0; i < numberOfSymbols; i++) { + struct nlist_64 entry = symbols[i]; + entry.n_un.n_strx = newStringIndex[i]; + if (hasUpgrades && upgradedTypes[i] != 0) + entry.n_type = upgradedTypes[i]; + append(buffer, entry); + } + + for (size_t i = 0; i < additionalSymbols.size(); i++) { + struct nlist_64 entry; + memset(&entry, 0, sizeof(entry)); + entry.n_un.n_strx = additionalSymbols[i].stringIndex; + entry.n_type = N_SECT | N_EXT; + entry.n_sect = 1; + entry.n_desc = 0; + entry.n_value = additionalSymbols[i].value; + append(buffer, entry); + } + + uint32_t newStringOffset = (uint32_t)buffer.size(); + buffer.insert(buffer.end(), strings.begin(), strings.end()); + + // ---- patch the copied LC_SYMTAB ---------------------------------------- + struct symtab_command* patched = + reinterpret_cast(&buffer[symtabCommandOffset]); + patched->symoff = newSymbolOffset; + patched->nsyms = numberOfSymbols + (uint32_t)additionalSymbols.size(); + patched->stroff = newStringOffset; + patched->strsize = (uint32_t)strings.size(); +} diff --git a/MachO/dyldcacheimage.h b/MachO/dyldcacheimage.h new file mode 100644 index 0000000..9cad6a4 --- /dev/null +++ b/MachO/dyldcacheimage.h @@ -0,0 +1,43 @@ +#ifndef DYLD_CACHE_IMAGE_H +#define DYLD_CACHE_IMAGE_H + +#include "macho_global.h" + +#include +#include + +/** + * A library that has no representation on disk (it only lives inside the dyld + * shared cache) can still be inspected: dyld maps it into this process as soon + * as it is dlopen()ed, and the mapped image carries the very same load commands + * and LINKEDIT data that an on-disk Mach-O file would have. + * + * This class dlopen()s such a library, then copies the pieces MacDependency + * needs -- header, load commands, symbol table and string table -- into one + * contiguous buffer and rewrites the LINKEDIT offsets so that the result is a + * self contained Mach-O file image which can be parsed by the regular + * MachOFile / MachOArchitecture code. + * + * Exports are taken from LC_DYLD_EXPORTS_TRIE (which is authoritative -- the + * symbol table of some cached images, AppKit for instance, marks far fewer + * symbols as external than the image actually exports). Imports are the + * undefined entries of LC_SYMTAB. + */ +class EXPORT DyldCacheImage +{ +public: + DyldCacheImage(); + ~DyldCacheImage(); + + /** Maps `path` and builds the in-memory file image. Throws MachOException. */ + void load(const std::string& path); + + /** Owning buffer with the synthesized Mach-O file image. */ + const char* getData() const { return buffer.empty() ? 0 : &buffer[0]; } + unsigned long long getSize() const { return (unsigned long long)buffer.size(); } + +private: + std::vector buffer; +}; + +#endif // DYLD_CACHE_IMAGE_H diff --git a/MachO/internalfile.cpp b/MachO/internalfile.cpp index 5de50a0..12db1c8 100644 --- a/MachO/internalfile.cpp +++ b/MachO/internalfile.cpp @@ -1,7 +1,11 @@ #include "internalfile.h" +#include "diskinternalfile.h" +#include "memoryinternalfile.h" +#include "dyldcacheimage.h" #include "machoexception.h" -#include +#include +#include // use reference counting to reuse files for all used architectures InternalFile* InternalFile::create(InternalFile* file) { @@ -10,7 +14,17 @@ InternalFile* InternalFile::create(InternalFile* file) { } InternalFile* InternalFile::create(const std::string& filename) { - return new InternalFile(filename); + try { + return new DiskInternalFile(filename); + } catch (MachOException&) { + // no readable file on disk -- maybe the library only exists inside the + // dyld shared cache + } + + // Throws a MachOException when the library cannot be mapped either. + DyldCacheImage image; + image.load(filename); + return new MemoryInternalFile(filename, image.getData(), image.getSize()); } void InternalFile::release() { @@ -21,30 +35,12 @@ void InternalFile::release() { } InternalFile::InternalFile(const std::string& filename) : -filename(filename), counter(1) +counter(1), filename(filename) { - // open file handle - file.open(this->filename, std::ios_base::in | std::ios_base::binary); - if (file.fail()) { - void* dylib = dlopen(this->filename.c_str(), RTLD_LAZY); - if (dylib) { - dlclose(dylib); - throw MachOException("System cached library '" + filename + "'.", true); - } else { - throw MachOException("Couldn't open file '" + filename + "'."); - } - } - - struct stat buffer; - if (stat(filename.c_str(), &buffer) >= 0) { - _fileSize = buffer.st_size; - _lastWriteTime = buffer.st_mtime; - } } -// destructor is private since we use reference counting mechanism -InternalFile::~InternalFile() { - file.close(); +InternalFile::~InternalFile() +{ } /* returns whole filename (including path)*/ @@ -61,34 +57,3 @@ std::string InternalFile::getName() const { std::string InternalFile::getTitle() const { return filename; } - -unsigned long long InternalFile::getSize() const { - return _fileSize; -} - -bool InternalFile::seek(long long int position) { - file.seekg(position, std::ios_base::beg); - if (file.fail()) { - file.clear(); - return false; - } - return true; -} - -std::streamsize InternalFile::read(char* buffer, std::streamsize size) { - file.read(buffer, size); - if (file.fail()) { - file.clear(); - return file.gcount(); - } - // TODO: handle badbit - return size; -} - -long long int InternalFile::getPosition() { - return file.tellg(); -} - -time_t InternalFile::getLastModificationTime() const { - return _lastWriteTime; -} diff --git a/MachO/internalfile.h b/MachO/internalfile.h index f70ac51..ec0a6ef 100644 --- a/MachO/internalfile.h +++ b/MachO/internalfile.h @@ -3,6 +3,17 @@ #include "macho_global.h" +#include +#include + +/** + * Abstract source of raw bytes for the Mach-O parsers. + * + * Normally the bytes come from a file on disk (DiskInternalFile), but libraries + * that only exist inside the dyld shared cache have no file to open. For those + * MemoryInternalFile serves a Mach-O image that DyldCacheImage rebuilt from the + * mapped -- already loaded -- image. + */ class InternalFile { @@ -13,23 +24,21 @@ class InternalFile static InternalFile* create(const std::string& filename); void release(); - std::string getFolder() const; std::string getName() const; std::string getTitle() const; - unsigned long long getSize() const; - bool seek(long long int position); - std::streamsize read(char* buffer, std::streamsize size); - long long int getPosition(); - time_t getLastModificationTime() const; + + virtual unsigned long long getSize() const = 0; + virtual bool seek(long long int position) = 0; + virtual std::streamsize read(char* buffer, std::streamsize size) = 0; + virtual long long int getPosition() = 0; + virtual time_t getLastModificationTime() const = 0; + +protected: + explicit InternalFile(const std::string& filename); private: unsigned int counter; - - InternalFile(const std::string& filename); - std::ifstream file; std::string filename; - size_t _fileSize; - time_t _lastWriteTime; }; #endif // INTERNALFILE_H diff --git a/MachO/memoryinternalfile.cpp b/MachO/memoryinternalfile.cpp new file mode 100644 index 0000000..a7918da --- /dev/null +++ b/MachO/memoryinternalfile.cpp @@ -0,0 +1,41 @@ +#include "memoryinternalfile.h" + +#include + +MemoryInternalFile::MemoryInternalFile(const std::string& filename, const char* data, size_t size) : +InternalFile(filename), data(data, data + size), position(0) +{ +} + +unsigned long long MemoryInternalFile::getSize() const { + return (unsigned long long)data.size(); +} + +bool MemoryInternalFile::seek(long long int position) { + if (position < 0 || (unsigned long long)position > data.size()) { + return false; + } + this->position = position; + return true; +} + +std::streamsize MemoryInternalFile::read(char* buffer, std::streamsize size) { + std::streamsize available = (std::streamsize)data.size() - position; + if (available <= 0 || size <= 0) + return 0; + + std::streamsize count = (size < available) ? size : available; + if (!data.empty()) + memcpy(buffer, &data[(size_t)position], (size_t)count); + position += count; + return count; +} + +long long int MemoryInternalFile::getPosition() { + return position; +} + +// A cached library has no file on disk, so there is no modification time. +time_t MemoryInternalFile::getLastModificationTime() const { + return 0; +} diff --git a/MachO/memoryinternalfile.h b/MachO/memoryinternalfile.h new file mode 100644 index 0000000..12aedbe --- /dev/null +++ b/MachO/memoryinternalfile.h @@ -0,0 +1,30 @@ +#ifndef MEMORYINTERNALFILE_H +#define MEMORYINTERNALFILE_H + +#include "internalfile.h" + +#include +#include + +/** + * An InternalFile backed by a buffer in memory. Used for libraries of the dyld + * shared cache, which have no file on disk but whose image can be copied out of + * the running process. + */ +class MemoryInternalFile : public InternalFile +{ +public: + MemoryInternalFile(const std::string& filename, const char* data, size_t size); + + virtual unsigned long long getSize() const; + virtual bool seek(long long int position); + virtual std::streamsize read(char* buffer, std::streamsize size); + virtual long long int getPosition(); + virtual time_t getLastModificationTime() const; + +private: + std::vector data; + long long int position; +}; + +#endif // MEMORYINTERNALFILE_H From 509ac34a683202ade2714cb664521917470593e6 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Mon, 7 Sep 2026 15:50:05 +0800 Subject: [PATCH 5/9] Mark libraries served from the dyld shared cache in a distinct color --- MacDependency/MachOModel.h | 1 + MacDependency/MachOModel.mm | 10 +++++++++- MachO/diskinternalfile.cpp | 4 ++++ MachO/diskinternalfile.h | 3 +++ MachO/internalfile.h | 8 ++++++++ MachO/macho.cpp | 6 ++++++ MachO/macho.h | 1 + MachO/machofile.cpp | 1 + MachO/machofile.h | 3 +++ MachO/memoryinternalfile.cpp | 4 ++++ MachO/memoryinternalfile.h | 3 +++ 11 files changed, 43 insertions(+), 1 deletion(-) diff --git a/MacDependency/MachOModel.h b/MacDependency/MachOModel.h index 2c8ace4..eaaac23 100644 --- a/MacDependency/MachOModel.h +++ b/MacDependency/MachOModel.h @@ -36,6 +36,7 @@ enum State { - (NSArray*) children; - (BOOL) isLeaf; +- (BOOL) isInMemory; - (NSColor*) textColor; - (NSString*) name; - (NSNumber*) currentVersion; diff --git a/MacDependency/MachOModel.mm b/MacDependency/MachOModel.mm index 7c67bfe..73113a8 100644 --- a/MacDependency/MachOModel.mm +++ b/MacDependency/MachOModel.mm @@ -171,6 +171,12 @@ - (BOOL)isLeaf { return NO; } +/*! YES when the Mach-O has no representation on disk, i.e. it was served out of + the dyld shared cache and is only kept in memory. */ +- (BOOL) isInMemory { + return file != nullptr && file->isInMemory(); +} + - (NSColor*) textColor { NSColor* color; switch(state) { @@ -181,7 +187,9 @@ - (NSColor*) textColor { color = [NSColor systemRedColor]; break; default: - color = [NSColor labelColor]; + // Libraries that live only in the dyld shared cache get their own + // color, so it is obvious that there is no file to inspect on disk. + color = [self isInMemory] ? [NSColor systemPurpleColor] : [NSColor labelColor]; } return color; } diff --git a/MachO/diskinternalfile.cpp b/MachO/diskinternalfile.cpp index ca98142..25f0f89 100644 --- a/MachO/diskinternalfile.cpp +++ b/MachO/diskinternalfile.cpp @@ -54,3 +54,7 @@ long long int DiskInternalFile::getPosition() { time_t DiskInternalFile::getLastModificationTime() const { return lastWriteTime; } + +bool DiskInternalFile::isInMemory() const { + return false; +} diff --git a/MachO/diskinternalfile.h b/MachO/diskinternalfile.h index b4e2886..4893b0f 100644 --- a/MachO/diskinternalfile.h +++ b/MachO/diskinternalfile.h @@ -18,6 +18,9 @@ class DiskInternalFile : public InternalFile virtual long long int getPosition(); virtual time_t getLastModificationTime() const; + /** Always false: the bytes come from a real file on disk. */ + virtual bool isInMemory() const; + private: std::ifstream file; unsigned long long fileSize; diff --git a/MachO/internalfile.h b/MachO/internalfile.h index ec0a6ef..17100fa 100644 --- a/MachO/internalfile.h +++ b/MachO/internalfile.h @@ -33,6 +33,14 @@ class InternalFile virtual long long int getPosition() = 0; virtual time_t getLastModificationTime() const = 0; + /** + * True when the bytes are not backed by a file on disk. This is the case for + * libraries that only exist inside the dyld shared cache: their image is + * rebuilt in memory by DyldCacheImage. The UI marks those entries specially, + * because there is nothing on disk to inspect or reveal in the Finder. + */ + virtual bool isInMemory() const = 0; + protected: explicit InternalFile(const std::string& filename); diff --git a/MachO/macho.cpp b/MachO/macho.cpp index 86c7541..358a7e6 100644 --- a/MachO/macho.cpp +++ b/MachO/macho.cpp @@ -149,6 +149,12 @@ time_t MachO::getLastModificationTime() const { return file->getLastModificationTime(); } +// True when this Mach-O has no file on disk, i.e. it was served out of the dyld +// shared cache. +bool MachO::isInMemory() const { + return file != 0 && file->isInMemory(); +} + // return bundle version if available, otherwise NULL string std::string MachO::getVersion() const { std::string version; diff --git a/MachO/macho.h b/MachO/macho.h index b921d48..6320eb5 100644 --- a/MachO/macho.h +++ b/MachO/macho.h @@ -27,6 +27,7 @@ class EXPORT MachO { time_t getLastModificationTime() const; std::string getVersion() const; std::string getName() const; + bool isInMemory() const; const MachO* getParent() { return parent;} static DynamicLoader* dynamicLoader; static int referenceCounter; diff --git a/MachO/machofile.cpp b/MachO/machofile.cpp index 276f1d0..f221a6a 100644 --- a/MachO/machofile.cpp +++ b/MachO/machofile.cpp @@ -34,6 +34,7 @@ std::string MachOFile::getDirectory() const { std::string MachOFile::getTitle() const { return file->getTitle(); } unsigned long long MachOFile::getSize() const { return file->getSize(); } time_t MachOFile::getLastModificationTime() const { return file->getLastModificationTime(); } +bool MachOFile::isInMemory() const { return file->isInMemory(); } uint32_t MachOFile::readUint32() { unsigned int temp; diff --git a/MachO/machofile.h b/MachO/machofile.h index b019dd5..1e28e5c 100644 --- a/MachO/machofile.h +++ b/MachO/machofile.h @@ -29,6 +29,9 @@ class MachOFile const std::string& getExecutablePath() const { return executablePath; } time_t getLastModificationTime() const; + /** True when the underlying bytes come from the dyld shared cache, not disk. */ + bool isInMemory() const; + private: static unsigned int convertByteOrder(char* data, bool isBigEndian, unsigned int numberOfBytes); static unsigned int reverseByteOrder(unsigned int data); diff --git a/MachO/memoryinternalfile.cpp b/MachO/memoryinternalfile.cpp index a7918da..20a55e6 100644 --- a/MachO/memoryinternalfile.cpp +++ b/MachO/memoryinternalfile.cpp @@ -39,3 +39,7 @@ long long int MemoryInternalFile::getPosition() { time_t MemoryInternalFile::getLastModificationTime() const { return 0; } + +bool MemoryInternalFile::isInMemory() const { + return true; +} diff --git a/MachO/memoryinternalfile.h b/MachO/memoryinternalfile.h index 12aedbe..af8681d 100644 --- a/MachO/memoryinternalfile.h +++ b/MachO/memoryinternalfile.h @@ -22,6 +22,9 @@ class MemoryInternalFile : public InternalFile virtual long long int getPosition(); virtual time_t getLastModificationTime() const; + /** Always true: a cached library has no file on disk. */ + virtual bool isInMemory() const; + private: std::vector data; long long int position; From 78720e3dffe7cb54ac09ab50daa54f3ec7ba061f Mon Sep 17 00:00:00 2001 From: Carter Li Date: Mon, 7 Sep 2026 15:52:52 +0800 Subject: [PATCH 6/9] Fix indent --- MacDependency/AutoExpandOutlineView.m | 52 ++++++++++++++++++++++++- MacDependency/Base.lproj/MyDocument.xib | 13 +------ 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/MacDependency/AutoExpandOutlineView.m b/MacDependency/AutoExpandOutlineView.m index 0d0d1d7..e06de18 100644 --- a/MacDependency/AutoExpandOutlineView.m +++ b/MacDependency/AutoExpandOutlineView.m @@ -11,8 +11,16 @@ @implementation AutoExpandOutlineView +- (void)awakeFromNib { + [super awakeFromNib]; + // The nib does not set a delegate; become our own delegate so that + // -outlineView:willDisplayCell:forTableColumn:item: runs and we can + // push the cell title past the disclosure triangle. + if ([self delegate] == nil) { + [self setDelegate:self]; + } +} -// gets called after binding has changed - (void)reloadData; { [super reloadData]; @@ -23,4 +31,46 @@ - (void)reloadData; [self expandItem:item]; } +#pragma mark - Hierarchy indentation + +// In source-list style the outline column's cell is drawn at a fixed x +// regardless of row level, and -frameOfCellAtColumn:row: is ignored for +// drawing, so the disclosure button lands on top of the leading characters +// of the name. Instead, we keep the cell frame untouched and use the +// cell's built-in -indentationLevel (set in -outlineView:willDisplayCell:: +// forTableColumn:item:) to push the title past the button. The button +// itself is repositioned in -frameOfOutlineCellAtRow: so it indents one +// level per row depth, matching the text. + +static const CGFloat kDisclosureButtonWidth = 16.0; + +- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row { + NSInteger outlineColumnIndex = [[self tableColumns] indexOfObject:[self outlineTableColumn]]; + NSRect columnRect = [self rectOfColumn:outlineColumnIndex]; + CGFloat indent = [self indentationPerLevel]; + NSInteger level = [self levelForRow:row]; + NSRect rect = [super frameOfOutlineCellAtRow:row]; + rect.origin.x = columnRect.origin.x + level * indent; + return rect; +} + +- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item { + if (tableColumn != [outlineView outlineTableColumn]) { + // Non-outline columns: keep them flush with the row (reset indent). + if ([cell respondsToSelector:@selector(setIndentationLevel:)]) { + [cell setIndentationLevel:0]; + } + return; + } + NSInteger level = [outlineView levelForItem:item]; + CGFloat indent = [outlineView indentationPerLevel]; + // Total left offset = room for the disclosure button at this level + the + // per-level indent. The cell itself stays where AppKit placed it; the + // title is shifted by this much via -setIndentationLevel:. + CGFloat total = kDisclosureButtonWidth + level * indent; + if ([cell respondsToSelector:@selector(setIndentationLevel:)]) { + [cell setIndentationLevel:(NSInteger)total]; + } +} + @end diff --git a/MacDependency/Base.lproj/MyDocument.xib b/MacDependency/Base.lproj/MyDocument.xib index 297ce7e..487f941 100644 --- a/MacDependency/Base.lproj/MyDocument.xib +++ b/MacDependency/Base.lproj/MyDocument.xib @@ -45,24 +45,13 @@ - + - - - - - - - - - - - From 676e6eaf08b037618ffa5716f4c7f204bfaeea79 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 8 Oct 2026 15:36:18 +0800 Subject: [PATCH 7/9] Add Obj-C class implementation export feature --- .gitignore | 1 + AGENTS.md | 272 ++++ MacDependency/ArchitectureModel.mm | 2 +- MacDependency/Base.lproj/MainMenu.xib | 16 + MacDependency/Base.lproj/MyDocument.xib | 160 +- .../MacDependency.xcodeproj/project.pbxproj | 24 +- MacDependency/MachOModel.h | 11 + MacDependency/MachOModel.mm | 57 +- MacDependency/MyDocument.h | 30 + MacDependency/MyDocument.mm | 590 +++++++- .../ObjCClassDefinitionWindowController.h | 30 + .../ObjCClassDefinitionWindowController.m | 109 ++ MacDependency/SymbolTableController.h | 73 + MacDependency/SymbolTableController.mm | 236 ++- MacDependency/SymbolTableEntryKindFormatter.h | 25 + .../SymbolTableEntryKindFormatter.mm | 50 + MacDependency/SymbolTableEntryModel.h | 32 +- MacDependency/SymbolTableEntryModel.mm | 23 +- MacDependency/SymbolTableEntryTypeFormatter.h | 6 + .../SymbolTableEntryTypeFormatter.mm | 30 +- MacDependency/SymbolTableHeaderView.h | 20 + MacDependency/SymbolTableHeaderView.m | 108 ++ MacDependency/en.lproj/Localizable.strings | Bin 4538 -> 6650 bytes MachO/MachO.xcodeproj/project.pbxproj | 44 +- MachO/dyldcacheimage.cpp | 7 + MachO/dyldcacheimage.h | 15 + MachO/internalfile.cpp | 3 +- MachO/internalfile.h | 9 + MachO/linkeditdatacommand.cpp | 33 + MachO/linkeditdatacommand.h | 46 + MachO/loadcommand.cpp | 19 + MachO/machoarchitecture.cpp | 106 ++ MachO/machoarchitecture.h | 39 +- MachO/machofile.cpp | 22 + MachO/machofile.h | 10 + MachO/machofixups.cpp | 507 +++++++ MachO/machofixups.h | 105 ++ MachO/memoryinternalfile.cpp | 5 +- MachO/memoryinternalfile.h | 9 +- MachO/objcmetadata.cpp | 1284 +++++++++++++++++ MachO/objcmetadata.h | 165 +++ MachO/objctypedecoder.cpp | 279 ++++ MachO/objctypedecoder.h | 62 + MachO/segmentcommand.cpp | 118 ++ MachO/segmentcommand.h | 79 + MachO/symboltableentry.cpp | 182 ++- MachO/symboltableentry.h | 40 + MachO/symboltableentry32.cpp | 4 + MachO/symboltableentry32.h | 1 + MachO/symboltableentry64.cpp | 4 + MachO/symboltableentry64.h | 1 + README.md | 193 ++- 52 files changed, 5162 insertions(+), 134 deletions(-) create mode 100644 AGENTS.md create mode 100644 MacDependency/ObjCClassDefinitionWindowController.h create mode 100644 MacDependency/ObjCClassDefinitionWindowController.m create mode 100644 MacDependency/SymbolTableEntryKindFormatter.h create mode 100644 MacDependency/SymbolTableEntryKindFormatter.mm create mode 100644 MacDependency/SymbolTableHeaderView.h create mode 100644 MacDependency/SymbolTableHeaderView.m create mode 100644 MachO/linkeditdatacommand.cpp create mode 100644 MachO/linkeditdatacommand.h create mode 100644 MachO/machofixups.cpp create mode 100644 MachO/machofixups.h create mode 100644 MachO/objcmetadata.cpp create mode 100644 MachO/objcmetadata.h create mode 100644 MachO/objctypedecoder.cpp create mode 100644 MachO/objctypedecoder.h create mode 100644 MachO/segmentcommand.cpp create mode 100644 MachO/segmentcommand.h diff --git a/.gitignore b/.gitignore index 028fedc..0f3f312 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ xcuserdata/ build/ build.xcresult/ /archive.xcarchive +/.* diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c8cc487 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,272 @@ +# AGENTS.md + +Notes for AI agents working in this repository: **read this page first, then +`README.md`.** It covers how to build, run and verify the project and where the +sharp edges are — not what the app does. + +--- + +## 1. What this repository is + +This is a fork of the upstream **macdependency** project. Features that exist +only here are marked **`*This fork.*`** in `README.md` — **keep that marking up +to date** when you touch a feature, otherwise a reader cannot tell what is +upstream and what is ours. + +Work on the fork. Do not push to the upstream repository. + +--- + +## 2. Layout + +``` +MachO/ # the parsing library (C++, a framework target) +├── MachO.xcodeproj +├── MachO_Prefix.h # library prefix header +├── machoarchitecture.* # one architecture: segments/sections, read by address +├── machoheader.* # MachOHeader::FileType (MH_EXECUTE / MH_DYLIB / …) +├── dylibcommand.* # DylibCommand::DependencyType (Normal / Weak / Delayed / Id) +├── internalfile.* # InternalFile / DiskInternalFile / MemoryInternalFile +├── memoryinternalfile.* # an image that only exists in the dyld shared cache +├── objcmetadata.* # Objective-C metadata parsing +├── objctypedecoder.* # Objective-C type-encoding decoding +├── symboltableentry*.{h,cpp} # SymbolTableEntry::Type / Kind +└── dyldcacheimage.* # images served from the shared cache + +MacDependency/ # the Cocoa document app (Objective-C++, ARC) +├── MacDependency.xcodeproj +├── MacDependency_Prefix.h +├── MyDocument.{h,mm} # the document window; wires table, tree and log together +├── MachOModel.{h,mm} # one row of the dependency tree (fileKind / textColor) +├── SymbolTableController.{h,mm} +├── SymbolTableHeaderView.{h,m} # header chevrons + filter menus (this fork) +├── SymbolTableEntryModel.* +├── SymbolTableEntryTypeFormatter.* # Export / Import labels +├── SymbolTableEntryKindFormatter.* # C / C++ / Swift / ObjC class / … labels +├── ObjCClassDefinitionWindowController.* +├── Base.lproj/*.xib # MyDocument.xib / MainMenu.xib +└── en.lproj/Localizable.strings # UTF-16LE! + +docs/ +└── objc-class-definition-progress.md # the main progress log for the ObjC work +.github/workflows/build.yml # CI: builds MacDependency on macos-latest +images/ +``` + +`MachO.xcodeproj` is a **subproject** of `MacDependency.xcodeproj`, and the app +links the library as `MachO.framework`. There are exactly two schemes: +`MacDependency` and `MachO`. There is no test target — CI only builds the app. + +--- + +## 3. Building + +Run this from the repository root: + +```bash +xcodebuild -project MacDependency/MacDependency.xcodeproj \ + -scheme MacDependency \ + -configuration Debug \ + -derivedDataPath /tmp/macdep-derived \ + MACOSX_DEPLOYMENT_TARGET=12.0 \ + build +``` + +The product lands in +`/tmp/macdep-derived/Build/Products/Debug/MacDependency.app`. + +**Sharp edges:** + +- **You must override the deployment target.** Both projects set + `MACOSX_DEPLOYMENT_TARGET` at *target* level (a recent macOS version) and at + *project* level (a very old one). The SDK on a current machine will not accept + a deployment target below 12.0, so always pass + `MACOSX_DEPLOYMENT_TARGET=12.0` on the command line. +- **`-derivedDataPath` requires `-scheme`.** With only `-target` it fails with + `The flag -scheme, -testprojectPath, or -xctestrun is required`. +- Keep derived data out of the working tree; `/tmp` is easiest. Any dot-directory + at the top level is ignored by `.gitignore` (`/.*`), so build output and local + agent state never get committed. +- Two warnings are pre-existing and not caused by your change: a headermap + warning from the `MachO` project, and a deprecated + `preparedCellAtColumn:row:` in `MyDocument.mm`. +- If you only changed library code under `MachO/` and just want to know whether + it compiles, building the `MachO` scheme alone is much faster. + +--- + +## 4. Code conventions + +### Library side, `MachO/` (plain C++) + +- C++11 / libc++, public types marked with the `EXPORT` macro. +- Forward-declare in headers when you can (e.g. `machoarchitecture.h` only needs + `class SegmentCommand;`). +- Reading a **memory-mapped image** always goes through + `MachOArchitecture::readFromProcess()` (which uses `vm_read_overwrite`). + **Never dereference the address directly** — it is not guaranteed readable. +- A new `.cpp` needs `settings = {COMPILER_FLAGS = "-fno-objc-arc"; }` in + `MachO.xcodeproj`, matching the rest of the library. + +### App side, `MacDependency/` (Objective-C++, ARC) + +- New files are `.mm` (Objective-C++) or `.m` (plain Objective-C); both are ARC. +- A `@property` declares an ivar named `_xxx`; writing `xxx` inside a method body + will not compile — write `self.xxx`. +- **Do not let two objects strongly reference each other under ARC.** The header + view registers itself with the controller in `awakeFromNib`, and the controller + keeps its headers in a `[NSHashTable weakObjectsHashTable]`. + +### Why the two halves are separate targets + +- Both projects enable `GCC_PRECOMPILE_PREFIX_HEADER`. `MachO_Prefix.h` and + `MacDependency_Prefix.h` pull in Cocoa plus the C++ standard headers, and the + sources rely on them without including anything themselves. +- The library is plain C++ and the app is ARC Objective-C++; their compiler flags + are incompatible, so they cannot be compiled as one target. +- App sources use directory-qualified includes such as `#import "MachO/macho.h"`, + so the repository root must be on the include path. That is what + `HEADER_SEARCH_PATHS = ./../` in the project file means (one level up from + `MacDependency/`). + +### Compile traps seen in this codebase + +| Written as | Error | Write instead | +|---|---|---| +| `rectA == rectB` (`NSRect`) | `invalid operands to binary expression` | `NSEqualRects(rectA, rectB)` | +| `filterController` (bare ivar name) | `use of undeclared identifier` | `self.filterController` | +| `[self numberOfColumns]` | `no visible @interface ... declares the selector` | `numberOfColumns` belongs to `NSTableView`, not `NSTableHeaderView` | + +--- + +## 5. Hand-edited resource files + +These are maintained by hand or by script; be careful with them. + +### `Base.lproj/MyDocument.xib` + +- Validate with + `ibtool --compile /tmp/x.nib MacDependency/Base.lproj/MyDocument.xib` — if that + fails, the xib is malformed. +- Header filtering identifies columns by **column identifier**: `Type`, `Kind`, + `Name`. Changing an identifier breaks + `SymbolTableController -hasFilterMenuForTableColumn:`. +- `columnAutoresizingStyle` on the outline view: + - `lastColumnOnly` — the last column takes the slack; + - `firstColumnOnly` — the first column takes the slack. The dependency tree + uses this so `Name (Install Name)` absorbs the width. + +### `en.lproj/Localizable.strings` + +**This file is UTF-16LE.** Appending with `echo >>` or `cat >>` corrupts the +encoding and turns every string in the app into a lookup key. + +```python +# Read and write it as utf-16 with Python, then append the new keys. +import io +path = "MacDependency/en.lproj/Localizable.strings" +with io.open(path, "r", encoding="utf-16") as f: + text = f.read() +# ...edit text... +with io.open(path, "w", encoding="utf-16") as f: + f.write(text) +``` + +### `*.xcodeproj/project.pbxproj` + +A new source file has to be registered by hand in **four** places, using +24-digit hexadecimal IDs of our own making: + +- `PBXBuildFile` section: + `B3C0DE0F1A2B3C4D5E0001xx /* Foo.m in Sources */ = {... fileRef = ...0000xx ...};` +- `PBXFileReference` section: + `B3C0DE0F1A2B3C4D5E0000xx /* Foo.m */ = {...};` +- the owning `PBXGroup`'s `children`, and the target's `PBXSourcesBuildPhase` + `files`. + +(`MachO` uses the `B2C0DE0F...` prefix, `MacDependency` uses `B3C0DE0F...`; do not +reuse a number within one project.) + +--- + +## 6. Documentation and notes + +- **`docs/objc-class-definition-progress.md`** is the main progress log for the + Objective-C class-definition work line. **Update it when you reach a milestone, + before moving on.** A feature belonging to that line goes in there; a new work + line gets its own `docs/*.md`. +- **`README.md`** is user-facing. Keep it in step with the code: + - mark fork-only features with `*This fork.*`; + - the tables (the dependency tree, the symbol table sections) must agree with + the code on column names and values. +- Development-time verification harnesses are **not** part of the repository. + How to rebuild and run them is recorded in the project notes alongside the + working copy, not here. + +--- + +## 7. Runtime traps + +- **The dependency graph has cycles** (Foundation depends on something that + depends on Foundation). Walking `MachOModel.children` **must deduplicate by + filename**, or memory blows up and the process is OOM-killed (exit 137). +- **A symbol's kind can only be told from its name prefix** — there is no + metadata for it. The protocol prefix is `__OBJC_PROTOCOL_$_` (note the **two** + leading underscores). +- **Protocol definition symbols are always `local`**, so with the Type filter set + to Export/Import you will not see `ObjC protocol` rows at all. That is not a + bug. +- **Type and Kind are two independent filters** sharing one + `SymbolTableController`. The header menu and the on-table `Export` / `Import` + buttons are **two views of the same state** and must write back to each other: + - `typeFilterMask` is the single source of truth (bit 0 = Export, bit 1 = Import); + - the header menu is **single-select** (`All types` / `Export` / `Import`), the + button group is a two-segment `selectAny`; + - **the last remaining type must not be switched off** (that would leave an + empty table); `updateTypeFilterControl` rolls it back. +- **Measure column widths against the longest label** with `sizeWithAttributes:` + instead of guessing. For reference: `Shared Cache` 85pt, `Executable File` + 91pt, `ObjC metaclass` 95pt, `Dynamic Library` 98pt, `System Shared Cache` + 133pt, `Link Type` 58pt. + +--- + +## 8. Suggested workflow + +1. Decide which side the change belongs to: `MachO/` (parsing) or + `MacDependency/` (UI, bindings). The two halves compile with different flags, + so mixing them up produces confusing link errors. +2. Run `xcodebuild` to confirm it compiles (the `MachO` scheme is a fast check for + library-only changes). +3. If you touched a xib, an outlet or a binding, syntax-check the xib with + `ibtool` and make sure the app still opens a document without raising. +4. Update the progress doc under `docs/` and `README.md` (see §6). +5. Commit messages are English and imperative, matching the existing history + (e.g. `Fix indent`, `Mark libraries served from the dyld shared cache in a + distinct color`). + +--- + +## 9. Command cheat sheet + +```bash +# Build the app (from the repository root) +xcodebuild -project MacDependency/MacDependency.xcodeproj \ + -scheme MacDependency -configuration Debug -derivedDataPath /tmp/macdep-derived \ + MACOSX_DEPLOYMENT_TARGET=12.0 build + +# Run it +open /tmp/macdep-derived/Build/Products/Debug/MacDependency.app + +# Syntax-check a xib +ibtool --compile /tmp/MyDocument.nib MacDependency/Base.lproj/MyDocument.xib + +# List the schemes +xcodebuild -list -project MacDependency/MacDependency.xcodeproj +``` + +> **Note: the default shell here is fish.** For loops, conditionals or multi-line +> scripts, write a `.sh` file and run it with `bash /tmp/x.sh`, or wrap the +> command in `bash -c '...'`. Heredocs, `$?` and `for ... done` typed straight +> into fish will fail. For searching, use `rg` — the BSD `grep` shipped here does +> not support `\|` alternation and **fails silently**, returning nothing. diff --git a/MacDependency/ArchitectureModel.mm b/MacDependency/ArchitectureModel.mm index 8f8ebb2..faaee8c 100644 --- a/MacDependency/ArchitectureModel.mm +++ b/MacDependency/ArchitectureModel.mm @@ -238,7 +238,7 @@ - (void) initSymbols { SymbolTableCommand* command = dynamic_cast (*lcIter); if (command != 0) { for (SymbolTableCommand::SymbolTableEntriesConstIterator it = command->getSymbolTableEntryBegin(); it != command->getSymbolTableEntryEnd(); it++) { - SymbolTableEntryModel* symbolModel = [[SymbolTableEntryModel alloc] initWithEntry:*(it) demangleNamesPtr:[[document symbolTableController]demangleNamesPtr] document:document]; + SymbolTableEntryModel* symbolModel = [[SymbolTableEntryModel alloc] initWithEntry:*(it) demangleNamesPtr:[[document symbolTableController]demangleNamesPtr] document:document architecture:architecture]; [symbolEntries addObject:symbolModel]; } } diff --git a/MacDependency/Base.lproj/MainMenu.xib b/MacDependency/Base.lproj/MainMenu.xib index 9303f3e..225c32d 100644 --- a/MacDependency/Base.lproj/MainMenu.xib +++ b/MacDependency/Base.lproj/MainMenu.xib @@ -90,6 +90,22 @@ + + + + + + + + + + + + + + + + diff --git a/MacDependency/Base.lproj/MyDocument.xib b/MacDependency/Base.lproj/MyDocument.xib index 487f941..a431346 100644 --- a/MacDependency/Base.lproj/MyDocument.xib +++ b/MacDependency/Base.lproj/MyDocument.xib @@ -8,9 +8,12 @@ + + + @@ -45,14 +48,14 @@ - + - + @@ -68,8 +71,8 @@ - - + + @@ -84,6 +87,22 @@ + + + + + + + + + + + + + + + + @@ -103,7 +122,7 @@ - + @@ -174,6 +193,20 @@ + + + + + + + + + + + + + + @@ -361,7 +394,7 @@ - + @@ -383,7 +416,29 @@ - + + + + + + + + + + + + + + + + + + + + + + + @@ -414,25 +469,14 @@ - + + + + - - - - - - - - - - - - - - @@ -522,30 +566,29 @@ - + - - - - - - + + + + + - + - + - + - + @@ -1294,7 +1337,11 @@ - + + + + + @@ -1305,15 +1352,50 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1412,9 +1494,11 @@ + type + kind name symb symbolFilter diff --git a/MacDependency/MacDependency.xcodeproj/project.pbxproj b/MacDependency/MacDependency.xcodeproj/project.pbxproj index 53f187d..cf93de1 100644 --- a/MacDependency/MacDependency.xcodeproj/project.pbxproj +++ b/MacDependency/MacDependency.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -30,6 +30,9 @@ 8ED4567B10516D6200FAC99F /* MyDocumentWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED4567A10516D6200FAC99F /* MyDocumentWindow.m */; }; 8EFDEF7A101007B300E4D54D /* ConversionStdString.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EFDEF79101007B300E4D54D /* ConversionStdString.mm */; }; 8EFDEF9310100F1700E4D54D /* VersionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EFDEF9210100F1700E4D54D /* VersionFormatter.m */; }; + B3C0DE0F1A2B3C4D5E000102 /* ObjCClassDefinitionWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C0DE0F1A2B3C4D5E000002 /* ObjCClassDefinitionWindowController.m */; }; + B3C0DE0F1A2B3C4D5E000103 /* SymbolTableEntryKindFormatter.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3C0DE0F1A2B3C4D5E000004 /* SymbolTableEntryKindFormatter.mm */; }; + B3C0DE0F1A2B3C4D5E000105 /* SymbolTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C0DE0F1A2B3C4D5E000006 /* SymbolTableHeaderView.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -106,6 +109,12 @@ ADCDF194276D87BF002476ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; ADCDF195276D87BF002476ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; ADCDF196276D87BF002476ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + B3C0DE0F1A2B3C4D5E000001 /* ObjCClassDefinitionWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjCClassDefinitionWindowController.h; sourceTree = ""; wrapsLines = 0; }; + B3C0DE0F1A2B3C4D5E000002 /* ObjCClassDefinitionWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCClassDefinitionWindowController.m; sourceTree = ""; wrapsLines = 0; }; + B3C0DE0F1A2B3C4D5E000003 /* SymbolTableEntryKindFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTableEntryKindFormatter.h; sourceTree = ""; wrapsLines = 0; }; + B3C0DE0F1A2B3C4D5E000004 /* SymbolTableEntryKindFormatter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SymbolTableEntryKindFormatter.mm; sourceTree = ""; wrapsLines = 0; }; + B3C0DE0F1A2B3C4D5E000005 /* SymbolTableHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTableHeaderView.h; sourceTree = ""; wrapsLines = 0; }; + B3C0DE0F1A2B3C4D5E000006 /* SymbolTableHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SymbolTableHeaderView.m; sourceTree = ""; wrapsLines = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -181,6 +190,10 @@ 8EFDEF9210100F1700E4D54D /* VersionFormatter.m */, 8E212D82101212FF0078924A /* SymbolTableEntryTypeFormatter.h */, 8E212D83101212FF0078924A /* SymbolTableEntryTypeFormatter.mm */, + B3C0DE0F1A2B3C4D5E000003 /* SymbolTableEntryKindFormatter.h */, + B3C0DE0F1A2B3C4D5E000004 /* SymbolTableEntryKindFormatter.mm */, + B3C0DE0F1A2B3C4D5E000005 /* SymbolTableHeaderView.h */, + B3C0DE0F1A2B3C4D5E000006 /* SymbolTableHeaderView.m */, 8EAEBA2110126AB100E1D5D2 /* SymbolTableController.h */, 8EAEBA2210126AB100E1D5D2 /* SymbolTableController.mm */, 8EB56270104EA241006A44CD /* TreeControllerExtension.h */, @@ -190,6 +203,8 @@ 8EB5640D104FE62F006A44CD /* AutoExpandOutlineView.m */, 8ED4567910516D6200FAC99F /* MyDocumentWindow.h */, 8ED4567A10516D6200FAC99F /* MyDocumentWindow.m */, + B3C0DE0F1A2B3C4D5E000001 /* ObjCClassDefinitionWindowController.h */, + B3C0DE0F1A2B3C4D5E000002 /* ObjCClassDefinitionWindowController.m */, ); name = Classes; sourceTree = ""; @@ -325,10 +340,13 @@ 8ED32F48100B68FF00EBF623 /* MachOModel.mm in Sources */, 8ED330CE100BD19800EBF623 /* SymbolTableEntryModel.mm in Sources */, 8E1314FA100F7BFC00367510 /* MyDocument.mm in Sources */, + B3C0DE0F1A2B3C4D5E000102 /* ObjCClassDefinitionWindowController.m in Sources */, 8E1314FC100F7C0C00367510 /* main.m in Sources */, 8EFDEF7A101007B300E4D54D /* ConversionStdString.mm in Sources */, 8EFDEF9310100F1700E4D54D /* VersionFormatter.m in Sources */, 8E212D84101212FF0078924A /* SymbolTableEntryTypeFormatter.mm in Sources */, + B3C0DE0F1A2B3C4D5E000103 /* SymbolTableEntryKindFormatter.mm in Sources */, + B3C0DE0F1A2B3C4D5E000105 /* SymbolTableHeaderView.m in Sources */, 8EAEBA2310126AB100E1D5D2 /* SymbolTableController.mm in Sources */, 8EC4F16010400F02001F9FB8 /* ArchitecturesController.mm in Sources */, 8EC4F16A1040126A001F9FB8 /* ArchitectureModel.mm in Sources */, @@ -405,7 +423,7 @@ GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 14.6; PRODUCT_BUNDLE_IDENTIFIER = "com.googlecode.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = MacDependency; SDKROOT = macosx; @@ -422,7 +440,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 14.6; PRODUCT_BUNDLE_IDENTIFIER = "com.googlecode.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = MacDependency; SDKROOT = macosx; diff --git a/MacDependency/MachOModel.h b/MacDependency/MachOModel.h index eaaac23..eb9a1d0 100644 --- a/MacDependency/MachOModel.h +++ b/MacDependency/MachOModel.h @@ -43,6 +43,17 @@ enum State { - (NSNumber*) compatibleVersion; - (NSString*) filename; - (NSString*) dependencyType; + +/** + * What the file itself is: an executable, a dynamic library, or an image that + * only lives in the dyld shared cache and so has no file of its own. + * + * The shared cache comes first of all, because that is the one thing about such + * an image that is worth knowing before anything the header says: there is + * nothing on disk to open, to reveal in the Finder or to hand to another tool. + */ +- (NSString*) fileKind; + - (NSString*) version; - (NSDate*) lastModificationTime; - (NSArray*) architectures; diff --git a/MacDependency/MachOModel.mm b/MacDependency/MachOModel.mm index 73113a8..a58f4a8 100644 --- a/MacDependency/MachOModel.mm +++ b/MacDependency/MachOModel.mm @@ -177,21 +177,23 @@ - (BOOL) isInMemory { return file != nullptr && file->isInMemory(); } +/** + * The colour a row is drawn in. + * + * Only the two states that need acting upon have a colour of their own. An + * image that lives in the dyld shared cache used to get one as well, but the + * colour made those rows harder to read than the fact was worth: the File Kind + * column says "System Shared Cache" in words, in a colour that can be read. + */ - (NSColor*) textColor { - NSColor* color; switch(state) { case StateWarning: - color = [NSColor systemYellowColor]; - break; + return [NSColor systemYellowColor]; case StateError: - color = [NSColor systemRedColor]; - break; + return [NSColor systemRedColor]; default: - // Libraries that live only in the dyld shared cache get their own - // color, so it is obvious that there is no file to inspect on disk. - color = [self isInMemory] ? [NSColor systemPurpleColor] : [NSColor labelColor]; + return [NSColor labelColor]; } - return color; } - (NSString*) filename { @@ -266,6 +268,43 @@ - (NSString*) dependencyType { return type; } +- (NSString*) fileKind { + // Nothing was read for this row -- the library is missing, or has no + // architecture in common with its parent. Saying which of the three it is + // would be a guess, and the row already carries the colour and the log line + // that say what went wrong. + if (architecture == nullptr) { + return NSLocalizedString(@"FILE_KIND_UNKNOWN", @"Unknown"); + } + + // An image that was served out of the dyld shared cache is the one case + // where what the file is matters less than where it comes from: there is no + // file on disk to look at, whichever type the header records. + if ([self isInMemory]) { + return NSLocalizedString(@"FILE_KIND_SHARED_CACHE", nil); + } + + switch (architecture->getHeader()->getFileType()) { + case MachOHeader::FileTypeExecutable: + case MachOHeader::FileTypePreload: + return NSLocalizedString(@"FILE_KIND_EXECUTABLE", nil); + // Everything that is loaded into another process is one of these: the + // shared libraries proper, the bundles that are loaded on demand, the + // stubs left for static linking and the dynamic linker itself. + case MachOHeader::FileTypeDylib: + case MachOHeader::FileTypeDylibStub: + case MachOHeader::FileTypeBundle: + case MachOHeader::FileTypeVmLib: + case MachOHeader::FileTypeDylinker: + case MachOHeader::FileTypeKextBundle: + return NSLocalizedString(@"FILE_KIND_DYNAMIC_LIBRARY", nil); + default: + // Object files, core files, dSYM companions: never a dependency of + // anything, but the header can say so and it is not one of the three. + return NSLocalizedString(@"FILE_KIND_UNKNOWN", @"Unknown"); + } +} + - (NSArray*) architectures { NSMutableArray* architectures = [NSMutableArray arrayWithCapacity:4]; diff --git a/MacDependency/MyDocument.h b/MacDependency/MyDocument.h index 9881d4c..6ddc9bd 100644 --- a/MacDependency/MyDocument.h +++ b/MacDependency/MyDocument.h @@ -13,6 +13,12 @@ #import "MachOModel.h" #import "PrioritySplitViewDelegate.h" #import "SymbolTableController.h" +#import "SymbolTableEntryModel.h" + +#include + +class ObjCMetadata; +@class ObjCClassDefinitionWindowController; @interface MyDocument : NSDocument { @@ -26,7 +32,15 @@ IBOutlet NSTextField* textFieldBottomBar; IBOutlet NSSplitView* mainSplitView; IBOutlet SymbolTableController* symbolTableController; + IBOutlet NSTableView* symbolsTableView; + IBOutlet NSTabView* bottomTabView; + IBOutlet NSTextView* definitionTextView; unsigned int numDependencies; + // Parsed Objective-C metadata, one entry per architecture, built on demand: + // reading the class list of a system framework is not free. + std::map* objcMetadata; + // The class definition panels that are currently open. + NSMutableArray* definitionWindows; } - (NSAttributedString*)log; - (void)setLog:(NSAttributedString *)newLog; @@ -43,4 +57,20 @@ - (IBAction)clickRevealInFinder:(id)sender; - (NSString*)dependencyStatus; - (SymbolTableController*)symbolTableController; + +/** + * Shows the declaration of the Objective-C class behind the double clicked + * symbol table row, in a window of its own. A symbol this image does not define + * is provided by one of its dependencies, and the double click takes you to + * that library and to the export it makes of the symbol instead. + */ +- (IBAction)showObjCClassDefinition:(id)sender; + +/** + * Puts the selected row of the symbol table on the pasteboard, written the way + * the table displays it: "Export _AaaBbbCcc". This is what the Edit menu's Copy + * item sends, and it does something only while the symbol table has the focus + * and one of its rows is selected. + */ +- (IBAction)copy:(id)sender; @end diff --git a/MacDependency/MyDocument.mm b/MacDependency/MyDocument.mm index a9f4c52..df0c152 100644 --- a/MacDependency/MyDocument.mm +++ b/MacDependency/MyDocument.mm @@ -11,14 +11,45 @@ #import "MachOModel.h" #import "TreeControllerExtension.h" #import "ArchitectureModel.h" +#import "ObjCClassDefinitionWindowController.h" #include "MachO/machoexception.h" +#include "MachO/objcmetadata.h" +#import +#import +// The symbols that stand for an Objective-C class, and what they mean. +static NSString* const kObjCClassSymbolPrefix = @"_OBJC_CLASS_$_"; +static NSString* const kObjCMetaclassSymbolPrefix = @"_OBJC_METACLASS_$_"; // declare private methods @interface MyDocument () - (NSString*) serializeIndexPath:(NSIndexPath*)indexPath; - (NSIndexPath*) deserializeIndexPath:(NSString*)link; +- (ObjCMetadata*) objcMetadataForArchitecture:(MachOArchitecture*)architecture; +- (NSTableView*) findSymbolsTableView; +- (NSOutlineView*) findDependenciesOutlineView; +- (void) definitionWindowWillClose:(NSNotification*)notification; +- (void) prepareDefinitionTextView; +- (SymbolTableEntryModel*) symbolModelAtRow:(NSInteger)row; +- (BOOL) objcClassName:(NSString**)className metaclass:(BOOL*)metaclass ofSymbol:(NSString*)symbol; +- (NSString*) definitionForClassName:(NSString*)className + metaclass:(BOOL)metaclass + architecture:(MachOArchitecture*)architecture; +- (void) setDefinitionInBottomTab:(NSString*)definition; +- (void) showObjCClassDefinitionWindow:(NSString*)className + metaclass:(BOOL)metaclass + definition:(NSString*)definition; +- (void) symbolSelectionDidChange:(NSNotification*)notification; +- (NSInteger) focusedSymbolRow; +- (NSString*) rowText:(NSInteger)row inTableView:(NSTableView*)tableView; +- (void) revealImportSymbol:(SymbolTableEntryModel*)model; +- (NSArray*) librariesOfSelectedImage; +- (MachOModel*) providerOfImportedSymbol:(SymbolTableEntryModel*)model; +- (MachOModel*) dependencyProvidingSymbolInProcess:(NSString*)symbol; +- (MachOModel*) dependencyWithFileNamed:(NSString*)path; +- (void) selectExportedSymbolNamed:(NSString*)name; +- (NSInteger) rowOfExportedSymbolNamed:(NSString*)name; @end @implementation MyDocument @@ -27,7 +58,7 @@ - (id)init { self = [super init]; if (self) { - + // Add your subclass-specific initialization here. // If an error occurs here, send a [self release] message and return nil. //contents = [[NSMutableArray alloc] init]; @@ -35,13 +66,23 @@ - (id)init log = [[NSAttributedString alloc] initWithString:@""]; numDependencies = 0; splitViewDelegate = [[PrioritySplitViewDelegate alloc] init]; - + objcMetadata = 0; + definitionWindows = [[NSMutableArray alloc] init]; + } return self; } - (void) dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + if (objcMetadata != 0) { + for (std::map::iterator it = objcMetadata->begin(); it != objcMetadata->end(); ++it) + delete it->second; + delete objcMetadata; + objcMetadata = 0; + } delete cache; } @@ -56,19 +97,36 @@ - (NSString *)windowNibName - (void)windowControllerDidLoadNib:(NSWindowController *) aController { [super windowControllerDidLoadNib:aController]; - - // Add any code here that needs to be executed once the windowController has loaded the document's window. + + // Add any code here that needs to be executed once the windowController has loaded the document's window. + + // Double clicking a symbol either opens the class definition of an + // Objective-C class or takes you to the library that provides it; a single + // click is enough for a class definition to show up in the bottom tab. + // The table view is only a plain NSTableView in the nib, so the connections + // are made here rather than in Interface Builder. + NSTableView* tableView = symbolsTableView ? symbolsTableView : [self findSymbolsTableView]; + if (tableView != nil) { + [tableView setTarget:self]; + [tableView setDoubleAction:@selector(showObjCClassDefinition:)]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(symbolSelectionDidChange:) + name:NSTableViewSelectionDidChangeNotification + object:tableView]; + } + + [self prepareDefinitionTextView]; } - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil. - + // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. - + // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. - + if ( outError != NULL ) { *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; } @@ -77,26 +135,26 @@ - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError -{ +{ // TODO: detect changes on document file (FSEvents) or alternatively make reload possible - + // load file NSString* filePath = [absoluteURL path]; - + // convert to std:string std::string fileString = [filePath stdString]; try { machO = cache->getFile(fileString, NULL); } catch (MachOException& exc) { NSString* msg = [NSString stringWithUTF8String:exc.getCause().c_str()]; - - + + // create and return custom domain error (the localized description key is overwritten by OS, so no point in setting it here) NSArray *objArray = [NSArray arrayWithObjects:@"", msg, @"Try again with another file", nil]; NSArray *keyArray = [NSArray arrayWithObjects:NSLocalizedDescriptionKey, NSLocalizedFailureReasonErrorKey, NSLocalizedRecoverySuggestionErrorKey, nil]; - + NSDictionary *eDict = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray]; - + // fill outError *outError = [NSError errorWithDomain:@"MachO" code:0 userInfo:eDict]; return NO; @@ -105,8 +163,8 @@ - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSEr } -(void)awakeFromNib { - [[textFieldBottomBar cell] setBackgroundStyle:NSBackgroundStyleRaised]; - + [[textFieldBottomBar cell] setBackgroundStyle:NSBackgroundStyleRaised]; + [splitViewDelegate setPriority:1 forViewAtIndex:0]; [splitViewDelegate setPriority:0 forViewAtIndex:1]; [splitViewDelegate setMinimumLength:150 forViewAtIndex:0]; @@ -128,10 +186,10 @@ - (void)clearLog { } - (void)appendLogLine:(NSString *)line withModel:(MachOModel*)model state:(State)state { - + NSMutableAttributedString* newLog = [[NSMutableAttributedString alloc] init]; [newLog appendAttributedString:log]; - + NSString* prefix; switch (state) { case StateError: @@ -141,17 +199,22 @@ - (void)appendLogLine:(NSString *)line withModel:(MachOModel*)model state:(State prefix = NSLocalizedString(@"LOG_PREFIX_WARNING", nil); break; } - + NSString* newLine = [NSString stringWithFormat:@"%@%@\n\n", prefix, line]; - NSDictionary* attributes; - + + // A line that carries no colour of its own is drawn in black, whatever the + // background is, and the log has a dark background once the system is in + // dark mode. The dynamic colours are the ones that follow the appearance. + NSColor* color = model != nil ? [NSColor linkColor] : [NSColor textColor]; + NSMutableDictionary* attributes = [NSMutableDictionary dictionaryWithObject:color + forKey:NSForegroundColorAttributeName]; if (model) { - attributes = [NSDictionary dictionaryWithObjectsAndKeys:model, NSLinkAttributeName, [NSCursor pointingHandCursor], NSCursorAttributeName, NSLocalizedString(@"LOG_LINK_TOOLTIP", nil), NSToolTipAttributeName, nil]; - } else { - attributes = [NSDictionary dictionary]; + [attributes setObject:model forKey:NSLinkAttributeName]; + [attributes setObject:[NSCursor pointingHandCursor] forKey:NSCursorAttributeName]; + [attributes setObject:NSLocalizedString(@"LOG_LINK_TOOLTIP", nil) forKey:NSToolTipAttributeName]; } NSAttributedString* newLogLine = [[NSAttributedString alloc]initWithString:newLine attributes:attributes]; - + [newLog appendAttributedString:newLogLine]; [self setLog:newLog]; } @@ -173,10 +236,10 @@ - (NSString*) serializeIndexPath:(NSIndexPath*)indexPath { - (NSIndexPath*) deserializeIndexPath:(NSString*)link { NSIndexPath* indexPath = nil; - + // tokenize string NSArray* indices = [link componentsSeparatedByString:@";"]; - + // go through tokens NSEnumerator *enumerator = [indices objectEnumerator]; NSString* token = [enumerator nextObject]; @@ -191,10 +254,10 @@ - (NSIndexPath*) deserializeIndexPath:(NSString*)link { } -// delegate method +// delegate method - (BOOL)textView:(NSTextView *)aTextView clickedOnLink:(id)link atIndex:(NSUInteger)charIndex { [dependenciesController setSelectedObject: link]; - + // we need no further processing of the link return YES; } @@ -206,7 +269,7 @@ - (MachOCache*)cache { - (NSArray*) architectures { NSMutableArray* architectures = [NSMutableArray arrayWithCapacity:4]; - + if (machO) { MachOArchitecture* architecture = machO->getHostCompatibleArchitecture(); if (!architecture) { @@ -222,7 +285,7 @@ - (NSArray*) architectures { } else { [architectures addObject:currentArchitecture]; // insert at end } - + } } return architectures; @@ -230,7 +293,7 @@ - (NSArray*) architectures { - (IBAction)clickRevealInFinder:(id)sender { NSString* filename = [textFieldFilename stringValue]; - + [[NSWorkspace sharedWorkspace] selectFile: filename inFileViewerRootedAtPath: @""]; } @@ -257,4 +320,467 @@ - (SymbolTableController*)symbolTableController { return symbolTableController; } +#pragma mark - Objective-C class definitions + +- (ObjCMetadata*) objcMetadataForArchitecture:(MachOArchitecture*)architecture { + if (objcMetadata == 0) + objcMetadata = new std::map(); + + std::map::iterator existing = objcMetadata->find(architecture); + if (existing != objcMetadata->end()) + return existing->second; + + ObjCMetadata* metadata = new ObjCMetadata(*architecture); + (*objcMetadata)[architecture] = metadata; + return metadata; +} + +/** + * The symbol table view of the nib, found by walking the view hierarchy. + * + * Only used when the outlet is not connected -- the dependency tree is an + * NSOutlineView, which is also an NSTableView, so it is skipped explicitly. + */ +- (NSTableView*) findSymbolsTableView { + NSArray* controllers = [self windowControllers]; + if ([controllers count] == 0) + return nil; + NSView* root = [[[controllers objectAtIndex:0] window] contentView]; + if (root == nil) + return nil; + + NSMutableArray* pending = [NSMutableArray arrayWithObject:root]; + while ([pending count] > 0) { + NSView* view = [pending objectAtIndex:0]; + [pending removeObjectAtIndex:0]; + if ([view isKindOfClass:[NSOutlineView class]]) + continue; + if ([view isKindOfClass:[NSTableView class]]) + return (NSTableView*)view; + [pending addObjectsFromArray:[view subviews]]; + } + return nil; +} + +/** The dependency tree of the nib, found by walking the view hierarchy. */ +- (NSOutlineView*) findDependenciesOutlineView { + NSArray* controllers = [self windowControllers]; + if ([controllers count] == 0) + return nil; + NSView* root = [[[controllers objectAtIndex:0] window] contentView]; + if (root == nil) + return nil; + + NSMutableArray* pending = [NSMutableArray arrayWithObject:root]; + while ([pending count] > 0) { + NSView* view = [pending objectAtIndex:0]; + [pending removeObjectAtIndex:0]; + if ([view isKindOfClass:[NSOutlineView class]]) + return (NSOutlineView*)view; + [pending addObjectsFromArray:[view subviews]]; + } + return nil; +} + +- (void) definitionWindowWillClose:(NSNotification*)notification { + NSWindow* window = [notification object]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:window]; + + // Index based, because the array is modified here. + for (NSUInteger n = 0; n < [definitionWindows count]; n++) { + ObjCClassDefinitionWindowController* controller = [definitionWindows objectAtIndex:n]; + if ([controller window] == window) { + [definitionWindows removeObjectAtIndex:n]; + return; + } + } +} + +/** + * Gives the text view of the definition tab the behaviour that makes a class + * declaration readable: monospaced, read only but selectable, and scrolling + * sideways rather than wrapping the long protocol lists. It is the same setup + * the class definition window does, only here it is applied to a view that the + * nib owns. + */ +- (void) prepareDefinitionTextView { + if (definitionTextView == nil) + return; + + [definitionTextView setFont:[NSFont userFixedPitchFontOfSize:12.0]]; + [definitionTextView setEditable:NO]; + [definitionTextView setSelectable:YES]; + [definitionTextView setRichText:NO]; + [definitionTextView setUsesFindPanel:YES]; + [definitionTextView setVerticallyResizable:YES]; + [definitionTextView setHorizontallyResizable:YES]; + [definitionTextView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; + [[definitionTextView textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)]; + [[definitionTextView textContainer] setWidthTracksTextView:NO]; +} + +- (SymbolTableEntryModel*) symbolModelAtRow:(NSInteger)row { + if (row < 0) + return nil; + NSArray* symbols = [symbolTableController arrangedObjects]; + if (row >= (NSInteger)[symbols count]) + return nil; + id object = [symbols objectAtIndex:row]; + if (![object isKindOfClass:[SymbolTableEntryModel class]]) + return nil; + return (SymbolTableEntryModel*)object; +} + +/** Recognises the symbols that stand for an Objective-C class. */ +- (BOOL) objcClassName:(NSString**)outClassName metaclass:(BOOL*)outMetaclass ofSymbol:(NSString*)symbol { + NSString* prefix = nil; + BOOL metaclass = NO; + if ([symbol hasPrefix:kObjCClassSymbolPrefix]) { + prefix = kObjCClassSymbolPrefix; + } else if ([symbol hasPrefix:kObjCMetaclassSymbolPrefix]) { + prefix = kObjCMetaclassSymbolPrefix; + metaclass = YES; + } else { + return NO; + } + if (outClassName) + *outClassName = [symbol substringFromIndex:[prefix length]]; + if (outMetaclass) + *outMetaclass = metaclass; + return YES; +} + +- (NSString*) definitionForClassName:(NSString*)className + metaclass:(BOOL)metaclass + architecture:(MachOArchitecture*)architecture { + if (architecture == 0) + return nil; + try { + std::string text = [self objcMetadataForArchitecture:architecture]->getDefinition([className UTF8String], metaclass); + if (!text.empty()) + return [NSString stringWithStdString:text]; + } catch (MachOException& exception) { + [self appendLogLine:[NSString stringWithUTF8String:exception.getCause().c_str()] withModel:nil state:StateError]; + } + return nil; +} + +/** + * Puts a text into the definition view of the bottom tab view. + * + * The tab is deliberately not selected here: a click in the symbol table + * updates what the tab holds and nothing else, so a user who is reading the + * warnings stays where they are. + */ +- (void) setDefinitionInBottomTab:(NSString*)definition { + if (bottomTabView == nil || definitionTextView == nil) + return; + [definitionTextView setString:definition]; + [definitionTextView scrollRangeToVisible:NSMakeRange(0, 0)]; +} + +- (void) showObjCClassDefinitionWindow:(NSString*)className + metaclass:(BOOL)metaclass + definition:(NSString*)definition { + NSString* titleFormat = metaclass ? NSLocalizedString(@"OBJC_METACLASS_WINDOW_TITLE", nil) + : NSLocalizedString(@"OBJC_CLASS_WINDOW_TITLE", nil); + ObjCClassDefinitionWindowController* controller = + [[ObjCClassDefinitionWindowController alloc] initWithTitle:[NSString stringWithFormat:titleFormat, className]]; + [controller setDefinition:definition]; + + // Keep the panel alive while it is open, and let go of it once it closes. + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(definitionWindowWillClose:) + name:NSWindowWillCloseNotification + object:[controller window]]; + [definitionWindows addObject:controller]; + [controller showWindow:self]; +} + +/** + * A single click in the symbol table is enough to put the declaration of the + * class the row stands for into the definition tab. Only what this image + * defines has one; an imported symbol belongs to another library, and there the + * double click is the one that has somewhere to go. + * + * A symbol that is not a class of this image at all -- a function, a string, a + * class of another library -- has no declaration either, and saying so is more + * useful than leaving the previous one standing. + */ +- (void) symbolSelectionDidChange:(NSNotification*)notification { + NSTableView* tableView = [notification object]; + SymbolTableEntryModel* model = [self symbolModelAtRow:[tableView selectedRow]]; + if (model == nil) + return; + + if ([model isImported]) + return; + + NSString* className = nil; + BOOL metaclass = NO; + if (![self objcClassName:&className metaclass:&metaclass ofSymbol:[model rawName]]) { + [self setDefinitionInBottomTab: + [NSString stringWithFormat:NSLocalizedString(@"OBJC_UNSUPPORTED_SYMBOL", nil), [model rawName]]]; + return; + } + + NSString* definition = [self definitionForClassName:className + metaclass:metaclass + architecture:[model architecture]]; + if ([definition length] == 0) + definition = [NSString stringWithFormat:NSLocalizedString(@"OBJC_NO_DEFINITION", nil), className]; + [self setDefinitionInBottomTab:definition]; +} + +- (IBAction)showObjCClassDefinition:(id)sender { + NSTableView* tableView = symbolsTableView ? symbolsTableView : [self findSymbolsTableView]; + if (tableView == nil) + return; + + NSInteger row = [tableView clickedRow]; + if (row < 0) + row = [tableView selectedRow]; + + SymbolTableEntryModel* model = [self symbolModelAtRow:row]; + if (model == nil) + return; + + // A symbol this image does not define is provided by one of its + // dependencies, so the double click goes there instead of showing a + // declaration that is not in this image to begin with. + if ([model isImported]) { + [self revealImportSymbol:model]; + return; + } + + NSString* className = nil; + BOOL metaclass = NO; + if (![self objcClassName:&className metaclass:&metaclass ofSymbol:[model rawName]]) + return; + + NSString* definition = [self definitionForClassName:className + metaclass:metaclass + architecture:[model architecture]]; + if ([definition length] == 0) { + NSBeep(); + [self appendLogLine:[NSString stringWithFormat:NSLocalizedString(@"OBJC_NO_DEFINITION", nil), className] + withModel:nil state:StateWarning]; + return; + } + + [self showObjCClassDefinitionWindow:className metaclass:metaclass definition:definition]; +} + +#pragma mark - Copying the symbol that is selected + +/** + * The row of the symbol table that is selected, and only while the table is + * what has the focus. + * + * The Edit menu's Copy item is the document's to answer, and the document is + * reached whenever nothing closer to the keyboard handles it -- so the symbol + * table is checked for the focus rather than assumed to have it, which is what + * keeps Copy from taking a symbol while the dependency tree is being used. + */ +- (NSInteger) focusedSymbolRow { + NSTableView* tableView = symbolsTableView ? symbolsTableView : [self findSymbolsTableView]; + if (tableView == nil) + return -1; + + NSArray* controllers = [self windowControllers]; + if ([controllers count] == 0) + return -1; + if ([[[controllers objectAtIndex:0] window] firstResponder] != tableView) + return -1; + + return [tableView selectedRow]; +} + +/** The text of a row, written the way the table displays it: type, then name. */ +- (NSString*) rowText:(NSInteger)row inTableView:(NSTableView*)tableView { + NSMutableArray* parts = [NSMutableArray array]; + for (NSInteger column = 0; column < [tableView numberOfColumns]; column++) { + // The cells carry the formatter of their column, so this is the text of + // the row as it stands on screen rather than a second way of writing it. + NSString* text = [[tableView preparedCellAtColumn:column row:row] stringValue]; + if ([text length] > 0) + [parts addObject:text]; + } + return [parts componentsJoinedByString:@" "]; +} + +- (IBAction)copy:(id)sender { + NSTableView* tableView = symbolsTableView ? symbolsTableView : [self findSymbolsTableView]; + NSInteger row = [self focusedSymbolRow]; + if (tableView == nil || row < 0) + return; + + NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; + [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] owner:nil]; + [pasteboard setString:[self rowText:row inTableView:tableView] forType:NSPasteboardTypeString]; +} + +/** The Copy item is only of use while the symbol table has something selected. */ +- (BOOL)validateUserInterfaceItem:(id)item { + if ([item action] == @selector(copy:)) + return [self focusedSymbolRow] >= 0; + return [super validateUserInterfaceItem:item]; +} + +#pragma mark - Following an imported symbol to the library that provides it + +/** The dependencies of the image whose symbols the table is listing. */ +- (NSArray*) librariesOfSelectedImage { + NSArray* selected = [dependenciesController selectedObjects]; + if ([selected count] == 0) + return nil; + id image = [selected objectAtIndex:0]; + if (![image isKindOfClass:[MachOModel class]]) + return nil; + return [(MachOModel*)image children]; +} + +/** + * The dependency that provides an imported symbol. + * + * A symbol table entry names the library it is bound to by ordinal, and those + * are the libraries of the load commands in order, which is the order the + * dependency tree lists them in as well. Not every import carries one -- the + * symbols a library only re-exports do not -- so those are looked up in this + * process instead, where the runtime has already resolved them. + */ +- (MachOModel*) providerOfImportedSymbol:(SymbolTableEntryModel*)model { + NSArray* libraries = [self librariesOfSelectedImage]; + unsigned int ordinal = [model libraryOrdinal]; + if (libraries != nil && ordinal >= 1 && ordinal <= [libraries count]) + return [libraries objectAtIndex:ordinal - 1]; + + return [self dependencyProvidingSymbolInProcess:[model rawName]]; +} + +/** + * The dependency that holds a symbol, as this process resolves it. Only a + * library that is loaded can be found this way, which is exactly the case for + * the libraries of a system image. + */ +- (MachOModel*) dependencyProvidingSymbolInProcess:(NSString*)symbol { + void* address = 0; + + NSString* className = nil; + BOOL metaclass = NO; + if ([self objcClassName:&className metaclass:&metaclass ofSymbol:symbol]) { + Class found = metaclass ? objc_getMetaClass([className UTF8String]) + : objc_getClass([className UTF8String]); + address = (__bridge void*)found; + } else if ([symbol hasPrefix:@"_"]) { + // The symbol table holds the linker name; dlsym wants the C one. + address = dlsym(RTLD_DEFAULT, [[symbol substringFromIndex:1] UTF8String]); + } + if (address == 0) + return nil; + + Dl_info info; + if (dladdr(address, &info) == 0 || info.dli_fname == 0) + return nil; + + return [self dependencyWithFileNamed:[NSString stringWithUTF8String:info.dli_fname]]; +} + +/** The dependency that was read from the given file. */ +- (MachOModel*) dependencyWithFileNamed:(NSString*)path { + NSArray* libraries = [self librariesOfSelectedImage]; + if (libraries == nil) + return nil; + + for (NSUInteger n = 0; n < [libraries count]; n++) { + MachOModel* library = [libraries objectAtIndex:n]; + if ([[library filename] isEqualToString:path]) + return library; + } + + // The same library can be named differently by the load command and by + // dyld; the file name is what both agree on. + NSString* name = [path lastPathComponent]; + for (NSUInteger n = 0; n < [libraries count]; n++) { + MachOModel* library = [libraries objectAtIndex:n]; + if ([[[library filename] lastPathComponent] isEqualToString:name]) + return library; + } + return nil; +} + +- (void) revealImportSymbol:(SymbolTableEntryModel*)model { + MachOModel* provider = [self providerOfImportedSymbol:model]; + if (provider == nil) { + NSBeep(); + [self appendLogLine:[NSString stringWithFormat:NSLocalizedString(@"OBJC_NO_PROVIDER", nil), [model rawName]] + withModel:nil state:StateWarning]; + return; + } + + NSOutlineView* outlineView = [self findDependenciesOutlineView]; + + // The library is a child of the image the symbol was imported by, so that + // image has to be open for the library to be reachable. + if (outlineView != nil) { + NSInteger row = [outlineView selectedRow]; + if (row >= 0) + [outlineView expandItem:[outlineView itemAtRow:row]]; + } + + if (![dependenciesController setSelectedObject:provider]) { + NSBeep(); + [self appendLogLine:[NSString stringWithFormat:NSLocalizedString(@"OBJC_NO_PROVIDER", nil), [model rawName]] + withModel:nil state:StateWarning]; + return; + } + + if (outlineView != nil) + [outlineView scrollRowToVisible:[outlineView selectedRow]]; + + // The symbol table follows the selection, but not until the array + // controllers have rearranged themselves, so the export is picked up on the + // next pass through the run loop. + [self performSelector:@selector(selectExportedSymbolNamed:) + withObject:[model rawName] + afterDelay:0.0]; +} + +- (NSInteger) rowOfExportedSymbolNamed:(NSString*)name { + NSArray* symbols = [symbolTableController arrangedObjects]; + for (NSUInteger n = 0; n < [symbols count]; n++) { + id object = [symbols objectAtIndex:n]; + if (![object isKindOfClass:[SymbolTableEntryModel class]]) + continue; + SymbolTableEntryModel* model = (SymbolTableEntryModel*)object; + if ([model isImported]) + continue; + if ([[model rawName] isEqualToString:name]) + return (NSInteger)n; + } + return -1; +} + +/** Selects the row of an export, once the symbol table shows the new library. */ +- (void) selectExportedSymbolNamed:(NSString*)name { + NSTableView* tableView = symbolsTableView ? symbolsTableView : [self findSymbolsTableView]; + if (tableView == nil) + return; + + // Only the exports of the library that was jumped to are of interest here, + // so the type filter is narrowed to them before the row is looked for. + [symbolTableController showExportedSymbols]; + + NSInteger row = [self rowOfExportedSymbolNamed:name]; + if (row < 0) { + NSBeep(); + [self appendLogLine:[NSString stringWithFormat:NSLocalizedString(@"OBJC_NO_EXPORT", nil), name] + withModel:nil state:StateWarning]; + return; + } + + [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:(NSUInteger)row] byExtendingSelection:NO]; + [tableView scrollRowToVisible:row]; +} + @end diff --git a/MacDependency/ObjCClassDefinitionWindowController.h b/MacDependency/ObjCClassDefinitionWindowController.h new file mode 100644 index 0000000..9ddc9e0 --- /dev/null +++ b/MacDependency/ObjCClassDefinitionWindowController.h @@ -0,0 +1,30 @@ +// +// ObjCClassDefinitionWindowController.h +// MacDependency +// + +#import + +/** + * A panel that shows the Objective-C declaration of one class. + * + * The text is read-only but selectable, so any part of the declaration can be + * copied out of it; a button copies the whole thing at once. + * + * The window is built in code rather than in a nib, because it has no layout + * of its own worth editing and that keeps it out of MyDocument.xib. + */ +@interface ObjCClassDefinitionWindowController : NSWindowController +{ + NSTextView* textView; +} + +/** Creates the panel with the given window title, showing no text yet. */ +- (id)initWithTitle:(NSString*)title; + +/** The declaration to show, as produced by ObjCMetadata::getDefinition(). */ +- (void)setDefinition:(NSString*)definition; + +- (IBAction)copyDefinition:(id)sender; + +@end diff --git a/MacDependency/ObjCClassDefinitionWindowController.m b/MacDependency/ObjCClassDefinitionWindowController.m new file mode 100644 index 0000000..7e71549 --- /dev/null +++ b/MacDependency/ObjCClassDefinitionWindowController.m @@ -0,0 +1,109 @@ +// +// ObjCClassDefinitionWindowController.m +// MacDependency +// + +#import "ObjCClassDefinitionWindowController.h" + +static const CGFloat kInitialWidth = 760.0; +static const CGFloat kInitialHeight = 580.0; +static const CGFloat kMinimumWidth = 360.0; +static const CGFloat kMinimumHeight = 240.0; +static const CGFloat kButtonBarHeight = 40.0; +static const CGFloat kButtonHeight = 24.0; +static const CGFloat kButtonMargin = 12.0; + +@implementation ObjCClassDefinitionWindowController + +- (id)initWithTitle:(NSString*)title { + NSRect frame = NSMakeRect(0.0, 0.0, kInitialWidth, kInitialHeight); + NSUInteger styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | + NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable; + + NSWindow* window = [[NSWindow alloc] initWithContentRect:frame + styleMask:styleMask + backing:NSBackingStoreBuffered + defer:NO]; + [window setTitle:title]; + [window setMinSize:NSMakeSize(kMinimumWidth, kMinimumHeight)]; + // The controller owns the window, so the window must not also try to own + // itself: that would leave the controller with a dangling pointer. + [window setReleasedWhenClosed:NO]; + + self = [super initWithWindow:window]; + if (self) { + NSView* contentView = [window contentView]; + NSRect bounds = [contentView bounds]; + + NSScrollView* scrollView = [[NSScrollView alloc] initWithFrame: + NSMakeRect(0.0, kButtonBarHeight, bounds.size.width, bounds.size.height - kButtonBarHeight)]; + [scrollView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [scrollView setHasVerticalScroller:YES]; + [scrollView setHasHorizontalScroller:YES]; + [scrollView setAutohidesScrollers:YES]; + [scrollView setBorderType:NSNoBorder]; + + NSSize documentSize = [scrollView contentSize]; + textView = [[NSTextView alloc] initWithFrame:NSMakeRect(0.0, 0.0, documentSize.width, documentSize.height)]; + [textView setMinSize:NSMakeSize(0.0, 0.0)]; + [textView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; + [textView setVerticallyResizable:YES]; + [textView setHorizontallyResizable:YES]; + [textView setAutoresizingMask:NSViewWidthSizable]; + [textView setFont:[NSFont userFixedPitchFontOfSize:12.0]]; + // Read only, but still selectable -- that is the whole point of this panel. + [textView setEditable:NO]; + [textView setSelectable:YES]; + [textView setRichText:NO]; + [textView setUsesFindPanel:YES]; + [[textView textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)]; + [[textView textContainer] setWidthTracksTextView:NO]; + [scrollView setDocumentView:textView]; + [contentView addSubview:scrollView]; + + NSButton* copyButton = [[NSButton alloc] initWithFrame: + NSMakeRect(kButtonMargin, kButtonMargin - 4.0, 0.0, kButtonHeight)]; + [copyButton setTitle:NSLocalizedString(@"OBJC_COPY_DEFINITION", nil)]; + [copyButton setBezelStyle:NSBezelStyleRounded]; + [copyButton setTarget:self]; + [copyButton setAction:@selector(copyDefinition:)]; + [copyButton setAutoresizingMask:NSViewMaxXMargin]; + [copyButton sizeToFit]; + [contentView addSubview:copyButton]; + + NSButton* closeButton = [[NSButton alloc] initWithFrame: + NSMakeRect(0.0, kButtonMargin - 4.0, 0.0, kButtonHeight)]; + [closeButton setTitle:NSLocalizedString(@"OBJC_CLOSE", nil)]; + [closeButton setBezelStyle:NSBezelStyleRounded]; + [closeButton setTarget:window]; + [closeButton setAction:@selector(performClose:)]; + [closeButton sizeToFit]; + NSRect closeFrame = [closeButton frame]; + closeFrame.origin.x = bounds.size.width - closeFrame.size.width - kButtonMargin; + closeFrame.origin.y = kButtonMargin - 4.0; + [closeButton setFrame:closeFrame]; + [closeButton setAutoresizingMask:NSViewMinXMargin]; + [contentView addSubview:closeButton]; + } + return self; +} + +- (void)showWindow:(id)sender { + [super showWindow:sender]; + + // So that the text can be selected (and copied) right away. + [[self window] makeFirstResponder:textView]; +} + +- (void)setDefinition:(NSString*)definition { + [textView setString:definition ? definition : @""]; + [textView scrollRangeToVisible:NSMakeRange(0, 0)]; +} + +- (IBAction)copyDefinition:(id)sender { + NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; + [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] owner:nil]; + [pasteboard setString:[textView string] forType:NSPasteboardTypeString]; +} + +@end diff --git a/MacDependency/SymbolTableController.h b/MacDependency/SymbolTableController.h index f271124..5858d05 100644 --- a/MacDependency/SymbolTableController.h +++ b/MacDependency/SymbolTableController.h @@ -8,19 +8,92 @@ @class MyDocument; +/** + * The symbols of one image, filtered by what is typed into the search field and + * by the two filters that hang off the headers of the table: the type of a + * symbol and its kind. Both are kept here rather than in a control of their + * own, because the header of a column is where they belong -- the column shows + * what the filter is about, and a row that is missing is one the column would + * have shown. + * + * The type has a second control, the Export and Import buttons above the table: + * a filter that is used on almost every visit to the window is worth a click + * that does not have to go through a menu first. The two are views of one + * filter, so whichever is used, the other follows. + */ @interface SymbolTableController : NSArrayController { NSPredicate* nameFilter; IBOutlet NSSegmentedControl* typeFilterControl; IBOutlet NSButton* demangleNamesControl; BOOL demangleNames; IBOutlet MyDocument* document; + + /** One bit per SymbolTableEntry::Type, the ones that are listed. */ + unsigned int typeFilterMask; + /** The kind that is listed, or a tag no kind has while all are. */ + NSInteger kindFilterTag; + /** The headers that show the filters, held weakly. */ + NSHashTable* filterHeaders; } - (void)setNameFilter:(NSPredicate*) nameFilter; - (NSPredicate*)nameFilter; +/** + * Reads the Export and Import buttons into the filter. Turning off the last one + * left on would leave a table with nothing in it, so it is put back: an empty + * table says less than one that still shows something. + */ - (IBAction)typeFilterChanged:(id)sender; +/** + * Narrows the table to the symbols of one type, or to all of them. The tag of + * the menu item is the type, and the one that filters nothing carries a tag no + * type has. + */ +- (IBAction)typeFilterChosen:(id)sender; + +/** + * Narrows the table to the symbols of one kind, or to all of them. The menu is + * filled from the kinds the model knows about, so it cannot fall out of step + * with SymbolTableEntry. + */ +- (IBAction)kindFilterChanged:(id)sender; + +/** + * Turns the type filter into "exports only": the exported symbols of the + * library that was jumped to are what is being looked for, and the imports of + * that library would only be in the way. The kind filter is left alone -- the + * export being looked for carries the same name as the import that was clicked, + * so it has the same kind and cannot be hidden by what is set. + */ +- (void)showExportedSymbols; + +/** + * Whether the header of this column carries a chevron that opens a filter. The + * type column and the kind column do, the name column does not. + */ +- (BOOL)hasFilterMenuForTableColumn:(NSTableColumn*)column; + +/** + * Whether the filter of this column is hiding rows right now, which is what + * makes its chevron stand out. + */ +- (BOOL)hasActiveFilterForTableColumn:(NSTableColumn*)column; + +/** + * What this column's filter offers, with what is in effect ticked. A new menu + * on every call, so what it shows is what the filter is at that moment. + */ +- (NSMenu*)filterMenuForTableColumn:(NSTableColumn*)column; + +/** + * The headers that draw the chevrons of those filters, so that they can be + * asked to draw again once a filter changes. They are held weakly: the table + * owns its header, and a controller has no business keeping one alive. + */ +- (void)addFilterHeaderView:(NSView*)headerView; + - (BOOL)demangleNames; - (BOOL*)demangleNamesPtr; - (void)setDemangleNames:(BOOL)demangle; diff --git a/MacDependency/SymbolTableController.mm b/MacDependency/SymbolTableController.mm index e023faf..82b7552 100644 --- a/MacDependency/SymbolTableController.mm +++ b/MacDependency/SymbolTableController.mm @@ -7,6 +7,8 @@ // #import "SymbolTableController.h" +#import "SymbolTableEntryTypeFormatter.h" +#import "SymbolTableEntryKindFormatter.h" #import "MyDocument.h" #include "MachO/symboltableentry.h" @@ -14,6 +16,13 @@ @interface SymbolTableController() -(void)setFilter; - (NSPredicate*) typeFilter; +- (NSPredicate*) kindFilter; +- (NSMenu*) typeFilterMenu; +- (NSMenu*) kindFilterMenu; +- (NSString*) kindOfColumn:(NSTableColumn*)column; +- (BOOL) listsAllTypes; +- (void) updateTypeFilterControl; +- (void) refreshFilterHeaders; @end @implementation SymbolTableController @@ -21,10 +30,32 @@ @implementation SymbolTableController const int TYPE[] = {SymbolTableEntry::TypeExported, SymbolTableEntry::TypeImported}; +/** The number of types a symbol can be filtered by. */ +static const unsigned int kNumTypes = sizeof(TYPE)/sizeof(*TYPE); + +/** The tag of the menu item that leaves every type of symbol listed. */ +static const NSInteger kAllTypesTag = -1; + +/** The tag of the menu item that leaves every kind of symbol listed. */ +static const NSInteger kAllKindsTag = -1; + +/** + * The columns whose header opens a filter, by the identifier the table columns + * carry. Everything else about the column -- where it sits, how wide it is -- + * is the xib's business and is not repeated here. + */ +static NSString* const kTypeColumnIdentifier = @"Type"; +static NSString* const kKindColumnIdentifier = @"Kind"; + - (id)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (self) { demangleNames = true; + // The symbol table opens on what the image offers to others; the + // imports are a click away. + typeFilterMask = 1u << 0; + kindFilterTag = kAllKindsTag; + filterHeaders = [NSHashTable weakObjectsHashTable]; } return self; } @@ -34,17 +65,34 @@ - (void)awakeFromNib { [self setFilter]; } +/** Whether the table lists every type of symbol, i.e. nothing is hidden. */ +- (BOOL) listsAllTypes { + return typeFilterMask == (1u << kNumTypes) - 1; +} + +/** + * Shows the filter on the buttons above the table. They are the second view of + * it, so they follow whatever the menu -- or a jump -- set it to. + */ +- (void) updateTypeFilterControl { + for (unsigned int index=0; index < kNumTypes; index++) { + [typeFilterControl setSelected:(typeFilterMask & (1u << index)) != 0 + forSegment:(NSInteger)index]; + } +} + - (NSPredicate*) typeFilter { NSMutableString* typeFilter = [NSMutableString string]; - for (int segment=0; segment < sizeof(TYPE)/sizeof(*TYPE); segment++) { - if ([typeFilterControl isSelectedForSegment:segment]) { - NSString* condition = [NSString stringWithFormat:@"type=%d", TYPE[segment]]; - if ([typeFilter length] > 0) { - [typeFilter appendString:@" or "]; - } - [typeFilter appendString:condition]; + for (unsigned int index=0; index < kNumTypes; index++) { + if ((typeFilterMask & (1u << index)) == 0) { + continue; } + NSString* condition = [NSString stringWithFormat:@"type=%d", TYPE[index]]; + if ([typeFilter length] > 0) { + [typeFilter appendString:@" or "]; + } + [typeFilter appendString:condition]; } // select nothing if no filter set @@ -67,20 +115,180 @@ - (void)setNameFilter:(NSPredicate*) newNameFilter { [self setFilter]; } +/** + * The kind the table is narrowed to, or nil while every kind is listed. The + * item that filters nothing carries a tag no kind has. + */ +- (NSPredicate*) kindFilter { + if (kindFilterTag < 0) + return nil; + return [NSPredicate predicateWithFormat:@"kind=%d", (int)kindFilterTag]; +} + +/** + * The types a symbol can have, with the ones that are listed ticked. The names + * come from the formatter of the column that shows them. + */ +- (NSMenu*) typeFilterMenu { + NSMenu* menu = [[NSMenu alloc] init]; + + NSMenuItem* allTypes = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SYMBOL_TYPE_ALL", @"All types") + action:@selector(typeFilterChosen:) + keyEquivalent:@""]; + [allTypes setTarget:self]; + [allTypes setTag:kAllTypesTag]; + [allTypes setState:[self listsAllTypes] ? NSControlStateValueOn : NSControlStateValueOff]; + [menu addItem:allTypes]; + + for (unsigned int index=0; index < kNumTypes; index++) { + NSMenuItem* item = [[NSMenuItem alloc] initWithTitle:[SymbolTableEntryTypeFormatter labelForType:TYPE[index]] + action:@selector(typeFilterChosen:) + keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:(NSInteger)index]; + [item setState:typeFilterMask == (1u << index) ? NSControlStateValueOn : NSControlStateValueOff]; + [menu addItem:item]; + } + + return menu; +} + +/** + * The kinds a symbol can have, behind the one that filters nothing. The kinds + * come from SymbolTableEntry, and their names from the formatter of the column + * that shows them, so a kind that is added there turns up here without anything + * else having to change. + */ +- (NSMenu*) kindFilterMenu { + NSMenu* menu = [[NSMenu alloc] init]; + + NSMenuItem* allKinds = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SYMBOL_KIND_ALL", @"All Kinds") + action:@selector(kindFilterChanged:) + keyEquivalent:@""]; + [allKinds setTarget:self]; + [allKinds setTag:kAllKindsTag]; + [allKinds setState:kindFilterTag < 0 ? NSControlStateValueOn : NSControlStateValueOff]; + [menu addItem:allKinds]; + + for (unsigned int kind=0; kind < SymbolTableEntry::NumKinds; kind++) { + NSMenuItem* item = [[NSMenuItem alloc] initWithTitle:[SymbolTableEntryKindFormatter labelForKind:kind] + action:@selector(kindFilterChanged:) + keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:(NSInteger)kind]; + [item setState:kindFilterTag == (NSInteger)kind ? NSControlStateValueOn : NSControlStateValueOff]; + [menu addItem:item]; + } + + return menu; +} + +- (BOOL)hasFilterMenuForTableColumn:(NSTableColumn*)column { + return [self kindOfColumn:column] != nil; +} + +- (BOOL)hasActiveFilterForTableColumn:(NSTableColumn*)column { + NSString* identifier = [self kindOfColumn:column]; + if ([identifier isEqual:kTypeColumnIdentifier]) + return ![self listsAllTypes]; + if ([identifier isEqual:kKindColumnIdentifier]) + return kindFilterTag >= 0; + return NO; +} + +- (NSMenu*)filterMenuForTableColumn:(NSTableColumn*)column { + NSString* identifier = [self kindOfColumn:column]; + if ([identifier isEqual:kTypeColumnIdentifier]) + return [self typeFilterMenu]; + if ([identifier isEqual:kKindColumnIdentifier]) + return [self kindFilterMenu]; + return nil; +} + +/** + * Which filter a column carries, or nil for a column that carries none. The + * identifier is what says so, which is why the xib gives the two columns one. + */ +- (NSString*) kindOfColumn:(NSTableColumn*)column { + NSString* identifier = [column identifier]; + if ([identifier isEqual:kTypeColumnIdentifier] || [identifier isEqual:kKindColumnIdentifier]) + return identifier; + return nil; +} + +- (void)addFilterHeaderView:(NSView*)headerView { + if (headerView != nil) + [filterHeaders addObject:headerView]; +} + +- (void)refreshFilterHeaders { + for (NSView* headerView in filterHeaders) + [headerView setNeedsDisplay:YES]; +} + - (IBAction)typeFilterChanged:(id)sender { + unsigned int mask = 0; + for (unsigned int index=0; index < kNumTypes; index++) { + if ([typeFilterControl isSelectedForSegment:(NSInteger)index]) + mask |= 1u << index; + } + + // Unticking the last one would empty the table, which is a worse answer + // than the rows that are still there. The button is put back the way it was. + if (mask == 0) { + [self updateTypeFilterControl]; + return; + } + + typeFilterMask = mask; + [self setFilter]; +} + +- (IBAction)typeFilterChosen:(id)sender { + NSInteger tag = [sender tag]; + if (tag < 0) { + typeFilterMask = (1u << kNumTypes) - 1; + } else if ((unsigned int)tag < kNumTypes) { + typeFilterMask = 1u << tag; + } else { + return; + } + [self setFilter]; +} + +- (IBAction)kindFilterChanged:(id)sender { + kindFilterTag = [sender tag]; + [self setFilter]; +} + +- (void)showExportedSymbols { + // TYPE[0] is SymbolTableEntry::TypeExported. + if (typeFilterMask == (1u << 0)) + return; + + typeFilterMask = 1u << 0; [self setFilter]; } -(void)setFilter { - NSPredicate* typeFilter = [self typeFilter]; - NSPredicate* predicate; + NSMutableArray* predicates = [NSMutableArray array]; if (nameFilter) { - predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:nameFilter, typeFilter, nil]]; - } else { - predicate = typeFilter; + [predicates addObject:nameFilter]; } - //NSLog(@"%@", predicate); - [self setFilterPredicate:predicate]; + // The type filter is always part of it: with no type selected it is the + // predicate that matches nothing, which is what "no type chosen" means here. + [predicates addObject:[self typeFilter]]; + + NSPredicate* kindFilter = [self kindFilter]; + if (kindFilter) { + [predicates addObject:kindFilter]; + } + + //NSLog(@"%@", predicates); + [self setFilterPredicate:[NSCompoundPredicate andPredicateWithSubpredicates:predicates]]; + + [self updateTypeFilterControl]; + [self refreshFilterHeaders]; } - (BOOL)demangleNames { diff --git a/MacDependency/SymbolTableEntryKindFormatter.h b/MacDependency/SymbolTableEntryKindFormatter.h new file mode 100644 index 0000000..7e9b7b4 --- /dev/null +++ b/MacDependency/SymbolTableEntryKindFormatter.h @@ -0,0 +1,25 @@ +// +// SymbolTableEntryKindFormatter.h +// MacDependency +// +// Formatter for the kind of a symbol table entry -- C, C++, Swift, an +// Objective-C class and so on. The model carries the kind as the number of a +// SymbolTableEntry::Kind, and a formatter is what turns it into the text the +// column shows, the way SymbolTableEntryTypeFormatter does for the type. +// + +#import + + +@interface SymbolTableEntryKindFormatter : NSFormatter { + +} + +/** + * The text a kind is shown as. The menu that filters the symbol table by kind + * carries the same labels, so that the column and the filter cannot end up + * naming the same kind in two different ways. + */ ++ (NSString*) labelForKind:(unsigned int)kind; + +@end diff --git a/MacDependency/SymbolTableEntryKindFormatter.mm b/MacDependency/SymbolTableEntryKindFormatter.mm new file mode 100644 index 0000000..578682e --- /dev/null +++ b/MacDependency/SymbolTableEntryKindFormatter.mm @@ -0,0 +1,50 @@ +// +// SymbolTableEntryKindFormatter.mm +// MacDependency +// +// Created by Konrad Windszus on 18.07.09. +// Copyright 2009 Konrad Windszus. All rights reserved. +// + +#import "SymbolTableEntryKindFormatter.h" +#include "MachO/symboltableentry.h" + +@implementation SymbolTableEntryKindFormatter + ++ (NSString*) labelForKind:(unsigned int)kind { + switch (kind) { + case SymbolTableEntry::KindC: + return NSLocalizedString(@"SYMBOL_KIND_C", @"C"); + case SymbolTableEntry::KindCXX: + return NSLocalizedString(@"SYMBOL_KIND_CXX", @"C++"); + case SymbolTableEntry::KindSwift: + return NSLocalizedString(@"SYMBOL_KIND_SWIFT", @"Swift"); + case SymbolTableEntry::KindObjCClass: + return NSLocalizedString(@"SYMBOL_KIND_OBJC_CLASS", @"ObjC class"); + case SymbolTableEntry::KindObjCMetaclass: + return NSLocalizedString(@"SYMBOL_KIND_OBJC_METACLASS", @"ObjC metaclass"); + case SymbolTableEntry::KindObjCProtocol: + return NSLocalizedString(@"SYMBOL_KIND_OBJC_PROTOCOL", @"ObjC protocol"); + case SymbolTableEntry::KindObjCIvar: + return NSLocalizedString(@"SYMBOL_KIND_OBJC_IVAR", @"ObjC ivar"); + case SymbolTableEntry::KindObjCOther: + return NSLocalizedString(@"SYMBOL_KIND_OBJC_OTHER", @"ObjC"); + } + return NSLocalizedString(@"UNKNOWN", @"Unknown"); +} + +// conversion to string +- (NSString*) stringForObjectValue:(id)obj { + // must be a NSNumber + if (![obj isKindOfClass:[NSNumber class]]) { + return nil; + } + + return [SymbolTableEntryKindFormatter labelForKind:[obj unsignedIntValue]]; +} + +// conversion from string (not necessary) +- (BOOL) getObjectValue:(id*)obj forString:(NSString*)string errorDescription:(NSString**)errorString { + return NO; +} +@end diff --git a/MacDependency/SymbolTableEntryModel.h b/MacDependency/SymbolTableEntryModel.h index 51c4f75..150e5cc 100644 --- a/MacDependency/SymbolTableEntryModel.h +++ b/MacDependency/SymbolTableEntryModel.h @@ -8,6 +8,7 @@ #import #include "MachO/machofile.h" +#include "MachO/machoarchitecture.h" #include "MachO/symboltableentry.h" @class MyDocument; @@ -15,9 +16,38 @@ const SymbolTableEntry* entry; const BOOL* demangleNames; MyDocument* document; + MachOArchitecture* architecture; } -- (id) initWithEntry:(const SymbolTableEntry*)entry demangleNamesPtr:(BOOL*)demangleNames document:(MyDocument*)document; +- (id) initWithEntry:(const SymbolTableEntry*)entry demangleNamesPtr:(BOOL*)demangleNames document:(MyDocument*)document architecture:(MachOArchitecture*)architecture; - (NSString*) name; - (NSNumber*) type; + +/** + * What the symbol is -- C, C++, Swift, an Objective-C class and so on -- as + * the number of a SymbolTableEntry::Kind. The column that shows it carries a + * formatter, the way the one for the type does. + */ +- (NSNumber*) kind; + +/** + * The symbol name as the string table holds it, without demangling. + * + * Demangling turns a name into something to read, but the mangled form is what + * identifies the symbol -- the Objective-C class symbols are recognised by it. + */ +- (NSString*) rawName; + +/** YES for a symbol this image imports, i.e. one another image defines. */ +- (BOOL) isImported; + +/** + * The library an imported symbol is bound to, as an ordinal into the load + * commands of the image: 1 is the first library, 2 the second, and so on. + * Zero when the symbol is not bound to one library. + */ +- (unsigned int) libraryOrdinal; + +/** The image this symbol was read from. */ +- (MachOArchitecture*) architecture; @end diff --git a/MacDependency/SymbolTableEntryModel.mm b/MacDependency/SymbolTableEntryModel.mm index ecf9a7e..7337892 100644 --- a/MacDependency/SymbolTableEntryModel.mm +++ b/MacDependency/SymbolTableEntryModel.mm @@ -14,12 +14,13 @@ @implementation SymbolTableEntryModel -- (id) initWithEntry:(const SymbolTableEntry*)anEntry demangleNamesPtr:(BOOL*)demangle document:(MyDocument*)aDocument { +- (id) initWithEntry:(const SymbolTableEntry*)anEntry demangleNamesPtr:(BOOL*)demangle document:(MyDocument*)aDocument architecture:(MachOArchitecture*)anArchitecture { self = [super init]; if (self) { entry = anEntry; self->demangleNames = demangle; document = aDocument; + architecture = anArchitecture; } return self; } @@ -41,4 +42,24 @@ - (NSNumber*) type { return [NSNumber numberWithUnsignedInt:entry->getType()]; } +- (NSNumber*) kind { + return [NSNumber numberWithUnsignedInt:entry->getKind()]; +} + +- (NSString*) rawName { + return [NSString stringWithStdString:entry->getName(false)]; +} + +- (BOOL) isImported { + return entry->getType() == SymbolTableEntry::TypeImported; +} + +- (unsigned int) libraryOrdinal { + return entry->getLibraryOrdinal(); +} + +- (MachOArchitecture*) architecture { + return architecture; +} + @end diff --git a/MacDependency/SymbolTableEntryTypeFormatter.h b/MacDependency/SymbolTableEntryTypeFormatter.h index 81b9686..b4dcf19 100644 --- a/MacDependency/SymbolTableEntryTypeFormatter.h +++ b/MacDependency/SymbolTableEntryTypeFormatter.h @@ -13,4 +13,10 @@ } +/** + * What a type of symbol is called. The column that shows the type and the menu + * that filters by it ask the same place, so the two cannot drift apart. + */ ++ (NSString*) labelForType:(unsigned int)type; + @end diff --git a/MacDependency/SymbolTableEntryTypeFormatter.mm b/MacDependency/SymbolTableEntryTypeFormatter.mm index fa29321..bd5c3ed 100644 --- a/MacDependency/SymbolTableEntryTypeFormatter.mm +++ b/MacDependency/SymbolTableEntryTypeFormatter.mm @@ -10,28 +10,26 @@ #include "MachO/symboltableentry.h" @implementation SymbolTableEntryTypeFormatter + ++ (NSString*) labelForType:(unsigned int)type { + switch (type) { + case SymbolTableEntry::TypeExported: + return NSLocalizedString(@"SYMBOL_TYPE_EXPORT", @"Export"); + case SymbolTableEntry::TypeImported: + return NSLocalizedString(@"SYMBOL_TYPE_IMPORT", @"Import"); + } + return NSLocalizedString(@"UNKNOWN", @"Unknown"); +} + // conversion to string - (NSString*) stringForObjectValue:(id)obj { // must be a NSNumber if (![obj isKindOfClass:[NSNumber class]]) { return nil; } - - // NSNumber contains the version as unsigned int - unsigned int typeNumber = [obj unsignedIntValue]; - NSString* type; - switch(typeNumber) { - case SymbolTableEntry::TypeExported: - type = NSLocalizedString(@"SYMBOL_TYPE_EXPORT", @"Export"); - break; - case SymbolTableEntry::TypeImported: - type = NSLocalizedString(@"SYMBOL_TYPE_IMPORT", @"Import"); - break; - default: - type = NSLocalizedString(@"UNKNOWN", @"Unknown"); - - } - return type; + + // NSNumber contains the type as unsigned int + return [SymbolTableEntryTypeFormatter labelForType:[obj unsignedIntValue]]; } diff --git a/MacDependency/SymbolTableHeaderView.h b/MacDependency/SymbolTableHeaderView.h new file mode 100644 index 0000000..55ae1a5 --- /dev/null +++ b/MacDependency/SymbolTableHeaderView.h @@ -0,0 +1,20 @@ +// +// SymbolTableHeaderView.h +// MacDependency +// +// The header of the symbol table. The headers of the columns that filter the +// table -- the type of a symbol and its kind -- carry a chevron and open the +// list of what can be chosen when the chevron is clicked. The rest of the +// header keeps the behaviour of a plain table header, resizing included. +// + +#import + +@class SymbolTableController; + +@interface SymbolTableHeaderView : NSTableHeaderView + +/** The controller that knows which columns filter and what they filter by. */ +@property (nonatomic, strong) IBOutlet SymbolTableController* filterController; + +@end diff --git a/MacDependency/SymbolTableHeaderView.m b/MacDependency/SymbolTableHeaderView.m new file mode 100644 index 0000000..7f707bb --- /dev/null +++ b/MacDependency/SymbolTableHeaderView.m @@ -0,0 +1,108 @@ +// +// SymbolTableHeaderView.m +// MacDependency +// +// Created by Konrad Windszus on 18.07.09. +// Copyright 2009 Konrad Windszus. All rights reserved. +// + +#import "SymbolTableHeaderView.h" +#import "SymbolTableController.h" + +/** How wide the clickable chevron is, and how wide the resize edge stays. */ +static const CGFloat kChevronAreaWidth = 24.0; +static const CGFloat kResizeEdgeWidth = 4.0; + +/** The size of the chevron itself. */ +static const CGFloat kChevronWidth = 7.0; +static const CGFloat kChevronHeight = 4.0; + +@implementation SymbolTableHeaderView + +/** + * The controller is what knows what a filter is set to, and the controller is + * told about this header once the nib has connected the outlet. It holds the + * header weakly, so registering here does not tie the two lifetimes together. + */ +- (void) awakeFromNib { + [super awakeFromNib]; + [self.filterController addFilterHeaderView:self]; +} + +/** + * The rectangle the chevron of a column is drawn in and clicked in, or + * NSZeroRect for a column that does not filter anything and for one that is + * too narrow to hold both the chevron and the edge to resize it by. + */ +- (NSRect) chevronRectOfColumn:(NSInteger)column { + NSTableColumn* tableColumn = [[self tableView] tableColumns][(NSUInteger)column]; + if (![self.filterController hasFilterMenuForTableColumn:tableColumn]) + return NSZeroRect; + + NSRect header = [self headerRectOfColumn:column]; + if (NSWidth(header) < kChevronAreaWidth + kResizeEdgeWidth) + return NSZeroRect; + + return NSMakeRect(NSMaxX(header) - kChevronAreaWidth - kResizeEdgeWidth, NSMinY(header), + kChevronAreaWidth, NSHeight(header)); +} + +- (void) drawRect:(NSRect)dirtyRect { + [super drawRect:dirtyRect]; + + if (self.filterController == nil) + return; + + for (NSInteger column = 0; column < [[self tableView] numberOfColumns]; column++) { + NSRect area = [self chevronRectOfColumn:column]; + if (NSEqualRects(area, NSZeroRect)) + continue; + + CGFloat x = NSMidX(area) - kChevronWidth / 2.0; + CGFloat y = NSMidY(area) - kChevronHeight / 2.0; + + NSBezierPath* chevron = [NSBezierPath bezierPath]; + [chevron moveToPoint:NSMakePoint(x, y + kChevronHeight)]; + [chevron lineToPoint:NSMakePoint(x + kChevronWidth / 2.0, y)]; + [chevron lineToPoint:NSMakePoint(x + kChevronWidth, y + kChevronHeight)]; + [chevron setLineWidth:1.5]; + [chevron setLineCapStyle:NSLineCapStyleRound]; + + // A filter that is narrowing the table is worth noticing: the rows that + // are missing would otherwise look like rows that were never there. + BOOL active = [self.filterController hasActiveFilterForTableColumn: + [[self tableView] tableColumns][(NSUInteger)column]]; + [(active ? [NSColor controlAccentColor] : [NSColor headerTextColor]) setStroke]; + [chevron stroke]; + } +} + +- (void) mouseDown:(NSEvent*)event { + NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil]; + NSInteger column = [self columnAtPoint:point]; + + NSRect area = column < 0 ? NSZeroRect : [self chevronRectOfColumn:column]; + if (NSEqualRects(area, NSZeroRect) || !NSPointInRect(point, area)) { + // Not the chevron: the header does what it always does, which is where + // the column is resized from. + [super mouseDown:event]; + return; + } + + NSMenu* menu = [self.filterController filterMenuForTableColumn: + [[self tableView] tableColumns][(NSUInteger)column]]; + if (menu == nil) { + [super mouseDown:event]; + return; + } + + [menu popUpMenuPositioningItem:nil + atLocation:NSMakePoint(NSMinX(area), NSMinY(area)) + inView:self]; + + // The menu changed what the table lists, and the chevron says whether a + // filter is on. + [self setNeedsDisplay:YES]; +} + +@end diff --git a/MacDependency/en.lproj/Localizable.strings b/MacDependency/en.lproj/Localizable.strings index 813857c2df967024d779d150f89c3aca257bd5d8..c1184e66995f862e4eda81be03620c6ccff94c39 100644 GIT binary patch delta 1768 zcmbVM&2AE56g@yKNnwU~|veF-3IH!#-o|*bP72Z$|RV`XN^MYvC12c!mnI z*@*7m!Ol!X8tHSREW9MY=crF21Bkbzbf7-W(5Vpg1x$jPgwB$PH3{Ogf;}AZi-Fe^ zq6LrFd6dJ9CFDsVJD=H~N!_KgLndDYqKX(q2P2Xm{D&Swbd#FYR_7C*rsJQN)Mnyha(wveeSG_BXoMUMQYM#@ zTD!2OJ}zBT&83^!@Vmv#!Zfcx69tdO~dw&v^5lm@?w;BECJaea!Ih;OKG$yK$R zTt5A={B^|_+k|3>!d23+36ZC}qyq{pslfN;NJS=9?z3YiMu}$F;$Dlm z{C+>;99vsjTCT#CtzqkQY&6wfJY{7WUERd31|u9C=w|HD1Ra9)=AqbpzkAh&FI}_< zWJx=^O(^#N8DM1=ah{50xIQZh{O0hig!_nzGgKwoj|M^JD>PWMi#K`%1?vH$0)=ES z$xv%EqsLVTUAp0rS=MLB`oUmmPy-7Mo_&>cYLq@OS#)NF=h1q zj_7inNC!TMP!R$>z8&(}(!{1EKmKFQvpfTufvCYiX!784>i*?SQL1#9`j}Pjk&bli z3IEIcmIe*R!-(HSN1+p_)FNH+%Hepoqx>tk?zzzs-yQ%yh)|2C7{RQw78L|KX delta 25 hcmexmyi0il8`ESDCWFmvtjky?f8rL~EW&+)3jlW02!a3r diff --git a/MachO/MachO.xcodeproj/project.pbxproj b/MachO/MachO.xcodeproj/project.pbxproj index 04d034f..cb22f8c 100644 --- a/MachO/MachO.xcodeproj/project.pbxproj +++ b/MachO/MachO.xcodeproj/project.pbxproj @@ -58,6 +58,16 @@ A1C0DE0F1A2B3C4D5E0000B4 /* diskinternalfile.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000B3 /* diskinternalfile.h */; }; A1C0DE0F1A2B3C4D5E0000C2 /* memoryinternalfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000C1 /* memoryinternalfile.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; A1C0DE0F1A2B3C4D5E0000C4 /* memoryinternalfile.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C0DE0F1A2B3C4D5E0000C3 /* memoryinternalfile.h */; }; + B2C0DE0F1A2B3C4D5E000101 /* segmentcommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000001 /* segmentcommand.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B2C0DE0F1A2B3C4D5E000102 /* segmentcommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000002 /* segmentcommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2C0DE0F1A2B3C4D5E000103 /* linkeditdatacommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000003 /* linkeditdatacommand.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B2C0DE0F1A2B3C4D5E000104 /* linkeditdatacommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000004 /* linkeditdatacommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2C0DE0F1A2B3C4D5E000105 /* machofixups.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000005 /* machofixups.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B2C0DE0F1A2B3C4D5E000106 /* machofixups.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000006 /* machofixups.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2C0DE0F1A2B3C4D5E000107 /* objctypedecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000007 /* objctypedecoder.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B2C0DE0F1A2B3C4D5E000108 /* objctypedecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000008 /* objctypedecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2C0DE0F1A2B3C4D5E000109 /* objcmetadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000009 /* objcmetadata.cpp */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B2C0DE0F1A2B3C4D5E000110 /* objcmetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C0DE0F1A2B3C4D5E000010 /* objcmetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -119,6 +129,16 @@ A1C0DE0F1A2B3C4D5E0000C1 /* memoryinternalfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memoryinternalfile.cpp; sourceTree = ""; wrapsLines = 0; }; A1C0DE0F1A2B3C4D5E0000C3 /* memoryinternalfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memoryinternalfile.h; sourceTree = ""; wrapsLines = 0; }; ADCDF193276D87BF002476ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + B2C0DE0F1A2B3C4D5E000001 /* segmentcommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = segmentcommand.cpp; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000002 /* segmentcommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = segmentcommand.h; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000003 /* linkeditdatacommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linkeditdatacommand.cpp; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000004 /* linkeditdatacommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linkeditdatacommand.h; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000005 /* machofixups.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = machofixups.cpp; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000006 /* machofixups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = machofixups.h; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000007 /* objctypedecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objctypedecoder.cpp; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000008 /* objctypedecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objctypedecoder.h; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000009 /* objcmetadata.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objcmetadata.cpp; sourceTree = ""; wrapsLines = 0; }; + B2C0DE0F1A2B3C4D5E000010 /* objcmetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objcmetadata.h; sourceTree = ""; wrapsLines = 0; }; D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -224,6 +244,16 @@ A1C0DE0F1A2B3C4D5E0000B3 /* diskinternalfile.h */, A1C0DE0F1A2B3C4D5E0000C1 /* memoryinternalfile.cpp */, A1C0DE0F1A2B3C4D5E0000C3 /* memoryinternalfile.h */, + B2C0DE0F1A2B3C4D5E000001 /* segmentcommand.cpp */, + B2C0DE0F1A2B3C4D5E000002 /* segmentcommand.h */, + B2C0DE0F1A2B3C4D5E000003 /* linkeditdatacommand.cpp */, + B2C0DE0F1A2B3C4D5E000004 /* linkeditdatacommand.h */, + B2C0DE0F1A2B3C4D5E000005 /* machofixups.cpp */, + B2C0DE0F1A2B3C4D5E000006 /* machofixups.h */, + B2C0DE0F1A2B3C4D5E000007 /* objctypedecoder.cpp */, + B2C0DE0F1A2B3C4D5E000008 /* objctypedecoder.h */, + B2C0DE0F1A2B3C4D5E000009 /* objcmetadata.cpp */, + B2C0DE0F1A2B3C4D5E000010 /* objcmetadata.h */, ); name = Classes; sourceTree = ""; @@ -288,6 +318,11 @@ A1C0DE0F1A2B3C4D5E0000A4 /* dyldcacheimage.h in Headers */, A1C0DE0F1A2B3C4D5E0000B4 /* diskinternalfile.h in Headers */, A1C0DE0F1A2B3C4D5E0000C4 /* memoryinternalfile.h in Headers */, + B2C0DE0F1A2B3C4D5E000102 /* segmentcommand.h in Headers */, + B2C0DE0F1A2B3C4D5E000104 /* linkeditdatacommand.h in Headers */, + B2C0DE0F1A2B3C4D5E000106 /* machofixups.h in Headers */, + B2C0DE0F1A2B3C4D5E000108 /* objctypedecoder.h in Headers */, + B2C0DE0F1A2B3C4D5E000110 /* objcmetadata.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -379,6 +414,11 @@ A1C0DE0F1A2B3C4D5E0000A2 /* dyldcacheimage.cpp in Sources */, A1C0DE0F1A2B3C4D5E0000B2 /* diskinternalfile.cpp in Sources */, A1C0DE0F1A2B3C4D5E0000C2 /* memoryinternalfile.cpp in Sources */, + B2C0DE0F1A2B3C4D5E000101 /* segmentcommand.cpp in Sources */, + B2C0DE0F1A2B3C4D5E000103 /* linkeditdatacommand.cpp in Sources */, + B2C0DE0F1A2B3C4D5E000105 /* machofixups.cpp in Sources */, + B2C0DE0F1A2B3C4D5E000107 /* objctypedecoder.cpp in Sources */, + B2C0DE0F1A2B3C4D5E000109 /* objcmetadata.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -418,7 +458,7 @@ GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 14.6; OTHER_LDFLAGS = "-Wl,-search_paths_first"; PRODUCT_BUNDLE_IDENTIFIER = "com.googlecode.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = MachO; @@ -441,7 +481,7 @@ GCC_PREFIX_HEADER = MachO_Prefix.h; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 14.6; OTHER_LDFLAGS = "-Wl,-search_paths_first"; PRODUCT_BUNDLE_IDENTIFIER = "com.googlecode.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = MachO; diff --git a/MachO/dyldcacheimage.cpp b/MachO/dyldcacheimage.cpp index 14c8334..c72c501 100644 --- a/MachO/dyldcacheimage.cpp +++ b/MachO/dyldcacheimage.cpp @@ -26,6 +26,8 @@ #include #include +#include + #ifndef LC_DYLD_EXPORTS_TRIE #define LC_DYLD_EXPORTS_TRIE 0x80000033u #endif @@ -238,6 +240,11 @@ void DyldCacheImage::load(const std::string& path) if (header == 0) throw MachOException("Invalid image header for '" + path + "'."); + // Remember where dyld put the image: everything outside the synthesized + // buffer (the Objective-C metadata for instance) is read from there. + mappedBase = (const uint8_t*)header; + mappedSlide = slide; + if (header->magic != MH_MAGIC_64) throw MachOException("Only 64 bit images can be read from the dyld shared cache ('" + path + "')."); diff --git a/MachO/dyldcacheimage.h b/MachO/dyldcacheimage.h index 9cad6a4..49cdd38 100644 --- a/MachO/dyldcacheimage.h +++ b/MachO/dyldcacheimage.h @@ -36,8 +36,23 @@ class EXPORT DyldCacheImage const char* getData() const { return buffer.empty() ? 0 : &buffer[0]; } unsigned long long getSize() const { return (unsigned long long)buffer.size(); } + /** + * The image as dyld mapped it into this process: the address of its mach + * header and the slide that was applied to it. The buffer above only holds + * the header, the load commands and __LINKEDIT, so anything else the image + * contains -- the Objective-C metadata for instance -- has to be read from + * the mapped memory through these. + * + * The mapping stays valid for the lifetime of the process (the image is + * never dlclose()d), so the pointers can be used after this object is gone. + */ + const uint8_t* getMappedBase() const { return mappedBase; } + intptr_t getMappedSlide() const { return mappedSlide; } + private: std::vector buffer; + const uint8_t* mappedBase = 0; + intptr_t mappedSlide = 0; }; #endif // DYLD_CACHE_IMAGE_H diff --git a/MachO/internalfile.cpp b/MachO/internalfile.cpp index 12db1c8..de40d1f 100644 --- a/MachO/internalfile.cpp +++ b/MachO/internalfile.cpp @@ -24,7 +24,8 @@ InternalFile* InternalFile::create(const std::string& filename) { // Throws a MachOException when the library cannot be mapped either. DyldCacheImage image; image.load(filename); - return new MemoryInternalFile(filename, image.getData(), image.getSize()); + return new MemoryInternalFile(filename, image.getData(), image.getSize(), + image.getMappedBase(), image.getMappedSlide()); } void InternalFile::release() { diff --git a/MachO/internalfile.h b/MachO/internalfile.h index 17100fa..cc4d71e 100644 --- a/MachO/internalfile.h +++ b/MachO/internalfile.h @@ -41,6 +41,15 @@ class InternalFile */ virtual bool isInMemory() const = 0; + /** + * When the bytes were taken from an image that dyld mapped into this + * process, the address of that image and the slide applied to it. Zero + * otherwise. The mapped image holds everything the synthesized file image + * does not, so parts of the image that are not in the file can still be read. + */ + virtual const uint8_t* getMappedBase() const { return 0; } + virtual intptr_t getMappedSlide() const { return 0; } + protected: explicit InternalFile(const std::string& filename); diff --git a/MachO/linkeditdatacommand.cpp b/MachO/linkeditdatacommand.cpp new file mode 100644 index 0000000..3120637 --- /dev/null +++ b/MachO/linkeditdatacommand.cpp @@ -0,0 +1,33 @@ +#include "linkeditdatacommand.h" +#include "machoheader.h" +#include "machofile.h" + +#include + +LinkeditDataCommand::LinkeditDataCommand(MachOHeader* header) : + LoadCommand(header), command(0), dataOffset(0), dataSize(0), bindOffset(0), bindSize(0), + lazyBindOffset(0), lazyBindSize(0), commandSize(0) +{ + uint32_t cmd = file.readUint32(); + command = cmd; + file.seek(offset); + + if (cmd == LC_DYLD_INFO || cmd == LC_DYLD_INFO_ONLY) { + struct dyld_info_command command; + file.readBytes((char*)&command, sizeof(command)); + commandSize = file.getUint32(command.cmdsize); + // The generic payload of a dyld_info_command is its rebase stream. + dataOffset = file.getUint32(command.rebase_off); + dataSize = file.getUint32(command.rebase_size); + bindOffset = file.getUint32(command.bind_off); + bindSize = file.getUint32(command.bind_size); + lazyBindOffset = file.getUint32(command.lazy_bind_off); + lazyBindSize = file.getUint32(command.lazy_bind_size); + } else { + struct linkedit_data_command command; + file.readBytes((char*)&command, sizeof(command)); + commandSize = file.getUint32(command.cmdsize); + dataOffset = file.getUint32(command.dataoff); + dataSize = file.getUint32(command.datasize); + } +} diff --git a/MachO/linkeditdatacommand.h b/MachO/linkeditdatacommand.h new file mode 100644 index 0000000..7ddd44e --- /dev/null +++ b/MachO/linkeditdatacommand.h @@ -0,0 +1,46 @@ +#ifndef LINKEDITDATACOMMAND_H +#define LINKEDITDATACOMMAND_H + +#include "loadcommand.h" + +/** + * Load commands that only point at a blob in __LINKEDIT, i.e. everything that + * is laid out as a struct linkedit_data_command: LC_DYLD_CHAINED_FIXUPS, + * LC_DYLD_EXPORTS_TRIE, LC_CODE_SIGNATURE and friends. + * + * LC_DYLD_INFO(_ONLY) shares the first two fields but carries the offsets of + * the classic rebase / bind opcode streams behind them, so those are exposed + * as well. + */ +class EXPORT LinkeditDataCommand : public LoadCommand +{ +public: + LinkeditDataCommand(MachOHeader* header); + + virtual unsigned int getSize() const { return commandSize; } + + /** The LC_* value this command was created for. */ + uint32_t getCommand() const { return command; } + + /** Offset of the payload relative to the beginning of the Mach-O image. */ + uint32_t getDataOffset() const { return dataOffset; } + uint32_t getDataSize() const { return dataSize; } + + /** LC_DYLD_INFO(_ONLY): the classic bind opcode streams. */ + uint32_t getBindOffset() const { return bindOffset; } + uint32_t getBindSize() const { return bindSize; } + uint32_t getLazyBindOffset() const { return lazyBindOffset; } + uint32_t getLazyBindSize() const { return lazyBindSize; } + +private: + uint32_t command; + uint32_t dataOffset; + uint32_t dataSize; + uint32_t bindOffset; + uint32_t bindSize; + uint32_t lazyBindOffset; + uint32_t lazyBindSize; + unsigned int commandSize; +}; + +#endif // LINKEDITDATACOMMAND_H diff --git a/MachO/loadcommand.cpp b/MachO/loadcommand.cpp index c35f017..77b058b 100644 --- a/MachO/loadcommand.cpp +++ b/MachO/loadcommand.cpp @@ -1,6 +1,8 @@ #include "loadcommand.h" #include "dylibcommand.h" #include "genericcommand.h" +#include "segmentcommand.h" +#include "linkeditdatacommand.h" #include "symboltablecommand.h" #include "rpathcommand.h" #include "uuidcommand.h" @@ -8,11 +10,28 @@ #include "machoexception.h" #include "machoheader.h" +#ifndef LC_DYLD_CHAINED_FIXUPS +#define LC_DYLD_CHAINED_FIXUPS 0x80000034 +#endif +#ifndef LC_DYLD_EXPORTS_TRIE +#define LC_DYLD_EXPORTS_TRIE 0x80000033 +#endif + LoadCommand* LoadCommand::getLoadCommand(unsigned int cmd, MachOHeader* header) { LoadCommand* loadCommand; switch(cmd) { + case LC_SEGMENT: + case LC_SEGMENT_64: + loadCommand = new SegmentCommand(header); + break; + case LC_DYLD_INFO: + case LC_DYLD_INFO_ONLY: + case LC_DYLD_CHAINED_FIXUPS: + case LC_DYLD_EXPORTS_TRIE: + loadCommand = new LinkeditDataCommand(header); + break; case LC_LOAD_DYLINKER: loadCommand = new DylinkerCommand(header); break; diff --git a/MachO/machoarchitecture.cpp b/MachO/machoarchitecture.cpp index 6a02c03..1934932 100644 --- a/MachO/machoarchitecture.cpp +++ b/MachO/machoarchitecture.cpp @@ -2,6 +2,7 @@ #include "machofile.h" #include "machoheader.h" #include "loadcommand.h" +#include "segmentcommand.h" #include "dylibcommand.h" #include "machoexception.h" #include "rpathcommand.h" @@ -10,6 +11,9 @@ #include "macho.h" #include "dynamicloader.h" +#include +#include + MachOArchitecture::MachOArchitecture(MachOFile& file, uint32_t magic, unsigned int size) : header(MachOHeader::getHeader(file, magic)), file(header->getFile()), size(size), hasReadLoadCommands(false), parent(0), dynamicLibIdCommand(0), uuid(0) @@ -113,5 +117,107 @@ const uint8_t* MachOArchitecture::getUuid() const { return uuid; } +std::vector MachOArchitecture::getSegments() const { + std::vector segments; + for (LoadCommandsConstIterator it = getLoadCommandsBegin(); it != getLoadCommandsEnd(); ++it) { + SegmentCommand* segment = dynamic_cast(*it); + if (segment != 0) + segments.push_back(segment); + } + return segments; +} + +uint64_t MachOArchitecture::getImageBase() const { + for (LoadCommandsConstIterator it = getLoadCommandsBegin(); it != getLoadCommandsEnd(); ++it) { + SegmentCommand* segment = dynamic_cast(*it); + if (segment != 0 && segment->getName() == "__TEXT") + return segment->getVMAddress(); + } + return 0; +} + +uint64_t MachOArchitecture::getMappedSize() const { + uint64_t imageBase = getImageBase(); + uint64_t end = imageBase; + std::vector segments = getSegments(); + for (unsigned int n = 0; n < segments.size(); n++) { + uint64_t segmentEnd = segments[n]->getVMAddress() + segments[n]->getVMSize(); + if (segmentEnd > end) + end = segmentEnd; + } + return end - imageBase; +} + +long long MachOArchitecture::getFileOffset(uint64_t vmAddress) const { + std::vector segments = getSegments(); + for (unsigned int n = 0; n < segments.size(); n++) { + long long offset = segments[n]->getFileOffsetForAddress(vmAddress); + if (offset >= 0) + return offset; + } + return -1; +} + +bool MachOArchitecture::readAtFileOffset(uint64_t offset, void* buffer, size_t size) const { + unsigned long long absoluteOffset = (unsigned long long)header->getOffset() + offset; + if (absoluteOffset + size > file.getSize()) + return false; + + long long savedPosition = file.getPosition(); + bool success = false; + try { + file.seek((long long)absoluteOffset); + file.readBytes((char*)buffer, size); + success = true; + } catch (MachOException&) { + success = false; + } + // The caller may be in the middle of walking the load commands. + file.seek(savedPosition); + return success; +} + +bool MachOArchitecture::readFromProcess(uint64_t address, void* buffer, size_t size) const { + if (size == 0) + return true; + if (address == 0) + return false; + + // The address is not necessarily backed by anything, so the copy is done + // by the kernel, which reports an error instead of taking the process down. + vm_size_t read = 0; + kern_return_t result = vm_read_overwrite(mach_task_self(), (vm_address_t)address, size, + (vm_address_t)buffer, &read); + return result == KERN_SUCCESS && read == size; +} + +bool MachOArchitecture::readAtAddress(uint64_t vmAddress, void* buffer, size_t size) const { + const uint8_t* mappedBase = file.getMappedBase(); + if (mappedBase != 0) { + // The image was mapped into this process by dyld. The synthesized file + // image only holds the header, the load commands and __LINKEDIT, but + // everything else -- the Objective-C metadata for instance -- can be + // read straight out of the mapping. dyld laid the segments out relative + // to the image base, so the file offsets do not apply here. + uint64_t imageBase = getImageBase(); + if (vmAddress < imageBase) + return false; + uint64_t offset = vmAddress - imageBase; + uint64_t processAddress = (uint64_t)(uintptr_t)mappedBase + offset; + if (offset + size <= getMappedSize()) { + memcpy(buffer, mappedBase + offset, size); + return true; + } + // Beyond the image: class name strings of a shared cache image live in + // a pool that belongs to no single image, so this is still worth a try. + return readFromProcess(processAddress, buffer, size); + } + + long long offset = getFileOffset(vmAddress); + if (offset < 0) + return false; + return readAtFileOffset((uint64_t)offset, buffer, size); +} + diff --git a/MachO/machoarchitecture.h b/MachO/machoarchitecture.h index 5944a93..70d0ceb 100644 --- a/MachO/machoarchitecture.h +++ b/MachO/machoarchitecture.h @@ -3,10 +3,14 @@ #include "macho_global.h" +#include +#include + class MachOFile; class MachOHeader; class LoadCommand; class DylibCommand; +class SegmentCommand; class EXPORT MachOArchitecture { @@ -19,7 +23,7 @@ class EXPORT MachOArchitecture MachOArchitecture(MachOFile& file, uint32_t magic, unsigned int size); ~MachOArchitecture(); - const MachOHeader* getHeader() { return header; } + const MachOHeader* getHeader() const { return header; } LoadCommandsConstIterator getLoadCommandsBegin() const { if(!hasReadLoadCommands) { readLoadCommands(); } return loadCommands.begin(); } LoadCommandsConstIterator getLoadCommandsEnd() const { if(!hasReadLoadCommands) { readLoadCommands(); } return loadCommands.end(); } DylibCommand* getDynamicLibIdCommand() const { if(!hasReadLoadCommands) { readLoadCommands(); } return dynamicLibIdCommand; } @@ -31,6 +35,39 @@ class EXPORT MachOArchitecture std::string getResolvedName(const std::string& name, const std::string& workingPath) const; const uint8_t* getUuid() const; + /** All LC_SEGMENT / LC_SEGMENT_64 commands of this architecture. */ + std::vector getSegments() const; + + /** Address the image itself is mapped to, i.e. the address of __TEXT. */ + uint64_t getImageBase() const; + + /** Size of the image as dyld mapped it. Only meaningful for a mapped image. */ + uint64_t getMappedSize() const; + + /** + * Offset (relative to the beginning of the Mach-O image) of the bytes that + * are mapped at `vmAddress`, or -1 when the address is not backed by the file. + */ + long long getFileOffset(uint64_t vmAddress) const; + + /** Reads `size` bytes at an offset relative to the beginning of the image. */ + bool readAtFileOffset(uint64_t offset, void* buffer, size_t size) const; + + /** Reads `size` bytes from `vmAddress`. Returns false when they are not there. */ + bool readAtAddress(uint64_t vmAddress, void* buffer, size_t size) const; + + /** + * Reads `size` bytes from an address in the address space of this process. + * + * readAtAddress translates the address through the image, which is what the + * load commands use; pointers that were taken out of a mapped image however + * are process addresses already, and some of them -- the class data the + * Objective-C runtime builds for a realized class, for instance -- do not + * belong to the image at all. Those are read here. Returns false when the + * memory is not readable instead of crashing. + */ + bool readFromProcess(uint64_t address, void* buffer, size_t size) const; + private: MachOHeader* header; MachOFile& file; diff --git a/MachO/machofile.cpp b/MachO/machofile.cpp index f221a6a..0911bc1 100644 --- a/MachO/machofile.cpp +++ b/MachO/machofile.cpp @@ -35,6 +35,8 @@ std::string MachOFile::getTitle() const { return file->getTitle(); } unsigned long long MachOFile::getSize() const { return file->getSize(); } time_t MachOFile::getLastModificationTime() const { return file->getLastModificationTime(); } bool MachOFile::isInMemory() const { return file->isInMemory(); } +const uint8_t* MachOFile::getMappedBase() const { return file->getMappedBase(); } +intptr_t MachOFile::getMappedSlide() const { return file->getMappedSlide(); } uint32_t MachOFile::readUint32() { unsigned int temp; @@ -54,6 +56,26 @@ uint32_t MachOFile::readUint32BE() { return getUint32BE(temp); } +uint64_t MachOFile::readUint64() { + uint64_t temp; + readBytes((char*)&temp, sizeof(temp)); + return getUint64(temp); +} + +// getUint32 only handles 32 bit values, so a 64 bit value is split into its two +// halves first: the byte order of each half is reversed individually and the +// halves are then swapped. +uint64_t MachOFile::getUint64(uint64_t data) const { + if (!reversedByteOrder) + return data; + const char* source = (const char*)&data; + uint64_t result; + char* destination = (char*)&result; + for (unsigned int n = 0; n < sizeof(data); n++) + destination[n] = source[sizeof(data) - 1 - n]; + return result; +} + uint32_t MachOFile::getUint32BE(uint32_t data) { return convertByteOrder((char*)&data, true, sizeof(data)); } diff --git a/MachO/machofile.h b/MachO/machofile.h index 1e28e5c..f6bc0b1 100644 --- a/MachO/machofile.h +++ b/MachO/machofile.h @@ -14,10 +14,13 @@ class MachOFile uint32_t readUint32(); uint32_t readUint32LE(); uint32_t readUint32BE(); + uint64_t readUint64(); void readBytes(char* result, size_t size); uint32_t getUint32(unsigned int data) const {return (reversedByteOrder?reverseByteOrder(data):data);} + uint16_t getUint16(uint16_t data) const {return (reversedByteOrder?(uint16_t)((data >> 8) | (data << 8)):data);} + uint64_t getUint64(uint64_t data) const; static uint32_t getUint32LE(uint32_t data); static uint32_t getUint32BE(uint32_t data); std::string getDirectory() const; @@ -32,6 +35,13 @@ class MachOFile /** True when the underlying bytes come from the dyld shared cache, not disk. */ bool isInMemory() const; + /** + * The image as dyld mapped it into this process, when it came from the dyld + * shared cache. Zero for a file on disk. + */ + const uint8_t* getMappedBase() const; + intptr_t getMappedSlide() const; + private: static unsigned int convertByteOrder(char* data, bool isBigEndian, unsigned int numberOfBytes); static unsigned int reverseByteOrder(unsigned int data); diff --git a/MachO/machofixups.cpp b/MachO/machofixups.cpp new file mode 100644 index 0000000..82d618a --- /dev/null +++ b/MachO/machofixups.cpp @@ -0,0 +1,507 @@ +#include "machofixups.h" + +#include "machoarchitecture.h" +#include "machoheader.h" +#include "loadcommand.h" +#include "linkeditdatacommand.h" +#include "segmentcommand.h" + +#include + +#ifndef LC_DYLD_INFO +#define LC_DYLD_INFO 0x22 +#endif +#ifndef LC_DYLD_INFO_ONLY +#define LC_DYLD_INFO_ONLY 0x80000022 +#endif +#ifndef LC_DYLD_CHAINED_FIXUPS +#define LC_DYLD_CHAINED_FIXUPS 0x80000034 +#endif + +namespace { + +// dyld_chained_fixups pointer formats +const uint16_t kPtrArm64e = 1; +const uint16_t kPtr64 = 2; +const uint16_t kPtr64Offset = 6; +const uint16_t kPtrArm64eUserland = 9; +const uint16_t kPtrArm64eUserland24 = 12; + +// dyld_chained_fixups import formats +const uint32_t kImport = 1; +const uint32_t kImportAddend = 2; +const uint32_t kImportAddend64 = 3; + +// dyld_chained_starts_in_segment page markers +const uint16_t kPageStartNone = 0xFFFF; +const uint16_t kPageStartMulti = 0x8000; + +// Sizes beyond these are not something a real image would contain. +const uint32_t kMaxFixupsBlobSize = 64u * 1024u * 1024u; +const size_t kMaxFixups = 8u * 1024u * 1024u; +const size_t kMaxChainLength = 1000000u; +const size_t kMaxImports = 4u * 1024u * 1024u; + +// LC_DYLD_INFO bind opcodes +const uint8_t kBindOpcodeMask = 0xF0; +const uint8_t kBindImmediateMask = 0x0F; +const uint8_t kBindOpcodeDone = 0x00; +const uint8_t kBindOpcodeSetDylibOrdinalImm = 0x10; +const uint8_t kBindOpcodeSetDylibOrdinalUleb = 0x20; +const uint8_t kBindOpcodeSetDylibSpecialImm = 0x30; +const uint8_t kBindOpcodeSetSymbolTrailingFlagsImm = 0x40; +const uint8_t kBindOpcodeSetTypeImm = 0x50; +const uint8_t kBindOpcodeSetAddendSleb = 0x60; +const uint8_t kBindOpcodeSetSegmentAndOffsetUleb = 0x70; +const uint8_t kBindOpcodeAddAddrUleb = 0x80; +const uint8_t kBindOpcodeDoBind = 0x90; +const uint8_t kBindOpcodeDoBindAddAddrUleb = 0xA0; +const uint8_t kBindOpcodeDoBindAddAddrImmScaled = 0xB0; +const uint8_t kBindOpcodeDoBindUlebTimesSkippingUleb = 0xC0; + +uint16_t readUint16(const uint8_t* data) { + uint16_t value; + memcpy(&value, data, sizeof(value)); + return value; +} + +uint32_t readUint32(const uint8_t* data) { + uint32_t value; + memcpy(&value, data, sizeof(value)); + return value; +} + +uint64_t readUint64(const uint8_t* data) { + uint64_t value; + memcpy(&value, data, sizeof(value)); + return value; +} + +uint64_t readUleb128(const uint8_t* data, size_t size, size_t& position) { + uint64_t result = 0; + unsigned int shift = 0; + while (position < size) { + uint8_t byte = data[position++]; + result |= (uint64_t)(byte & 0x7Fu) << shift; + if ((byte & 0x80u) == 0) + break; + shift += 7; + if (shift > 63) + break; + } + return result; +} + +int64_t readSleb128(const uint8_t* data, size_t size, size_t& position) { + int64_t result = 0; + unsigned int shift = 0; + uint8_t byte = 0; + while (position < size) { + byte = data[position++]; + result |= (int64_t)(byte & 0x7Fu) << shift; + shift += 7; + if ((byte & 0x80u) == 0) + break; + if (shift > 63) + break; + } + if (shift < 64 && (byte & 0x40u) != 0) + result |= -((int64_t)1 << shift); + return result; +} + +} // namespace + +MachOFixups::MachOFixups(const MachOArchitecture& anArchitecture) : + architecture(anArchitecture), supported(true), hasChainedFixups(false), + mappedBase(0), mappedSlide(0), mappedSize(0) +{ + mappedBase = architecture.getFile()->getMappedBase(); + mappedSlide = architecture.getFile()->getMappedSlide(); + if (mappedBase != 0) { + // dyld has already written every pointer of this image, so the fixup + // descriptions stored on disk no longer describe what is in memory. + // Reading the pointers as they are is all that is needed. + mappedSize = architecture.getMappedSize(); + return; + } + + for (MachOArchitecture::LoadCommandsConstIterator it = architecture.getLoadCommandsBegin(); + it != architecture.getLoadCommandsEnd(); + ++it) + { + LinkeditDataCommand* linkedit = dynamic_cast(*it); + if (linkedit == 0) + continue; + + switch (linkedit->getCommand()) { + case LC_DYLD_CHAINED_FIXUPS: + hasChainedFixups = true; + readChainedFixups(linkedit->getDataOffset(), linkedit->getDataSize()); + break; + case LC_DYLD_INFO: + case LC_DYLD_INFO_ONLY: + readDyldInfoBinds(linkedit->getBindOffset(), linkedit->getBindSize()); + readDyldInfoBinds(linkedit->getLazyBindOffset(), linkedit->getLazyBindSize()); + break; + default: + break; + } + } +} + +uint64_t MachOFixups::readPointer(uint64_t vmAddress) const { + uint64_t value = 0; + if (!architecture.readAtAddress(vmAddress, &value, sizeof(value))) + return 0; + return value; +} + +bool MachOFixups::readFileBlob(uint64_t offset, uint32_t size, std::vector& blob) const { + blob.clear(); + if (size == 0 || size > kMaxFixupsBlobSize) + return false; + blob.resize(size); + if (!architecture.readAtFileOffset(offset, &blob[0], size)) { + blob.clear(); + return false; + } + return true; +} + +bool MachOFixups::isAddressInImage(uint64_t address) const { + return mappedBase != 0 && + address >= (uint64_t)(uintptr_t)mappedBase && + address < (uint64_t)(uintptr_t)mappedBase + mappedSize; +} + +uint64_t MachOFixups::resolve(uint64_t vmAddress) const { + if (!supported) + return 0; + + if (mappedBase != 0) { + // A pointer of a mapped image is an address in this process already. + // Bring it back into the unslid space the load commands are in; an + // address outside the image cannot be resolved from the file. + uint64_t value = readPointer(vmAddress); + if (!isAddressInImage(value)) + return 0; + return (uint64_t)((int64_t)value - (int64_t)mappedSlide); + } + + std::map::const_iterator found = fixups.find(vmAddress); + if (found == fixups.end()) + return readPointer(vmAddress); + if (found->second.isImport) + return 0; + return found->second.value; +} + +bool MachOFixups::isImport(uint64_t vmAddress) const { + if (!supported) + return false; + if (mappedBase != 0) + return false; + std::map::const_iterator found = fixups.find(vmAddress); + return found != fixups.end() && found->second.isImport; +} + +std::string MachOFixups::getImportName(uint64_t vmAddress) const { + if (!supported || mappedBase != 0) + return std::string(); + std::map::const_iterator found = fixups.find(vmAddress); + if (found == fixups.end() || !found->second.isImport) + return std::string(); + if (found->second.value >= imports.size()) + return std::string(); + return imports[(size_t)found->second.value]; +} + +bool MachOFixups::isExternal(uint64_t vmAddress) const { + if (!supported || mappedBase == 0) + return false; + uint64_t value = readPointer(vmAddress); + return value != 0 && !isAddressInImage(value); +} + +uint64_t MachOFixups::getExternalAddress(uint64_t vmAddress) const { + if (!supported || mappedBase == 0) + return 0; + uint64_t value = readPointer(vmAddress); + if (value == 0 || isAddressInImage(value)) + return 0; + return value; +} + +// --------------------------------------------------------------------------- +// Chained fixups +// --------------------------------------------------------------------------- + +void MachOFixups::readChainedFixups(uint32_t offset, uint32_t size) { + std::vector blob; + if (!readFileBlob(offset, size, blob)) + return; + if (blob.size() < 28) { + supported = false; + return; + } + + uint32_t startsOffset = readUint32(&blob[4]); + uint32_t importsOffset = readUint32(&blob[8]); + uint32_t symbolsOffset = readUint32(&blob[12]); + uint32_t importsCount = readUint32(&blob[16]); + uint32_t importsFormat = readUint32(&blob[20]); + uint32_t symbolsFormat = readUint32(&blob[24]); + + readImports(blob, importsOffset, symbolsOffset, importsCount, importsFormat, symbolsFormat); + + if (startsOffset + 4 > blob.size()) { + supported = false; + return; + } + + uint32_t segmentCount = readUint32(&blob[startsOffset]); + std::vector segments = architecture.getSegments(); + + for (uint32_t index = 0; index < segmentCount; index++) { + size_t entryPosition = (size_t)startsOffset + 4 + (size_t)index * 4; + if (entryPosition + 4 > blob.size()) + break; + uint32_t segmentInfoOffset = readUint32(&blob[entryPosition]); + if (segmentInfoOffset == 0) + continue; + if (index >= segments.size()) + continue; + + size_t infoPosition = (size_t)startsOffset + segmentInfoOffset; + if (infoPosition + 22 > blob.size()) + continue; + + uint16_t pageSize = readUint16(&blob[infoPosition + 4]); + uint16_t pointerFormat = readUint16(&blob[infoPosition + 6]); + uint64_t segmentAddress = readUint64(&blob[infoPosition + 8]); + uint16_t pageCount = readUint16(&blob[infoPosition + 20]); + if (pageSize == 0) + continue; + + uint64_t segmentSize = segments[index]->getVMSize(); + if (pageCount == 0 && segmentSize > 0) + pageCount = (uint16_t)((segmentSize + pageSize - 1) / pageSize); + + for (uint16_t page = 0; page < pageCount; page++) { + size_t pageEntry = infoPosition + 22 + (size_t)page * 2; + if (pageEntry + 2 > blob.size()) + break; + uint16_t pageStart = readUint16(&blob[pageEntry]); + if (pageStart == kPageStartNone || (pageStart & kPageStartMulti) != 0) + continue; + walkChain(segmentAddress, segmentSize, pointerFormat, + (uint64_t)page * pageSize + pageStart); + } + } +} + +void MachOFixups::readImports(const std::vector& blob, uint32_t importsOffset, uint32_t symbolsOffset, + uint32_t importsCount, uint32_t importsFormat, uint32_t symbolsFormat) { + if (importsCount > kMaxImports) { + supported = false; + return; + } + + size_t importSize = 0; + switch (importsFormat) { + case kImport: importSize = 4; break; + case kImportAddend: importSize = 8; break; + case kImportAddend64: importSize = 16; break; + default: + supported = false; + return; + } + + if ((size_t)importsOffset + (size_t)importsCount * importSize > blob.size()) { + supported = false; + return; + } + + // Compressed symbol tables (symbolsFormat == 1) are rare; the bindings + // themselves stay usable, only their names are missing. + bool namesUsable = (symbolsFormat == 0) && (symbolsOffset < blob.size()); + + imports.reserve(importsCount); + for (uint32_t index = 0; index < importsCount; index++) { + const uint8_t* entry = &blob[(size_t)importsOffset + (size_t)index * importSize]; + uint32_t nameOffset = 0; + if (importsFormat == kImport || importsFormat == kImportAddend) + nameOffset = readUint32(entry) >> 9; + else + nameOffset = (uint32_t)(readUint64(entry) >> 32); + + std::string name; + if (namesUsable) { + size_t position = (size_t)symbolsOffset + nameOffset; + while (position < blob.size() && blob[position] != 0) + name.push_back((char)blob[position++]); + } + imports.push_back(name); + } +} + +void MachOFixups::walkChain(uint64_t segmentAddress, uint64_t segmentSize, + uint16_t pointerFormat, uint64_t offsetInSegment) { + bool format64 = (pointerFormat == kPtr64 || pointerFormat == kPtr64Offset); + bool formatArm64e = (pointerFormat == kPtrArm64e || pointerFormat == kPtrArm64eUserland || + pointerFormat == kPtrArm64eUserland24); + if (!format64 && !formatArm64e) { + // 32 bit pointer formats and the kernel cache formats are not decoded. + supported = false; + return; + } + + uint64_t imageBase = architecture.getImageBase(); + uint64_t vmAddress = segmentAddress + offsetInSegment; + uint64_t segmentEnd = segmentAddress + segmentSize; + + for (size_t step = 0; step < kMaxChainLength; step++) { + if (vmAddress < segmentAddress || vmAddress + 8 > segmentEnd) + return; + + // The pointer slots themselves live in the segments, not in the fixups + // blob; only the description of the chain is in the blob. + uint64_t raw = readPointer(vmAddress); + uint64_t next = 0; + + Fixup fixup; + if (format64) { + bool isBind = (raw >> 63) != 0; + next = (raw >> 51) & 0xFFF; + if (isBind) { + fixup.isImport = true; + fixup.value = raw & 0xFFFFFF; + } else { + uint64_t target = raw & 0xFFFFFFFFF; + uint64_t high8 = (raw >> 36) & 0xFF; + if (pointerFormat == kPtr64Offset) + target += imageBase; + fixup.isImport = false; + fixup.value = target | (high8 << 56); + } + } else { + bool isAuth = (raw >> 63) != 0; + bool isBind = ((raw >> 62) & 1) != 0; + next = (raw >> 51) & 0x7FF; + if (isBind) { + fixup.isImport = true; + fixup.value = (pointerFormat == kPtrArm64eUserland24) ? (raw & 0xFFFFFF) : (raw & 0xFFFF); + } else { + // An authenticated pointer carries a 32 bit offset, an + // unauthenticated one a 43 bit target. Both are relative to the + // image base. + uint64_t target = isAuth ? (raw & 0xFFFFFFFF) : (raw & 0x7FFFFFFFFFF); + fixup.isImport = false; + fixup.value = target + imageBase; + } + } + fixups[vmAddress] = fixup; + + if (fixups.size() > kMaxFixups) { + supported = false; + return; + } + + if (next == 0) + return; + vmAddress += next * 4; + } +} + +// --------------------------------------------------------------------------- +// Classic dyld info binds +// --------------------------------------------------------------------------- + +void MachOFixups::readDyldInfoBinds(uint32_t offset, uint32_t size) { + std::vector blob; + if (!readFileBlob(offset, size, blob)) + return; + readBindStream(&blob[0], blob.size()); +} + +void MachOFixups::readBindStream(const uint8_t* data, size_t size) { + std::vector segments = architecture.getSegments(); + + size_t position = 0; + uint64_t segmentOffset = 0; + std::string symbol; + size_t segmentIndex = 0; + bool haveSegment = false; + + while (position < size) { + uint8_t byte = data[position++]; + uint8_t opcode = byte & kBindOpcodeMask; + uint8_t immediate = byte & kBindImmediateMask; + + switch (opcode) { + case kBindOpcodeDone: + // A lazy bind stream is a sequence of independently decodable + // chunks, so "done" only resets the current symbol. + symbol.clear(); + haveSegment = false; + break; + case kBindOpcodeSetDylibOrdinalImm: + case kBindOpcodeSetDylibSpecialImm: + case kBindOpcodeSetTypeImm: + break; + case kBindOpcodeSetDylibOrdinalUleb: + readUleb128(data, size, position); + break; + case kBindOpcodeSetSymbolTrailingFlagsImm: { + symbol.clear(); + while (position < size && data[position] != 0) + symbol.push_back((char)data[position++]); + if (position < size) + position++; + break; + } + case kBindOpcodeSetAddendSleb: + readSleb128(data, size, position); + break; + case kBindOpcodeSetSegmentAndOffsetUleb: { + segmentIndex = immediate; + segmentOffset = readUleb128(data, size, position); + haveSegment = segmentIndex < segments.size(); + break; + } + case kBindOpcodeAddAddrUleb: + segmentOffset += readUleb128(data, size, position); + break; + case kBindOpcodeDoBind: + case kBindOpcodeDoBindAddAddrUleb: + case kBindOpcodeDoBindAddAddrImmScaled: + case kBindOpcodeDoBindUlebTimesSkippingUleb: { + uint64_t times = 1; + uint64_t skip = 0; + if (opcode == kBindOpcodeDoBindUlebTimesSkippingUleb) { + times = readUleb128(data, size, position); + skip = readUleb128(data, size, position); + } + for (uint64_t n = 0; n < times; n++) { + if (haveSegment && !symbol.empty() && imports.size() < kMaxImports) { + Fixup fixup; + fixup.isImport = true; + fixup.value = imports.size(); + imports.push_back(symbol); + fixups[segments[segmentIndex]->getVMAddress() + segmentOffset] = fixup; + } + segmentOffset += 8 + skip; + } + if (opcode == kBindOpcodeDoBindAddAddrUleb) + segmentOffset += readUleb128(data, size, position); + else if (opcode == kBindOpcodeDoBindAddAddrImmScaled) + segmentOffset += (uint64_t)immediate * 8; + break; + } + default: + // Unknown opcode: the rest of the stream cannot be decoded. + return; + } + } +} diff --git a/MachO/machofixups.h b/MachO/machofixups.h new file mode 100644 index 0000000..4d2b0d9 --- /dev/null +++ b/MachO/machofixups.h @@ -0,0 +1,105 @@ +#ifndef MACHOFIXUPS_H +#define MACHOFIXUPS_H + +#include "macho_global.h" + +#include +#include +#include +#include + +#include + +class MachOArchitecture; + +/** + * Pointer slots inside __DATA / __DATA_CONST are not filled in on disk: the + * linker leaves a placeholder and dyld rewrites it when the image is loaded. + * Reading a class list, an ivar list or a method list therefore means resolving + * those placeholders first. + * + * Two encodings are in use: + * + * - chained fixups (LC_DYLD_CHAINED_FIXUPS, macOS 12 / iOS 13.4 and later). + * Each slot carries a small structure that either holds a target address + * relative to the image base (a rebase) or an index into the import table + * (a bind), plus the distance to the next slot of the chain. + * - the classic rebase/bind opcode streams of LC_DYLD_INFO(_ONLY), which only + * list the slots that need to be written; a slot holding a bind is zero on + * disk. + * + * Both are decoded here. Images without either (object files, static archives) + * simply have plain pointers. + */ +class EXPORT MachOFixups +{ +public: + MachOFixups(const MachOArchitecture& architecture); + + /** + * False when the image uses a pointer encoding this class does not know. + * The values returned by the accessors are then not trustworthy. + */ + bool isSupported() const { return supported; } + + /** True when the image has pointer fixups at all. */ + bool hasFixups() const { return !fixups.empty(); } + + /** + * Address that the pointer slot at `vmAddress` holds. A slot that is an + * import has no address and yields 0. + */ + uint64_t resolve(uint64_t vmAddress) const; + + /** True when the slot at `vmAddress` is an import. */ + bool isImport(uint64_t vmAddress) const; + + /** Symbol name the slot at `vmAddress` is bound to, or an empty string. */ + std::string getImportName(uint64_t vmAddress) const; + + /** + * True when the slot at `vmAddress` points outside this image. Only ever + * the case for an image that was mapped into this process, where the + * pointer is an address of another loaded image. + */ + bool isExternal(uint64_t vmAddress) const; + + /** That outside address, or 0. See isExternal(). */ + uint64_t getExternalAddress(uint64_t vmAddress) const; + +private: + struct Fixup { + Fixup() : isImport(false), value(0) {} + bool isImport; + // rebase: the target address. import: an index into `imports`. + uint64_t value; + }; + + uint64_t readPointer(uint64_t vmAddress) const; + bool readFileBlob(uint64_t offset, uint32_t size, std::vector& blob) const; + bool isAddressInImage(uint64_t address) const; + + void readChainedFixups(uint32_t offset, uint32_t size); + void walkChain(uint64_t segmentAddress, uint64_t segmentSize, + uint16_t pointerFormat, uint64_t offsetInSegment); + void readImports(const std::vector& blob, uint32_t importsOffset, uint32_t symbolsOffset, + uint32_t importsCount, uint32_t importsFormat, uint32_t symbolsFormat); + + void readDyldInfoBinds(uint32_t offset, uint32_t size); + void readBindStream(const uint8_t* data, size_t size); + + const MachOArchitecture& architecture; + std::vector imports; + std::map fixups; + bool supported; + bool hasChainedFixups; + + // Set when the image was mapped into this process by dyld. Its pointers are + // already relocated, so there is nothing to decode -- they only have to be + // translated back into the unslid address space the load commands use. + const uint8_t* mappedBase; + intptr_t mappedSlide; + uint64_t mappedSize; +}; + +#endif // MACHOFIXUPS_H diff --git a/MachO/memoryinternalfile.cpp b/MachO/memoryinternalfile.cpp index 20a55e6..e4972a1 100644 --- a/MachO/memoryinternalfile.cpp +++ b/MachO/memoryinternalfile.cpp @@ -2,8 +2,9 @@ #include -MemoryInternalFile::MemoryInternalFile(const std::string& filename, const char* data, size_t size) : -InternalFile(filename), data(data, data + size), position(0) +MemoryInternalFile::MemoryInternalFile(const std::string& filename, const char* data, size_t size, + const uint8_t* mappedBase, intptr_t mappedSlide) : +InternalFile(filename), data(data, data + size), position(0), mappedBase(mappedBase), mappedSlide(mappedSlide) { } diff --git a/MachO/memoryinternalfile.h b/MachO/memoryinternalfile.h index af8681d..d785cb5 100644 --- a/MachO/memoryinternalfile.h +++ b/MachO/memoryinternalfile.h @@ -14,7 +14,8 @@ class MemoryInternalFile : public InternalFile { public: - MemoryInternalFile(const std::string& filename, const char* data, size_t size); + MemoryInternalFile(const std::string& filename, const char* data, size_t size, + const uint8_t* mappedBase = 0, intptr_t mappedSlide = 0); virtual unsigned long long getSize() const; virtual bool seek(long long int position); @@ -25,9 +26,15 @@ class MemoryInternalFile : public InternalFile /** Always true: a cached library has no file on disk. */ virtual bool isInMemory() const; + /** The image as dyld mapped it, so the parts missing from the buffer stay readable. */ + virtual const uint8_t* getMappedBase() const { return mappedBase; } + virtual intptr_t getMappedSlide() const { return mappedSlide; } + private: std::vector data; long long int position; + const uint8_t* mappedBase; + intptr_t mappedSlide; }; #endif // MEMORYINTERNALFILE_H diff --git a/MachO/objcmetadata.cpp b/MachO/objcmetadata.cpp new file mode 100644 index 0000000..fb88ab0 --- /dev/null +++ b/MachO/objcmetadata.cpp @@ -0,0 +1,1284 @@ +#include "objcmetadata.h" + +#include "machoarchitecture.h" +#include "machoheader.h" +#include "segmentcommand.h" +#include "objctypedecoder.h" + +#include +#include +#include +#include +#include + +namespace { + +// class_ro_t flags +const uint32_t kClassFlagMeta = 1 << 0; +const uint32_t kClassFlagRoot = 1 << 1; + +// Relative method lists mark themselves with this bit in entsizeAndFlags. +const uint32_t kMethodListRelativeFlag = 0x80000000u; +const uint32_t kEntsizeMask = 0x0000FFFCu; + +// class_data_bits_t: the pointer is stored above these bits, which hold the +// runtime's own flags instead. +const uint64_t kFastDataMask = 0x00007ffffffffff8ull; + +// class_rw_t::flags +const uint32_t kRwRealized = 1u << 31; + +// class_rw_t::ro_or_rw_ext carries this bit when it points at a class_rw_ext_t +// (which the runtime builds for a class that has grown beyond its ro) rather +// than at the class_ro_t itself. +const uint64_t kRwExtFlag = 1; + +const size_t kMaxStringLength = 8192; +const size_t kMaxListEntries = 500000; +const size_t kMaxClasses = 500000; + +// protocol_t::_classProperties was added to the struct after everything else, +// and a protocol_t only carries the field when its own size field covers it: +// the size sits at +64 and is the size of the struct, so the class properties +// are there exactly when it is at least the offset of the field plus a +// pointer. Measured on the protocols of this machine: the field is at +88 and +// the size of a protocol_t that has it is 96. +const uint32_t kProtocolClassPropertiesOffset = 88; +const uint32_t kProtocolSizeWithClassProperties = kProtocolClassPropertiesOffset + 8; + +uint32_t readUint32(const uint8_t* data) { + uint32_t value; + memcpy(&value, data, sizeof(value)); + return value; +} + +uint64_t readUint64(const uint8_t* data) { + uint64_t value; + memcpy(&value, data, sizeof(value)); + return value; +} + +int32_t readInt32(const uint8_t* data) { + int32_t value; + memcpy(&value, data, sizeof(value)); + return value; +} + +/** "_OBJC_CLASS_$_NSString" -> "NSString" */ +std::string stripClassSymbolPrefix(const std::string& symbol) { + static const char* prefixes[] = { + "_OBJC_CLASS_$_", "_OBJC_METACLASS_$_", "_OBJC_PROTOCOL_$_" + }; + for (unsigned int n = 0; n < sizeof(prefixes) / sizeof(*prefixes); n++) { + size_t length = strlen(prefixes[n]); + if (symbol.compare(0, length, prefixes[n]) == 0) + return symbol.substr(length); + } + return symbol; +} + +/** True when the symbol is the one that stands for a class object. */ +bool isClassSymbol(const std::string& symbol) { + static const char* prefixes[] = { "_OBJC_CLASS_$_", "_OBJC_METACLASS_$_" }; + for (unsigned int n = 0; n < sizeof(prefixes) / sizeof(*prefixes); n++) { + if (symbol.compare(0, strlen(prefixes[n]), prefixes[n]) == 0) + return true; + } + return false; +} + +/** + * The runtime hands out the module qualified name of a Swift protocol + * ("AppKit._NSAssertion"), while the image and the other dump tools use the + * mangled symbol ("_TtP6AppKit12_NSAssertion_"). Rebuilding it keeps the two + * spellings -- and the two ways of reading an image -- consistent. + */ +std::string swiftProtocolMangledName(const std::string& name) { + size_t dot = name.find('.'); + if (dot == std::string::npos || dot == 0 || dot + 1 >= name.size()) + return name; + + std::string module = name.substr(0, dot); + std::string type = name.substr(dot + 1); + + char length[24]; + std::string result = "_TtP"; + snprintf(length, sizeof(length), "%u", (unsigned int)module.size()); + result += length; + result += module; + snprintf(length, sizeof(length), "%u", (unsigned int)type.size()); + result += length; + result += type; + result += "_"; + return result; +} + +bool contains(const std::vector& values, const std::string& value) { + for (unsigned int n = 0; n < values.size(); n++) { + if (values[n] == value) + return true; + } + return false; +} + +/** + * The compiler emits a .cxx_destruct / .cxx_construct method for every class + * with a C++ ivar. They are bookkeeping, not part of the API, and the other + * class dump tools leave them out as well. + */ +bool isCompilerGeneratedMethod(const std::string& selector) { + return selector == ".cxx_destruct" || selector == ".cxx_construct"; +} + +/** + * Names the exported symbol that lives at `address`. + * + * This is only used for an image that dyld mapped into this process, where a + * pointer to another image is an address in the running process -- asking the + * dynamic linker is then the only way to find out what it points at. An image + * read from disk gets the name from its own bind information instead. + */ +std::string symbolNameAtAddress(uint64_t address) { + if (address == 0) + return std::string(); + + // An arm64e pointer may carry pointer authentication bits in its high bits. + const uint64_t candidates[] = { address, address & 0x0000000FFFFFFFFFull }; + for (unsigned int n = 0; n < sizeof(candidates) / sizeof(*candidates); n++) { + if (candidates[n] == 0) + continue; + Dl_info info; + if (dladdr((const void*)(uintptr_t)candidates[n], &info) == 0 || info.dli_sname == 0) + continue; + // Only accept an exact match: otherwise the address sits inside some + // unrelated symbol and its name would be misleading. + if ((uint64_t)(uintptr_t)info.dli_saddr == candidates[n]) + return std::string(info.dli_sname); + } + return std::string(); +} + +/** + * The class a mapped image's classref points at, or an empty string when the + * address is not a class object. Only class symbols are accepted, so a pointer + * that happens to land inside an unrelated function cannot name a class. + */ +std::string classSymbolNameAtAddress(uint64_t address) { + std::string symbol = symbolNameAtAddress(address); + if (symbol.empty() || !isClassSymbol(symbol)) + return std::string(); + return stripClassSymbolPrefix(symbol); +} + +void appendJoined(std::string& target, const std::vector& values, const char* separator) { + for (unsigned int n = 0; n < values.size(); n++) { + if (n > 0) + target += separator; + target += values[n]; + } +} + +/** "1 instance method" / "34 instance methods" */ +std::string describeCount(uint32_t count, const char* singular) { + char buffer[64]; + snprintf(buffer, sizeof(buffer), "%u %s%s", count, singular, count == 1 ? "" : "s"); + return std::string(buffer); +} + +} // namespace + +struct ObjCMetadata::Method { + std::string name; + std::string types; +}; + +struct ObjCMetadata::Ivar { + std::string name; + std::string type; +}; + +struct ObjCMetadata::Property { + std::string name; + std::string attributes; +}; + +struct ObjCMetadata::Class { + Class() : superclassKnown(false), isRoot(false) {} + + std::string name; + std::string superclass; + bool superclassKnown; + bool isRoot; + std::vector protocols; + std::vector ivars; + std::vector properties; + std::vector instanceMethods; + std::vector classMethods; +}; + +struct ObjCMetadata::Category { + Category() : instanceMethodCount(0), classMethodCount(0) {} + + std::string name; // the part in parentheses + std::string className; + std::vector protocols; + std::vector properties; + std::vector instanceMethods; + std::vector classMethods; + + // What the method lists claim to hold. For a shared cache image the lists + // themselves cannot be decoded, but their headers can, so at least the + // number of methods is known. + uint32_t instanceMethodCount; + uint32_t classMethodCount; +}; + +struct ObjCMetadata::Protocol { + std::string name; + std::vector protocols; + std::vector properties; + // A protocol can declare properties of the class as a whole; they are a + // list of their own and are always required (there is no field for + // optional ones, and no image has ever turned out to have one). + std::vector classProperties; + std::vector requiredInstanceMethods; + std::vector optionalInstanceMethods; + std::vector requiredClassMethods; + std::vector optionalClassMethods; +}; + +ObjCMetadata::ObjCMetadata(const MachOArchitecture& anArchitecture) : + architecture(anArchitecture), fixups(anArchitecture), parsed(false) +{ +} + +ObjCMetadata::~ObjCMetadata() { + for (unsigned int n = 0; n < classes.size(); n++) + delete classes[n]; + for (unsigned int n = 0; n < categories.size(); n++) + delete categories[n]; + for (unsigned int n = 0; n < protocols.size(); n++) + delete protocols[n]; +} + +const uint8_t* ObjCMetadata::mappedBase() const { + return architecture.getFile()->getMappedBase(); +} + +void ObjCMetadata::parse() const { + if (parsed) + return; + parsed = true; + + // The class_t layout that is decoded here is the 64 bit one. + if (!architecture.getHeader()->is64Bit()) + return; + + // __objc_classlist lives in __DATA_CONST on modern images and in __DATA on + // older ones, so all segments are searched. + const Section* classList = 0; + const Section* categoryList = 0; + const Section* protocolList = 0; + std::vector segments = architecture.getSegments(); + for (unsigned int n = 0; n < segments.size(); n++) { + if (classList == 0) + classList = segments[n]->findSection("__objc_classlist"); + if (categoryList == 0) + categoryList = segments[n]->findSection("__objc_catlist"); + if (protocolList == 0) + protocolList = segments[n]->findSection("__objc_protolist"); + } + + if (classList != 0) { + size_t count = (size_t)(classList->getSize() / 8); + if (count > kMaxClasses) + count = kMaxClasses; + + for (size_t n = 0; n < count; n++) { + uint64_t classAddress = fixups.resolve(classList->getAddress() + n * 8); + if (classAddress == 0) + continue; + Class* info = new Class(); + if (readClass(classAddress, *info)) + classes.push_back(info); + else + delete info; + } + } + + if (categoryList != 0) { + size_t count = (size_t)(categoryList->getSize() / 8); + if (count > kMaxClasses) + count = kMaxClasses; + + for (size_t n = 0; n < count; n++) { + uint64_t categoryAddress = fixups.resolve(categoryList->getAddress() + n * 8); + if (categoryAddress == 0) + continue; + Category* info = new Category(); + if (readCategory(categoryAddress, *info)) + categories.push_back(info); + else + delete info; + } + } + + if (protocolList != 0) { + size_t count = (size_t)(protocolList->getSize() / 8); + if (count > kMaxClasses) + count = kMaxClasses; + + for (size_t n = 0; n < count; n++) { + uint64_t protocolAddress = fixups.resolve(protocolList->getAddress() + n * 8); + if (protocolAddress == 0) + continue; + Protocol* info = new Protocol(); + // Some images list a protocol more than once; declaring it twice + // would be wrong, so the first one wins. + if (readProtocol(protocolAddress, *info) && !hasProtocolNamed(info->name)) + protocols.push_back(info); + else + delete info; + } + } +} + +bool ObjCMetadata::hasProtocolNamed(const std::string& name) const { + for (unsigned int n = 0; n < protocols.size(); n++) { + if (protocols[n]->name == name) + return true; + } + return false; +} + +std::string ObjCMetadata::readString(uint64_t address) const { + std::string result; + if (address == 0) + return result; + + char chunk[64]; + while (result.size() < kMaxStringLength) { + size_t remaining = kMaxStringLength - result.size(); + size_t request = remaining < sizeof(chunk) ? remaining : sizeof(chunk); + size_t got = request; + // The last chunk may reach past the end of the segment; fall back to a + // single byte so that a string ending right at the boundary still works. + if (!architecture.readAtAddress(address + result.size(), chunk, request)) { + got = 1; + if (!architecture.readAtAddress(address + result.size(), chunk, 1)) + break; + } + for (size_t n = 0; n < got; n++) { + if (chunk[n] == 0) + return result; + result.push_back(chunk[n]); + } + } + return result; +} + +uint64_t ObjCMetadata::decodeMappedClassData(uint64_t bits) const { + // An image dyld mapped into this process does not hold the class_ro_t in + // class_data_bits_t::bits any more: the runtime realizes its classes and + // rewrites the field to point at the class_rw_t it built, which is a + // per-process structure that belongs to no image. + uint64_t data = bits & kFastDataMask; + + uint32_t flags = 0; + if (!architecture.readFromProcess(data, &flags, sizeof(flags)) || (flags & kRwRealized) == 0) { + // Not realized after all, so the field still holds the ro. + return data & ~(uint64_t)7; + } + + uint64_t roOrRwExt = 0; + if (!architecture.readFromProcess(data + 8, &roOrRwExt, sizeof(roOrRwExt))) + return data & ~(uint64_t)7; + + if ((roOrRwExt & kRwExtFlag) != 0) { + // class_rw_ext_t, whose first member is the class_ro_t. + uint64_t extended = roOrRwExt & ~(uint64_t)7; + uint64_t ro = 0; + if (!architecture.readFromProcess(extended, &ro, sizeof(ro))) + return data & ~(uint64_t)7; + return ro & ~(uint64_t)7; + } + + return roOrRwExt & ~(uint64_t)7; +} + +uint64_t ObjCMetadata::classRoAddress(uint64_t classAddress) const { + const uint8_t* mappedBase = architecture.getFile()->getMappedBase(); + if (mappedBase == 0) { + // On disk the field holds the address of the ro itself, behind a fixup. + return fixups.resolve(classAddress + 32) & ~(uint64_t)7; + } + + uint64_t bits = 0; + if (!architecture.readAtAddress(classAddress + 32, &bits, sizeof(bits))) + return 0; + + // decodeMappedClassData works with process addresses, everything else here + // with the unslid ones the load commands are in. + uint64_t ro = decodeMappedClassData(bits); + if (ro == 0) + return 0; + return ro - (uint64_t)architecture.getFile()->getMappedSlide(); +} + +std::string ObjCMetadata::readClassName(uint64_t classAddress) const { + uint64_t roAddress = classRoAddress(classAddress); + if (roAddress == 0) + return std::string(); + return readString(fixups.resolve(roAddress + 24)); +} + +uint32_t ObjCMetadata::readListCount(uint64_t listAddress) const { + if (listAddress == 0) + return 0; + uint8_t header[8]; + if (!architecture.readAtAddress(listAddress, header, sizeof(header))) + return 0; + uint32_t count = readUint32(header + 4); + return count > kMaxListEntries ? 0 : count; +} + +std::string ObjCMetadata::readClassReferenceName(uint64_t slotAddress) const { + if (fixups.isImport(slotAddress)) { + // The class lives in another image and the bind names it. + return stripClassSymbolPrefix(fixups.getImportName(slotAddress)); + } + + if (mappedBase() != 0) { + // A mapped image holds a real address here, which may belong to any + // other loaded image; the dynamic linker knows what lives there. + uint64_t raw = 0; + if (architecture.readAtAddress(slotAddress, &raw, sizeof(raw))) { + std::string name = classSymbolNameAtAddress(raw); + if (!name.empty()) + return name; + } + } + + uint64_t address = fixups.resolve(slotAddress); + if (address == 0) + return std::string(); + return readClassName(address); +} + +void ObjCMetadata::readMethods(uint64_t listAddress, std::vector& result) const { + if (listAddress == 0) + return; + + uint8_t header[8]; + if (!architecture.readAtAddress(listAddress, header, sizeof(header))) + return; + uint32_t entsizeAndFlags = readUint32(header); + uint32_t count = readUint32(header + 4); + if (count > kMaxListEntries) + return; + + uint32_t entrySize = entsizeAndFlags & kEntsizeMask; + bool isRelative = (entsizeAndFlags & kMethodListRelativeFlag) != 0 || entrySize == 12; + if (entrySize == 0) + entrySize = isRelative ? 12 : 24; + if (entrySize < 12 || entrySize > 64) + return; + + for (uint32_t n = 0; n < count; n++) { + uint64_t entryAddress = listAddress + 8 + (uint64_t)n * entrySize; + Method method; + if (isRelative) { + uint8_t entry[12]; + if (!architecture.readAtAddress(entryAddress, entry, sizeof(entry))) + break; + int32_t nameOffset = readInt32(entry); + int32_t typesOffset = readInt32(entry + 4); + // The name offset points at a selector reference (one more + // indirection), the type offset straight at the type string. Both + // are relative to the field they are stored in. + uint64_t selectorSlot = (uint64_t)((int64_t)entryAddress + nameOffset); + method.name = readString(fixups.resolve(selectorSlot)); + method.types = readString((uint64_t)((int64_t)entryAddress + 4 + typesOffset)); + } else { + uint8_t entry[24]; + if (!architecture.readAtAddress(entryAddress, entry, sizeof(entry))) + break; + method.name = readString(fixups.resolve(entryAddress)); + method.types = readString(fixups.resolve(entryAddress + 8)); + } + if (!method.name.empty() && !isCompilerGeneratedMethod(method.name)) + result.push_back(method); + } +} + +void ObjCMetadata::readIvars(uint64_t listAddress, std::vector& result) const { + if (listAddress == 0) + return; + + uint8_t header[8]; + if (!architecture.readAtAddress(listAddress, header, sizeof(header))) + return; + uint32_t entrySize = readUint32(header) & kEntsizeMask; + uint32_t count = readUint32(header + 4); + if (entrySize == 0) + entrySize = 32; + if (entrySize < 32 || count > kMaxListEntries) + return; + + for (uint32_t n = 0; n < count; n++) { + // ivar_t: offset, name, type, alignment, size + uint64_t entryAddress = listAddress + 8 + (uint64_t)n * entrySize; + uint8_t entry[32]; + if (!architecture.readAtAddress(entryAddress, entry, sizeof(entry))) + break; + Ivar ivar; + ivar.name = readString(fixups.resolve(entryAddress + 8)); + ivar.type = readString(fixups.resolve(entryAddress + 16)); + if (!ivar.name.empty()) + result.push_back(ivar); + } +} + +void ObjCMetadata::readProperties(uint64_t listAddress, std::vector& result) const { + if (listAddress == 0) + return; + + uint8_t header[8]; + if (!architecture.readAtAddress(listAddress, header, sizeof(header))) + return; + uint32_t entrySize = readUint32(header) & kEntsizeMask; + uint32_t count = readUint32(header + 4); + if (entrySize == 0) + entrySize = 16; + if (entrySize < 16 || count > kMaxListEntries) + return; + + for (uint32_t n = 0; n < count; n++) { + // property_t: name, attributes + uint64_t entryAddress = listAddress + 8 + (uint64_t)n * entrySize; + uint8_t entry[16]; + if (!architecture.readAtAddress(entryAddress, entry, sizeof(entry))) + break; + Property property; + property.name = readString(fixups.resolve(entryAddress)); + property.attributes = readString(fixups.resolve(entryAddress + 8)); + if (!property.name.empty()) + result.push_back(property); + } +} + +bool ObjCMetadata::readMethodsFromRuntime(uint64_t processClassAddress, bool metaclass, + std::vector& result) const { + if (processClassAddress == 0) + return false; + + // `Class` and `Method` name the nested structs here, so the runtime's own + // types have to be spelled out. + ::Class cls = (::Class)(uintptr_t)processClassAddress; + ::Class target = cls; + if (metaclass) { + // The metaclass holds the class methods. It is looked up by name + // because object_getClass takes an instance, and a class_t is not one. + const char* className = class_getName(cls); + if (className == 0) + return false; + target = objc_getMetaClass(className); + } + if (target == nil) + return false; + + unsigned int count = 0; + ::Method* methods = class_copyMethodList(target, &count); + if (methods == 0) { + // A class without methods is not an error, the runtime just has + // nothing to return. + return count == 0; + } + + for (unsigned int n = 0; n < count; n++) { + const char* name = sel_getName(method_getName(methods[n])); + if (name == 0 || isCompilerGeneratedMethod(name)) + continue; + const char* types = method_getTypeEncoding(methods[n]); + Method method; + method.name = name; + if (types != 0) + method.types = types; + result.push_back(method); + } + + free(methods); + return true; +} + +bool ObjCMetadata::readProtocolsFromRuntime(uint64_t processClassAddress, + std::vector& result) const { + if (processClassAddress == 0) + return false; + + ::Class cls = (::Class)(uintptr_t)processClassAddress; + unsigned int count = 0; + ::Protocol* const* protocols = class_copyProtocolList(cls, &count); + if (protocols == 0) + return count == 0; + + for (unsigned int n = 0; n < count; n++) { + const char* name = protocol_getName(protocols[n]); + if (name == 0) + continue; + std::string normalized = swiftProtocolMangledName(name); + if (!contains(result, normalized)) + result.push_back(normalized); + } + + free((void*)protocols); + return true; +} + +bool ObjCMetadata::readProtocolFromRuntime(const std::string& name, Protocol& result) const { + // The runtime keys protocols by their mangled name, which is what the image + // holds as well. + ::Protocol* protocol = objc_getProtocol(name.c_str()); + if (protocol == nil) + return false; + + result.name = name; + + unsigned int count = 0; + ::Protocol* __unsafe_unretained* parents = protocol_copyProtocolList(protocol, &count); + if (parents != 0) { + for (unsigned int n = 0; n < count; n++) { + const char* parentName = protocol_getName(parents[n]); + if (parentName != 0) + result.protocols.push_back(swiftProtocolMangledName(parentName)); + } + free(parents); + } + + // The instance properties and the class properties of a protocol are two + // lists of their own, and protocol_copyPropertyList() only hands out the + // first of them. + objc_property_t* propertyLists[2]; + std::vector* propertyTargets[2] = { &result.properties, &result.classProperties }; + unsigned int propertyCounts[2] = { 0, 0 }; + propertyLists[0] = protocol_copyPropertyList(protocol, &propertyCounts[0]); + propertyLists[1] = protocol_copyPropertyList2(protocol, &propertyCounts[1], YES, NO); + + for (unsigned int list = 0; list < 2; list++) { + if (propertyLists[list] == 0) + continue; + for (unsigned int n = 0; n < propertyCounts[list]; n++) { + Property property; + const char* propertyName = property_getName(propertyLists[list][n]); + const char* attributes = property_getAttributes(propertyLists[list][n]); + if (propertyName != 0) + property.name = propertyName; + if (attributes != 0) + property.attributes = attributes; + if (!property.name.empty()) + propertyTargets[list]->push_back(property); + } + free(propertyLists[list]); + } + + struct { + std::vector* target; + BOOL required; + BOOL instance; + } groups[] = { + { &result.requiredInstanceMethods, YES, YES }, + { &result.optionalInstanceMethods, NO, YES }, + { &result.requiredClassMethods, YES, NO }, + { &result.optionalClassMethods, NO, NO }, + }; + + for (unsigned int g = 0; g < sizeof(groups) / sizeof(*groups); g++) { + struct objc_method_description* descriptions = + protocol_copyMethodDescriptionList(protocol, groups[g].required, groups[g].instance, &count); + if (descriptions == 0) + continue; + for (unsigned int n = 0; n < count; n++) { + const char* selector = descriptions[n].name != 0 ? sel_getName(descriptions[n].name) : 0; + if (selector == 0 || isCompilerGeneratedMethod(selector)) + continue; + Method method; + method.name = selector; + if (descriptions[n].types != 0) + method.types = descriptions[n].types; + groups[g].target->push_back(method); + } + free(descriptions); + } + + return true; +} + +void ObjCMetadata::readProtocols(uint64_t listAddress, std::vector& result) const { + if (listAddress == 0) + return; + + uint64_t count = fixups.resolve(listAddress); + if (count == 0 || count > kMaxListEntries) + return; + + for (uint64_t n = 0; n < count; n++) { + uint64_t slot = listAddress + 8 + n * 8; + uint64_t protocolAddress = fixups.resolve(slot); + if (protocolAddress == 0) { + // A protocol defined in another image; only a mapped image can say + // which one it is. + std::string external = stripClassSymbolPrefix(symbolNameAtAddress(fixups.getExternalAddress(slot))); + if (!external.empty() && !contains(result, external)) + result.push_back(external); + continue; + } + // protocol_t: isa, mangledName, ... + std::string name = readString(fixups.resolve(protocolAddress + 8)); + if (!name.empty() && !contains(result, name)) + result.push_back(name); + } +} + +bool ObjCMetadata::readClass(uint64_t address, Class& result) const { + // class_t: isa, superclass, cache (two words), bits + uint8_t classData[40]; + if (!architecture.readAtAddress(address, classData, sizeof(classData))) + return false; + + // The low bits of `bits` are flags, not part of the address. + uint64_t roAddress = classRoAddress(address); + if (roAddress == 0) + return false; + + // class_ro_t: flags, instanceStart, instanceSize, reserved, ivarLayout, + // name, baseMethods, baseProtocols, ivars, weakIvarLayout, + // baseProperties + uint8_t ro[72]; + if (!architecture.readAtAddress(roAddress, ro, sizeof(ro))) + return false; + + uint32_t flags = readUint32(ro); + result.isRoot = (flags & kClassFlagRoot) != 0; + result.name = readString(fixups.resolve(roAddress + 24)); + if (result.name.empty()) + return false; + + if (fixups.isImport(address + 8)) { + // The superclass lives in another image; the fixup names it. + result.superclass = stripClassSymbolPrefix(fixups.getImportName(address + 8)); + result.superclassKnown = !result.superclass.empty(); + } else if (fixups.isExternal(address + 8)) { + // Same situation, but for an image dyld mapped into this process: the + // pointer is an address of the other image, so ask the dynamic linker. + result.superclass = stripClassSymbolPrefix(symbolNameAtAddress(fixups.getExternalAddress(address + 8))); + result.superclassKnown = !result.superclass.empty(); + } else { + uint64_t superclassAddress = fixups.resolve(address + 8); + if (superclassAddress != 0) { + result.superclass = readClassName(superclassAddress); + result.superclassKnown = !result.superclass.empty(); + } else { + result.superclassKnown = result.isRoot; + } + } + + // Ivars and properties read fine out of the image, mapped or not. + readIvars(fixups.resolve(roAddress + 48), result.ivars); + readProperties(fixups.resolve(roAddress + 64), result.properties); + + // The method and protocol lists of a shared cache image cannot be read out + // of the image: dyld stores them in __TEXT.__objc_methlist as eight byte + // entries in an encoding of its own, with the selector strings moved out of + // the image entirely. The runtime has already decoded all of that, so ask + // it -- but only after checking that it really is this very class, or the + // answer would describe some other image's class of the same name. + uint64_t processClassAddress = 0; + if (architecture.getFile()->getMappedBase() != 0) { + uint64_t candidate = address + (uint64_t)architecture.getFile()->getMappedSlide(); + ::Class runtimeClass = objc_getClass(result.name.c_str()); + if (runtimeClass != nil && (uint64_t)(uintptr_t)runtimeClass == candidate) + processClassAddress = candidate; + } + + if (processClassAddress != 0) { + if (!readProtocolsFromRuntime(processClassAddress, result.protocols)) + readProtocols(fixups.resolve(roAddress + 40), result.protocols); + + std::vector methods; + if (readMethodsFromRuntime(processClassAddress, false, methods) && !methods.empty()) + result.instanceMethods.swap(methods); + else + readMethods(fixups.resolve(roAddress + 32), result.instanceMethods); + + methods.clear(); + if (readMethodsFromRuntime(processClassAddress, true, methods) && !methods.empty()) + result.classMethods.swap(methods); + else + readMetaclassMethods(address, result.classMethods); + + return true; + } + + readProtocols(fixups.resolve(roAddress + 40), result.protocols); + readMethods(fixups.resolve(roAddress + 32), result.instanceMethods); + readMetaclassMethods(address, result.classMethods); + + return true; +} + +void ObjCMetadata::readMetaclassMethods(uint64_t classAddress, std::vector& result) const { + // Class methods are the instance methods of the metaclass. + uint64_t metaclassAddress = fixups.resolve(classAddress); + if (metaclassAddress == 0) + return; + + uint64_t metaclassRo = classRoAddress(metaclassAddress); + uint8_t metaclassData[72]; + if (metaclassRo != 0 && architecture.readAtAddress(metaclassRo, metaclassData, sizeof(metaclassData)) && + (readUint32(metaclassData) & kClassFlagMeta) != 0) { + readMethods(fixups.resolve(metaclassRo + 32), result); + } +} + +bool ObjCMetadata::readCategory(uint64_t address, Category& result) const { + // category_t: name, cls, instanceMethods, classMethods, protocols, + // instanceProperties, classProperties + uint8_t category[56]; + if (!architecture.readAtAddress(address, category, sizeof(category))) + return false; + + // The name of a category_t is the one in the parentheses; the class it + // extends is the classref next to it. + result.name = readString(fixups.resolve(address)); + if (result.name.empty()) + return false; + + result.className = readClassReferenceName(address + 8); + + readProtocols(fixups.resolve(address + 32), result.protocols); + readProperties(fixups.resolve(address + 40), result.properties); + + uint64_t instanceMethods = fixups.resolve(address + 16); + uint64_t classMethods = fixups.resolve(address + 24); + result.instanceMethodCount = readListCount(instanceMethods); + result.classMethodCount = readListCount(classMethods); + + // An image dyld mapped into this process keeps its method lists in an + // encoding of its own whose offsets point into a string pool that belongs + // to no single image, so they cannot be decoded from here (see the progress + // notes for the measurements). The methods are not lost by that: the + // runtime merges every category into its class, and the listing of that + // class already contains them. + if (mappedBase() == 0) { + readMethods(instanceMethods, result.instanceMethods); + readMethods(classMethods, result.classMethods); + } + + return true; +} + +bool ObjCMetadata::readProtocol(uint64_t address, Protocol& result) const { + // protocol_t: isa, mangledName, protocols, instanceMethods, classMethods, + // optionalInstanceMethods, optionalClassMethods, + // instanceProperties, size, flags, _extendedMethodTypes, + // _demangledName, _classProperties + uint8_t protocol[96]; + if (!architecture.readAtAddress(address, protocol, sizeof(protocol))) + return false; + + result.name = readString(fixups.resolve(address + 8)); + if (result.name.empty()) + return false; + + // The same applies to the method lists of a protocol, and the runtime has + // an API that hands out a protocol by name -- so ask it. + if (mappedBase() != 0) { + Protocol fromRuntime; + if (readProtocolFromRuntime(result.name, fromRuntime)) { + result = fromRuntime; + return true; + } + } + + readProtocols(fixups.resolve(address + 16), result.protocols); + readProperties(fixups.resolve(address + 56), result.properties); + readMethods(fixups.resolve(address + 24), result.requiredInstanceMethods); + readMethods(fixups.resolve(address + 32), result.requiredClassMethods); + readMethods(fixups.resolve(address + 40), result.optionalInstanceMethods); + readMethods(fixups.resolve(address + 48), result.optionalClassMethods); + if (readUint32(protocol + 64) >= kProtocolSizeWithClassProperties) + readProperties(fixups.resolve(address + kProtocolClassPropertiesOffset), result.classProperties); + + return true; +} + +#pragma mark - Rendering + +namespace { + +/** + * "Ti,N,V_baseProperty" -> type "i", attributes "(nonatomic)". The declared + * property name comes from the property itself, the ivar name from V. + * + * The codes are the ones the runtime documents: R is a read-only property and + * & is a strong one, C a copy, W a weak one and N a non-atomic one. The + * spelling that is written out is the current one, so & becomes strong. + */ +void parsePropertyAttributes(const std::string& attributes, bool classProperty, + std::string& type, std::string& rendered) { + std::vector flags; + std::string getter; + std::string setter; + bool nonatomic = false; + bool readonly = false; + bool isWeak = false; + std::string memory; + + size_t position = 0; + while (position <= attributes.size()) { + size_t end = attributes.find(',', position); + if (end == std::string::npos) + end = attributes.size(); + std::string token = attributes.substr(position, end - position); + if (!token.empty()) { + char code = token[0]; + if (code == 'T') { + type = token.substr(1); + } else if (code == 'V') { + // The backing ivar; not shown, the property name is enough. + } else if (code == 'C') { + memory = "copy"; + } else if (code == '&') { + memory = "strong"; + } else if (code == 'R') { + readonly = true; + } else if (code == 'W') { + isWeak = true; + } else if (code == 'N') { + nonatomic = true; + } else if (code == 'G') { + getter = token.substr(1); + } else if (code == 'S') { + setter = token.substr(1); + } + } + if (end >= attributes.size()) + break; + position = end + 1; + } + + if (classProperty) + flags.push_back("class"); + if (nonatomic) + flags.push_back("nonatomic"); + if (readonly) + flags.push_back("readonly"); + if (isWeak) + flags.push_back("weak"); + else if (!memory.empty()) + flags.push_back(memory); + if (!getter.empty()) + flags.push_back("getter=" + getter); + if (!setter.empty()) + flags.push_back("setter=" + setter); + + rendered = "("; + for (unsigned int n = 0; n < flags.size(); n++) { + if (n > 0) + rendered += ", "; + rendered += flags[n]; + } + rendered += ")"; +} + +} // namespace + +void ObjCMetadata::appendProperties(std::string& result, const std::vector& properties, + bool classProperty) const { + for (unsigned int n = 0; n < properties.size(); n++) { + std::string typeEncoding; + std::string attributes; + parsePropertyAttributes(properties[n].attributes, classProperty, typeEncoding, attributes); + + std::string declaration; + size_t position = 0; + ObjCType type = ObjCTypeDecoder::decodeType(typeEncoding, position); + if (type.isEmpty()) + declaration = "id " + properties[n].name; + else + declaration = type.declaration(properties[n].name); + + result += "@property "; + result += attributes; + result += " "; + result += declaration; + result += ";\n"; + } +} + +void ObjCMetadata::appendMethods(std::string& result, const std::vector& methods, + bool classMethod) const { + for (unsigned int n = 0; n < methods.size(); n++) { + std::string declaration = ObjCTypeDecoder::decodeMethod(methods[n].name, methods[n].types, classMethod); + if (declaration.empty()) + continue; + result += declaration; + result += ";\n"; + } +} + +std::string ObjCMetadata::render(const Class& info, bool metaclass) const { + std::string result; + + if (metaclass) { + result += "// Class methods of "; + result += info.name; + result += " (_OBJC_METACLASS_$_"; + result += info.name; + result += ")\n"; + } + + result += "@interface "; + result += info.name; + if (!metaclass) { + if (info.superclassKnown && !info.superclass.empty()) + result += " : " + info.superclass; + else if (!info.isRoot) + result += " /* superclass is imported and could not be named */"; + } + if (!metaclass && !info.protocols.empty()) { + result += " <"; + appendJoined(result, info.protocols, ", "); + result += ">"; + } + result += "\n"; + + if (!metaclass && !info.ivars.empty()) { + result += "{\n"; + for (unsigned int n = 0; n < info.ivars.size(); n++) { + result += " "; + result += ObjCTypeDecoder::decodeIvar(info.ivars[n].type, info.ivars[n].name); + result += ";\n"; + } + result += "}\n"; + } + + if (!metaclass) + appendProperties(result, info.properties, false); + + if (metaclass) { + appendMethods(result, info.classMethods, true); + } else { + // A class declaration lists both, class methods first. + if (!info.classMethods.empty()) { + result += "\n/* class methods */\n"; + appendMethods(result, info.classMethods, true); + } + if (!info.instanceMethods.empty()) { + result += "\n/* instance methods */\n"; + appendMethods(result, info.instanceMethods, false); + } + } + + result += "@end\n"; + return result; +} + +std::string ObjCMetadata::renderCategory(const Category& info) const { + std::string result = "@interface "; + if (info.className.empty()) + result += "/* unknown class */"; + else + result += info.className; + result += " ("; + result += info.name; + result += ")"; + if (!info.protocols.empty()) { + result += " <"; + appendJoined(result, info.protocols, ", "); + result += ">"; + } + result += "\n"; + + appendProperties(result, info.properties, false); + + if (!info.classMethods.empty()) { + result += "\n/* class methods */\n"; + appendMethods(result, info.classMethods, true); + } else if (info.classMethodCount > 0) { + result += "\n/* "; + result += describeCount(info.classMethodCount, "class method"); + result += " that the runtime has merged into "; + result += info.className.empty() ? "the class" : info.className; + result += " */\n"; + } + + if (!info.instanceMethods.empty()) { + result += "\n/* instance methods */\n"; + appendMethods(result, info.instanceMethods, false); + } else if (info.instanceMethodCount > 0) { + result += "\n/* "; + result += describeCount(info.instanceMethodCount, "instance method"); + result += " that the runtime has merged into "; + result += info.className.empty() ? "the class" : info.className; + result += " */\n"; + } + + result += "@end\n"; + return result; +} + +std::string ObjCMetadata::renderProtocol(const Protocol& info) const { + std::string result = "@protocol "; + result += info.name; + if (!info.protocols.empty()) { + result += " <"; + appendJoined(result, info.protocols, ", "); + result += ">"; + } + result += "\n"; + + if (!info.requiredInstanceMethods.empty() || !info.requiredClassMethods.empty() || + !info.properties.empty() || !info.classProperties.empty()) { + result += "\n@required\n"; + appendProperties(result, info.properties, false); + if (!info.classProperties.empty()) { + // The properties of the protocol itself, rather than of whatever + // conforms to it, are a group of their own. + result += "\n"; + appendProperties(result, info.classProperties, true); + } + appendMethods(result, info.requiredClassMethods, true); + appendMethods(result, info.requiredInstanceMethods, false); + } + + if (!info.optionalInstanceMethods.empty() || !info.optionalClassMethods.empty()) { + result += "\n@optional\n"; + appendMethods(result, info.optionalClassMethods, true); + appendMethods(result, info.optionalInstanceMethods, false); + } + + result += "\n@end\n"; + return result; +} + +bool ObjCMetadata::hasClasses() const { + parse(); + return !classes.empty(); +} + +std::vector ObjCMetadata::getClassNames() const { + parse(); + std::vector names; + names.reserve(classes.size()); + for (unsigned int n = 0; n < classes.size(); n++) + names.push_back(classes[n]->name); + return names; +} + +bool ObjCMetadata::hasClass(const std::string& name) const { + parse(); + for (unsigned int n = 0; n < classes.size(); n++) { + if (classes[n]->name == name) + return true; + } + return false; +} + +std::vector ObjCMetadata::getCategoryNames() const { + parse(); + std::vector names; + names.reserve(categories.size()); + for (unsigned int n = 0; n < categories.size(); n++) { + std::string name = categories[n]->className; + name += "("; + name += categories[n]->name; + name += ")"; + names.push_back(name); + } + return names; +} + +std::string ObjCMetadata::getCategoryDefinition(const std::string& className, + const std::string& category) const { + parse(); + for (unsigned int n = 0; n < categories.size(); n++) { + if (categories[n]->name == category && categories[n]->className == className) + return renderCategory(*categories[n]); + } + return std::string(); +} + +std::vector ObjCMetadata::getProtocolNames() const { + parse(); + std::vector names; + names.reserve(protocols.size()); + for (unsigned int n = 0; n < protocols.size(); n++) + names.push_back(protocols[n]->name); + return names; +} + +bool ObjCMetadata::hasProtocol(const std::string& name) const { + parse(); + for (unsigned int n = 0; n < protocols.size(); n++) { + if (protocols[n]->name == name) + return true; + } + return false; +} + +std::string ObjCMetadata::getProtocolDefinition(const std::string& name) const { + parse(); + for (unsigned int n = 0; n < protocols.size(); n++) { + if (protocols[n]->name == name) + return renderProtocol(*protocols[n]); + } + return std::string(); +} + +std::string ObjCMetadata::getDefinition(const std::string& name, bool metaclass) const { + parse(); + for (unsigned int n = 0; n < classes.size(); n++) { + if (classes[n]->name == name) + return render(*classes[n], metaclass); + } + + // A "_OBJC_PROTOCOL_$_*" symbol names a protocol rather than a class, and + // the two share the name space of the symbol table. + if (!metaclass) { + std::string protocol = getProtocolDefinition(name); + if (!protocol.empty()) + return protocol; + } + return std::string(); +} + +std::string ObjCMetadata::getDefinitions() const { + parse(); + std::string result; + for (unsigned int n = 0; n < classes.size(); n++) { + if (n > 0) + result += "\n"; + result += render(*classes[n], false); + } + return result; +} + +std::string ObjCMetadata::getAllDefinitions() const { + parse(); + std::string result = getDefinitions(); + + for (unsigned int n = 0; n < categories.size(); n++) { + if (!result.empty()) + result += "\n"; + result += renderCategory(*categories[n]); + } + + for (unsigned int n = 0; n < protocols.size(); n++) { + if (!result.empty()) + result += "\n"; + result += renderProtocol(*protocols[n]); + } + + return result; +} diff --git a/MachO/objcmetadata.h b/MachO/objcmetadata.h new file mode 100644 index 0000000..e38d20e --- /dev/null +++ b/MachO/objcmetadata.h @@ -0,0 +1,165 @@ +#ifndef OBJCMETADATA_H +#define OBJCMETADATA_H + +#include "macho_global.h" +#include "machofixups.h" + +#include +#include +#include + +class MachOArchitecture; + +/** + * Reads the Objective-C metadata of a Mach-O image -- __objc_classlist and + * everything it points at -- and renders it as source declarations. + * + * Everything comes out of the image itself: no external tool is run, so it + * works for any file on disk, including one built for another platform. An + * image that only exists inside the dyld shared cache is read out of the + * mapping dyld made of it, which is also the only way to get at a system + * library that has no file of its own any more. + */ +class EXPORT ObjCMetadata +{ +public: + explicit ObjCMetadata(const MachOArchitecture& architecture); + ~ObjCMetadata(); + + /** True when the image has an Objective-C class list at all. */ + bool hasClasses() const; + + /** The names of all classes, in the order of the class list. */ + std::vector getClassNames() const; + + /** True when the image defines a class with that name. */ + bool hasClass(const std::string& name) const; + + /** + * The "@interface ... @end" declaration of one class, or an empty string + * when the image has no such class. With `metaclass` the class methods are + * listed instead of the instance methods. + */ + std::string getDefinition(const std::string& name, bool metaclass) const; + + /** The declarations of every class, separated by a blank line. */ + std::string getDefinitions() const; + + /** The names of the categories of the image, as "Class(Category)". */ + std::vector getCategoryNames() const; + + /** The "@interface Class (Category)" declaration of one category. */ + std::string getCategoryDefinition(const std::string& className, + const std::string& category) const; + + /** The names of the protocols the image declares itself. */ + std::vector getProtocolNames() const; + + /** True when the image declares a protocol with that name. */ + bool hasProtocol(const std::string& name) const; + + /** The "@protocol ... @end" declaration of one protocol. */ + std::string getProtocolDefinition(const std::string& name) const; + + /** + * Every declaration of the image: classes, then categories, then the + * protocols it declares itself, separated by a blank line. + */ + std::string getAllDefinitions() const; + +private: + struct Class; + struct Category; + struct Protocol; + struct Method; + struct Ivar; + struct Property; + + // Not copyable: the parsed classes are owned. + ObjCMetadata(const ObjCMetadata&); + ObjCMetadata& operator=(const ObjCMetadata&); + + void parse() const; + bool readClass(uint64_t address, Class& result) const; + bool readCategory(uint64_t address, Category& result) const; + bool readProtocol(uint64_t address, Protocol& result) const; + void readMethods(uint64_t listAddress, std::vector& result) const; + + /** Number of entries a method / property list header claims, or 0. */ + uint32_t readListCount(uint64_t listAddress) const; + + /** The class methods, i.e. the instance methods of the metaclass. */ + void readMetaclassMethods(uint64_t classAddress, std::vector& result) const; + void readIvars(uint64_t listAddress, std::vector& result) const; + void readProperties(uint64_t listAddress, std::vector& result) const; + void readProtocols(uint64_t listAddress, std::vector& result) const; + std::string readString(uint64_t address) const; + std::string readClassName(uint64_t classAddress) const; + + /** + * Name of the class a classref points at, whatever way the pointer is + * encoded: a bind, a pointer into a mapped image, or a plain address. + */ + std::string readClassReferenceName(uint64_t slotAddress) const; + + std::string render(const Class& info, bool metaclass) const; + std::string renderCategory(const Category& info) const; + std::string renderProtocol(const Protocol& info) const; + + /** + * "@property (nonatomic) NSString *name;" lines, one per property. With + * `classProperty` the class keyword is added, as in + * "@property (class, readonly) NSString *name;". + */ + void appendProperties(std::string& result, const std::vector& properties, + bool classProperty) const; + + /** "- (void)foo;" / "+ (id)bar;" lines, one per method. */ + void appendMethods(std::string& result, const std::vector& methods, + bool classMethod) const; + + /** + * Address of the class_ro_t of the class at `classAddress`, in the unslid + * address space of the image. + */ + uint64_t classRoAddress(uint64_t classAddress) const; + + /** + * Unslid address of the class_ro_t behind a class_data_bits_t::bits value + * of an image that dyld mapped into this process. + */ + uint64_t decodeMappedClassData(uint64_t bits) const; + + /** + * Method lists of an image that dyld mapped into this process, taken from + * the runtime rather than from the image. Returns false when the runtime + * does not know the class. + */ + bool readMethodsFromRuntime(uint64_t processClassAddress, bool metaclass, + std::vector& result) const; + + /** Protocol names of such a class, taken from the runtime. */ + bool readProtocolsFromRuntime(uint64_t processClassAddress, + std::vector& result) const; + + /** + * Method list of one protocol, taken from the runtime. Returns false when + * the runtime does not know the protocol. + */ + bool readProtocolFromRuntime(const std::string& name, Protocol& result) const; + + /** True when a protocol of that name was already read. */ + bool hasProtocolNamed(const std::string& name) const; + + /** The image as dyld mapped it, or 0 when it was read from disk. */ + const uint8_t* mappedBase() const; + + const MachOArchitecture& architecture; + MachOFixups fixups; + mutable bool parsed; + mutable std::vector classes; + mutable std::vector categories; + mutable std::vector protocols; +}; + +#endif // OBJCMETADATA_H diff --git a/MachO/objctypedecoder.cpp b/MachO/objctypedecoder.cpp new file mode 100644 index 0000000..34795d3 --- /dev/null +++ b/MachO/objctypedecoder.cpp @@ -0,0 +1,279 @@ +#include "objctypedecoder.h" + +#include +#include + +namespace { + +bool isDigit(char character) { + return character >= '0' && character <= '9'; +} + +// r = const, n = in, N = out, o = inout, O = bycopy, R = byref, V = oneway. +// None of those is a type code itself. +bool isQualifier(char character) { + return character == 'r' || character == 'n' || character == 'N' || character == 'o' || + character == 'O' || character == 'R' || character == 'V'; +} + +/** The frame size / offset digits that may follow a type. */ +void skipDigits(const std::string& encoding, size_t& position) { + while (position < encoding.size() && isDigit(encoding[position])) + position++; +} + +/** + * Skips the body of a struct or union whose opening brace was already + * consumed, leaving `position` behind the matching closing brace. + */ +void skipBody(const std::string& encoding, size_t& position, char open, char close) { + int depth = 0; + while (position < encoding.size()) { + char character = encoding[position]; + if (character == open) { + depth++; + } else if (character == close) { + if (depth == 0) { + position++; + return; + } + depth--; + } + position++; + } +} + +/** Everything up to the field list ('=') or the closing brace. */ +std::string readName(const std::string& encoding, size_t& position, char close) { + std::string name; + while (position < encoding.size() && encoding[position] != '=' && encoding[position] != close) { + name.push_back(encoding[position]); + position++; + } + return name; +} + +ObjCType applyQualifiers(const ObjCType& type, const std::string& qualifiers) { + if (qualifiers.empty()) + return type; + return ObjCType(qualifiers + type.prefix, type.suffix); +} + +std::string argumentName(size_t index) { + char buffer[32]; + snprintf(buffer, sizeof(buffer), "arg%lu", (unsigned long)index); + return std::string(buffer); +} + +} // namespace + +std::string ObjCType::declaration(const std::string& name) const { + std::string result = prefix + name + suffix; + // Without a name the type would otherwise end in the space of the prefix. + while (name.empty() && !result.empty() && result[result.size() - 1] == ' ') + result.erase(result.size() - 1); + return result; +} + +ObjCType ObjCTypeDecoder::decodeType(const std::string& encoding, size_t& position) { + std::string qualifiers; + while (position < encoding.size() && isQualifier(encoding[position])) { + if (encoding[position] == 'r') + qualifiers = "const "; + position++; + } + if (position >= encoding.size()) + return ObjCType(); + + char code = encoding[position]; + + switch (code) { + case 'c': position++; return applyQualifiers(ObjCType("char ", ""), qualifiers); + case 'C': position++; return applyQualifiers(ObjCType("unsigned char ", ""), qualifiers); + case 's': position++; return applyQualifiers(ObjCType("short ", ""), qualifiers); + case 'S': position++; return applyQualifiers(ObjCType("unsigned short ", ""), qualifiers); + case 'i': position++; return applyQualifiers(ObjCType("int ", ""), qualifiers); + case 'I': position++; return applyQualifiers(ObjCType("unsigned int ", ""), qualifiers); + case 'l': position++; return applyQualifiers(ObjCType("long ", ""), qualifiers); + case 'L': position++; return applyQualifiers(ObjCType("unsigned long ", ""), qualifiers); + case 'q': position++; return applyQualifiers(ObjCType("long long ", ""), qualifiers); + case 'Q': position++; return applyQualifiers(ObjCType("unsigned long long ", ""), qualifiers); + case 'f': position++; return applyQualifiers(ObjCType("float ", ""), qualifiers); + case 'd': position++; return applyQualifiers(ObjCType("double ", ""), qualifiers); + case 'D': position++; return applyQualifiers(ObjCType("long double ", ""), qualifiers); + case 'B': position++; return applyQualifiers(ObjCType("bool ", ""), qualifiers); + case 'v': position++; return applyQualifiers(ObjCType("void ", ""), qualifiers); + case '*': position++; return applyQualifiers(ObjCType("char *", ""), qualifiers); + case ':': position++; return applyQualifiers(ObjCType("SEL ", ""), qualifiers); + case '#': position++; return applyQualifiers(ObjCType("Class ", ""), qualifiers); + case '?': position++; return applyQualifiers(ObjCType("id ", ""), qualifiers); + + case '@': { + position++; + if (position < encoding.size() && encoding[position] == '?') { + position++; + // The signature of a block is not part of the encoding. + return applyQualifiers(ObjCType("id /* block */ ", ""), qualifiers); + } + if (position < encoding.size() && encoding[position] == '"') { + position++; + std::string name; + while (position < encoding.size() && encoding[position] != '"') + name.push_back(encoding[position++]); + if (position < encoding.size()) + position++; + if (name.empty() || name == "?") + return applyQualifiers(ObjCType("id ", ""), qualifiers); + return applyQualifiers(ObjCType(name + " *", ""), qualifiers); + } + return applyQualifiers(ObjCType("id ", ""), qualifiers); + } + + case '^': { + position++; + if (position < encoding.size() && encoding[position] == '?') { + position++; + return applyQualifiers(ObjCType("void *", ""), qualifiers); + } + ObjCType pointee = decodeType(encoding, position); + if (pointee.isEmpty()) + return applyQualifiers(ObjCType("void *", ""), qualifiers); + return applyQualifiers(ObjCType(pointee.prefix + "*", pointee.suffix), qualifiers); + } + + case 'b': { + position++; + skipDigits(encoding, position); + return applyQualifiers(ObjCType("unsigned int ", ""), qualifiers); + } + + case 'j': { + // _Complex: the encoding names the underlying type afterwards. + position++; + ObjCType component = decodeType(encoding, position); + return applyQualifiers(component, qualifiers); + } + + case '{': + case '(': { + char close = (code == '{') ? '}' : ')'; + std::string keyword = (code == '{') ? "struct" : "union"; + position++; + std::string name = readName(encoding, position, close); + if (!name.empty() && name != "?") { + skipBody(encoding, position, code, close); + return applyQualifiers(ObjCType(name + " ", ""), qualifiers); + } + // A struct or union without a name of its own (the encoding uses + // '?') is written out inline so that the declaration stays valid. + std::string body = decodeAnonymousBody(encoding, position, close); + if (body.empty()) + return applyQualifiers(ObjCType(keyword + " ", ""), qualifiers); + return applyQualifiers(ObjCType(keyword + " { " + body + " } ", ""), qualifiers); + } + + case '[': { + position++; + std::string count; + while (position < encoding.size() && isDigit(encoding[position])) + count.push_back(encoding[position++]); + ObjCType element = decodeType(encoding, position); + if (position < encoding.size() && encoding[position] == ']') + position++; + if (element.isEmpty()) + return applyQualifiers(ObjCType("", "[" + count + "]"), qualifiers); + return applyQualifiers(ObjCType(element.prefix, "[" + count + "]" + element.suffix), qualifiers); + } + + default: + position++; + return applyQualifiers(ObjCType("id ", ""), qualifiers); + } +} + +std::string ObjCTypeDecoder::decodeAnonymousBody(const std::string& encoding, size_t& position, char close) { + std::string body; + if (position < encoding.size() && encoding[position] == '=') + position++; + + while (position < encoding.size() && encoding[position] != close) { + std::string fieldName; + if (encoding[position] == '"') { + position++; + while (position < encoding.size() && encoding[position] != '"') + fieldName.push_back(encoding[position++]); + if (position < encoding.size()) + position++; + } + ObjCType field = decodeType(encoding, position); + if (field.isEmpty()) + break; + if (!body.empty()) + body += " "; + body += field.declaration(fieldName); + body += ";"; + } + if (position < encoding.size() && encoding[position] == close) + position++; + return body; +} + +std::string ObjCTypeDecoder::decodeIvar(const std::string& encoding, const std::string& name) { + size_t position = 0; + ObjCType type = decodeType(encoding, position); + if (type.isEmpty()) { + // A few ivars carry no type encoding at all; "id" is the safe guess. + if (encoding.empty()) + return "id " + name; + return encoding + " " + name; + } + return type.declaration(name); +} + +std::string ObjCTypeDecoder::decodeMethod(const std::string& selector, const std::string& encoding, bool isClassMethod) { + if (encoding.empty()) + return std::string(); + + size_t position = 0; + ObjCType returnType = decodeType(encoding, position); + // An unreadable return type is no reason to hide the method. + if (returnType.isEmpty()) + returnType = ObjCType("id ", ""); + + skipDigits(encoding, position); + // The first two arguments are always self and _cmd. + decodeType(encoding, position); + skipDigits(encoding, position); + decodeType(encoding, position); + skipDigits(encoding, position); + std::vector parts; + std::string current; + for (size_t n = 0; n < selector.size(); n++) { + if (selector[n] == ':') { + parts.push_back(current); + current.clear(); + } else { + current.push_back(selector[n]); + } + } + + std::string result = isClassMethod ? "+ (" : "- ("; + result += returnType.declaration(""); + result += ")"; + + if (parts.empty()) { + result += selector; + return result; + } + + for (size_t n = 0; n < parts.size(); n++) { + ObjCType argument = decodeType(encoding, position); + skipDigits(encoding, position); + if (argument.isEmpty()) + argument = ObjCType("id ", ""); + if (n > 0) + result += " "; + result += parts[n] + ":(" + argument.declaration(argumentName(n + 1)) + ")"; + } + return result; +} diff --git a/MachO/objctypedecoder.h b/MachO/objctypedecoder.h new file mode 100644 index 0000000..f653296 --- /dev/null +++ b/MachO/objctypedecoder.h @@ -0,0 +1,62 @@ +#ifndef OBJCTYPEDECODER_H +#define OBJCTYPEDECODER_H + +#include "macho_global.h" + +#include +#include + +/** + * Turns Objective-C type encodings into something readable. + * + * A type is decoded into a prefix and a suffix so that a declaration can be + * built as `prefix + name + suffix`. That is what makes `char _name[32]` + * possible, which a plain string concatenation could not express: + * + * "i" -> prefix "int ", suffix "" + * "^i" -> prefix "int *", suffix "" + * "[32c]" -> prefix "char ", suffix "[32]" + * "@\"NSString\"" -> prefix "NSString *", suffix "" + */ +class EXPORT ObjCType +{ +public: + ObjCType() {} + ObjCType(const std::string& aPrefix, const std::string& aSuffix) : prefix(aPrefix), suffix(aSuffix) {} + + /** Builds the declaration, e.g. "char _name[32]". */ + std::string declaration(const std::string& name) const; + + bool isEmpty() const { return prefix.empty() && suffix.empty(); } + + std::string prefix; + std::string suffix; +}; + +class EXPORT ObjCTypeDecoder +{ +public: + /** + * Decodes the type starting at `position`, which is advanced past it. + * An empty result means the encoding could not be understood. + */ + static ObjCType decodeType(const std::string& encoding, size_t& position); + + /** + * Decodes the field list of a struct or union that has no name of its own + * ("{?={_NSRange=QQ}QQ}"). Such a type is rendered inline, which keeps the + * declaration valid C. + */ + static std::string decodeAnonymousBody(const std::string& encoding, size_t& position, char close); + + /** Decodes an ivar type encoding ("[32c]") into "char _name[32]". */ + static std::string decodeIvar(const std::string& encoding, const std::string& name); + + /** + * Decodes a method type encoding such as "v32@0:8q16@24" into a readable + * declaration such as "- (void)doThing:(long long)arg1 with:(id)arg2". + */ + static std::string decodeMethod(const std::string& selector, const std::string& encoding, bool isClassMethod); +}; + +#endif // OBJCTYPEDECODER_H diff --git a/MachO/segmentcommand.cpp b/MachO/segmentcommand.cpp new file mode 100644 index 0000000..6904978 --- /dev/null +++ b/MachO/segmentcommand.cpp @@ -0,0 +1,118 @@ +#include "segmentcommand.h" +#include "machoheader.h" +#include "machofile.h" + +#include + +#include + +namespace { + +/** Segment and section names are fixed size and not necessarily terminated. */ +std::string fixedString(const char* data, size_t size) { + size_t length = 0; + while (length < size && data[length] != '\0') + length++; + return std::string(data, length); +} + +} // namespace + +Section::Section() : address(0), size(0), offset(0) { +} + +Section::Section(const char* segmentName, const char* sectionName, uint64_t address, uint64_t size, uint32_t offset) : + segmentName(fixedString(segmentName, 16)), name(fixedString(sectionName, 16)), + address(address), size(size), offset(offset) +{ +} + +SegmentCommand::SegmentCommand(MachOHeader* header) : + LoadCommand(header), vmAddress(0), vmSize(0), fileOffset(0), fileSize(0), commandSize(0) +{ + // The file is positioned on the command itself, so the whole structure can + // be read in one go. + uint32_t cmd = file.readUint32(); + if (cmd == LC_SEGMENT_64) { + struct segment_command_64 segment; + file.seek(offset); + file.readBytes((char*)&segment, sizeof(segment)); + name = fixedString(segment.segname, sizeof(segment.segname)); + vmAddress = file.getUint64(segment.vmaddr); + vmSize = file.getUint64(segment.vmsize); + fileOffset = file.getUint64(segment.fileoff); + fileSize = file.getUint64(segment.filesize); + commandSize = file.getUint32(segment.cmdsize); + readSections(file.getUint32(segment.nsects), true); + } else { + struct segment_command segment; + file.seek(offset); + file.readBytes((char*)&segment, sizeof(segment)); + name = fixedString(segment.segname, sizeof(segment.segname)); + vmAddress = file.getUint32(segment.vmaddr); + vmSize = file.getUint32(segment.vmsize); + fileOffset = file.getUint32(segment.fileoff); + fileSize = file.getUint32(segment.filesize); + commandSize = file.getUint32(segment.cmdsize); + readSections(file.getUint32(segment.nsects), false); + } +} + +void SegmentCommand::readSections(unsigned int numberOfSections, bool is64Bit) { + unsigned int structureSize = is64Bit ? sizeof(struct segment_command_64) : sizeof(struct segment_command); + unsigned int sectionSize = is64Bit ? sizeof(struct section_64) : sizeof(struct section); + + // A malformed command could claim an absurd number of sections; the + // remaining bytes of the command are the only ones that can hold them. + if (commandSize > structureSize) { + unsigned int available = (commandSize - structureSize) / sectionSize; + if (numberOfSections > available) + numberOfSections = available; + } else { + numberOfSections = 0; + } + + for (unsigned int n = 0; n < numberOfSections; n++) { + if (is64Bit) { + struct section_64 section; + file.readBytes((char*)§ion, sizeof(section)); + sections.push_back(Section(section.segname, section.sectname, + file.getUint64(section.addr), file.getUint64(section.size), + file.getUint32(section.offset))); + } else { + struct section section; + file.readBytes((char*)§ion, sizeof(section)); + sections.push_back(Section(section.segname, section.sectname, + file.getUint32(section.addr), file.getUint32(section.size), + file.getUint32(section.offset))); + } + } +} + +bool SegmentCommand::containsAddress(uint64_t address) const { + // Only the part that is backed by file bytes can be read; a segment may be + // larger in memory than in the file (__PAGEZERO, zero filled tails). + return fileSize > 0 && address >= vmAddress && address < vmAddress + fileSize; +} + +long long SegmentCommand::getFileOffsetForAddress(uint64_t address) const { + if (!containsAddress(address)) + return -1; + return (long long)(fileOffset + (address - vmAddress)); +} + +const Section* SegmentCommand::findSection(const std::string& segmentName, const std::string& sectionName) const { + for (unsigned int n = 0; n < sections.size(); n++) { + if (sections[n].getName() == sectionName && sections[n].getSegmentName() == segmentName) + return §ions[n]; + } + return 0; +} + +const Section* SegmentCommand::findSection(const std::string& sectionName) const { + for (unsigned int n = 0; n < sections.size(); n++) { + if (sections[n].getName() == sectionName) + return §ions[n]; + } + return 0; +} diff --git a/MachO/segmentcommand.h b/MachO/segmentcommand.h new file mode 100644 index 0000000..974d1db --- /dev/null +++ b/MachO/segmentcommand.h @@ -0,0 +1,79 @@ +#ifndef SEGMENTCOMMAND_H +#define SEGMENTCOMMAND_H + +#include "loadcommand.h" + +#include +#include + +/** + * One section of a segment: where it lives in the address space and where the + * very same bytes live in the file. + */ +class Section +{ +public: + Section(); + Section(const char* segmentName, const char* sectionName, uint64_t address, uint64_t size, uint32_t offset); + + const std::string& getSegmentName() const { return segmentName; } + const std::string& getName() const { return name; } + uint64_t getAddress() const { return address; } + uint64_t getSize() const { return size; } + /** Offset relative to the beginning of the Mach-O image. */ + uint32_t getOffset() const { return offset; } + bool contains(uint64_t vmAddress) const { return vmAddress >= address && vmAddress < address + size; } + +private: + std::string segmentName; + std::string name; + uint64_t address; + uint64_t size; + uint32_t offset; +}; + +/** + * LC_SEGMENT / LC_SEGMENT_64. Keeps the segment range plus the sections it + * contains, which is everything needed to translate an address into a file + * offset (and the other way round). + */ +class EXPORT SegmentCommand : public LoadCommand +{ +public: + SegmentCommand(MachOHeader* header); + + virtual unsigned int getSize() const { return commandSize; } + + const std::string& getName() const { return name; } + uint64_t getVMAddress() const { return vmAddress; } + uint64_t getVMSize() const { return vmSize; } + uint64_t getFileOffset() const { return fileOffset; } + uint64_t getFileSize() const { return fileSize; } + + unsigned int getNumberOfSections() const { return (unsigned int)sections.size(); } + const Section& getSection(unsigned int index) const { return sections[index]; } + + /** The first section matching both names, or 0. */ + const Section* findSection(const std::string& segmentName, const std::string& sectionName) const; + /** The first section with that name, in any segment, or 0. */ + const Section* findSection(const std::string& sectionName) const; + + /** True when the address is backed by bytes in the file. */ + bool containsAddress(uint64_t vmAddress) const; + + /** File offset of `vmAddress`, relative to the beginning of the Mach-O image. */ + long long getFileOffsetForAddress(uint64_t vmAddress) const; + +private: + void readSections(unsigned int numberOfSections, bool is64Bit); + + std::string name; + uint64_t vmAddress; + uint64_t vmSize; + uint64_t fileOffset; + uint64_t fileSize; + unsigned int commandSize; + std::vector
sections; +}; + +#endif // SEGMENTCOMMAND_H diff --git a/MachO/symboltableentry.cpp b/MachO/symboltableentry.cpp index ffbc361..53f1a1f 100644 --- a/MachO/symboltableentry.cpp +++ b/MachO/symboltableentry.cpp @@ -2,6 +2,123 @@ #include "macho.h" #include "machofile.h" +#include +#include + +namespace { + +typedef char* (*SwiftDemangleFunction)(const char* mangledName, size_t mangledNameLength, + char* outputBuffer, size_t* outputBufferSize, + uint32_t flags); + +/** + * The demangler of the Swift runtime, loaded on demand. + * + * A name is demangled with it only when a Swift name turns up, so an image + * without Swift code never pays for the runtime. The host process is asked + * first, because an application that has Swift in it already has the runtime. + */ +SwiftDemangleFunction loadSwiftDemangle() { + SwiftDemangleFunction demangle = + (SwiftDemangleFunction)dlsym(RTLD_DEFAULT, "swift_demangle"); + if (demangle != 0) + return demangle; + + void* runtime = dlopen("/usr/lib/swift/libswiftCore.dylib", RTLD_LAZY | RTLD_LOCAL); + if (runtime == 0) + return 0; + return (SwiftDemangleFunction)dlsym(runtime, "swift_demangle"); +} + +SwiftDemangleFunction swiftDemangle() { + static SwiftDemangleFunction demangle = loadSwiftDemangle(); + return demangle; +} + +/** True for the prefixes of the Swift mangling: "$s", "$S" and the older "_T". */ +bool isSwiftMangledName(const std::string& name) { + if (name.size() < 2) + return false; + return name.compare(0, 2, "$s") == 0 || name.compare(0, 2, "$S") == 0 || + name.compare(0, 2, "_T") == 0; +} + +/** + * The prefixes the Objective-C metadata symbols are named with, and what each + * one stands for. + * + * The names come from the assembler, so they carry the leading underscore of + * the C naming convention -- and the protocol ones carry two of them, which is + * how every image measured so far spells them. Both spellings are listed, so + * that an image spelling them the other way is read the same. + */ +const struct { + const char* prefix; + SymbolTableEntry::Kind kind; +} kObjCSymbolPrefixes[] = { + { "_OBJC_CLASS_$_", SymbolTableEntry::KindObjCClass }, + { "_OBJC_METACLASS_$_", SymbolTableEntry::KindObjCMetaclass }, + { "_OBJC_PROTOCOL_$_", SymbolTableEntry::KindObjCProtocol }, + { "__OBJC_PROTOCOL_$_", SymbolTableEntry::KindObjCProtocol }, + { "_OBJC_IVAR_$_", SymbolTableEntry::KindObjCIvar }, +}; + +const unsigned int kObjCSymbolPrefixCount = sizeof(kObjCSymbolPrefixes) / sizeof(*kObjCSymbolPrefixes); + +/** The kind of an Objective-C metadata symbol, or NumKinds for any other name. */ +SymbolTableEntry::Kind objcSymbolKind(const std::string& name) { + for (unsigned int n = 0; n < kObjCSymbolPrefixCount; n++) { + if (name.compare(0, strlen(kObjCSymbolPrefixes[n].prefix), kObjCSymbolPrefixes[n].prefix) == 0) + return kObjCSymbolPrefixes[n].kind; + } + + // Everything else the runtime emits is named "_OBJC__$_", the + // exception type information of a class for instance. The tables the + // compiler keeps inside an object file carry one underscore more. + if (name.compare(0, 6, "_OBJC_") == 0 || name.compare(0, 7, "__OBJC_") == 0) + return SymbolTableEntry::KindObjCOther; + + return SymbolTableEntry::NumKinds; +} + +/** + * The class, protocol or ivar name a metadata symbol stands for, or an empty + * string when the symbol is not one of the metadata symbols. + */ +std::string objcSymbolName(const std::string& name) { + for (unsigned int n = 0; n < kObjCSymbolPrefixCount; n++) { + size_t length = strlen(kObjCSymbolPrefixes[n].prefix); + if (name.compare(0, length, kObjCSymbolPrefixes[n].prefix) == 0) + return name.substr(length); + } + return std::string(); +} + +/** + * The readable form of a Swift name, or an empty string. + * + * The demangler writes into a buffer of the caller's, and a name with a lot of + * generics in it needs more room than the first size offered, so a second, + * larger one is tried before giving up. + */ +std::string demangleSwiftName(const std::string& name) { + SwiftDemangleFunction demangle = swiftDemangle(); + if (demangle == 0) + return std::string(); + + static const size_t sizes[] = { 4096, 65536 }; + for (unsigned int n = 0; n < sizeof(sizes) / sizeof(*sizes); n++) { + std::vector buffer(sizes[n]); + size_t size = buffer.size(); + char* result = demangle(name.c_str(), name.size(), &buffer[0], &size, 0); + if (result != 0) + return std::string(result); + } + return std::string(); +} + +} // namespace + SymbolTableEntry::SymbolTableEntry(MachOFile& file, char* stringTable) : file(file), stringTable(stringTable) { @@ -13,17 +130,64 @@ SymbolTableEntry::~SymbolTableEntry() { std::string SymbolTableEntry::getName(bool shouldDemangle) const { const char *name = getInternalName(); - std::string result = name; - if (shouldDemangle) { - int status = 0; - // Convert real name to readable string. +1 to skip the leading underscore. - char *realName = abi::__cxa_demangle(name + 1, nullptr, nullptr, &status); - if (realName != nullptr) - result = realName; - free(realName); + if (!shouldDemangle) + return name; + + // The metadata symbols of the Objective-C runtime spell out what they name, + // and the name of the class, protocol or ivar is the part worth reading: + // "_OBJC_CLASS_$_NSString" reads "NSString". + std::string objcName = objcSymbolName(name); + if (!objcName.empty()) + return objcName; + + // A name in the symbol table carries the leading underscore of the C naming + // convention, and that underscore is not part of the name. What is left is + // either mangled -- and then a demangler says what it is -- or a C name, + // which is what it is once the underscore is gone. + if (name[0] != '_' || name[1] == '\0') + return name; + + std::string mangled = name + 1; + + // C++ first: the Itanium demangler is the one that ships with the C++ + // library, and it is not confused by anything else. + int status = 0; + char *cxxName = abi::__cxa_demangle(mangled.c_str(), nullptr, nullptr, &status); + if (cxxName != nullptr) { + std::string result = cxxName; + free(cxxName); + return result; } - return result; + + // Swift names have a demangler of their own, and it is not the C++ one. + if (isSwiftMangledName(mangled)) { + std::string swiftName = demangleSwiftName(mangled); + if (!swiftName.empty()) + return swiftName; + } + + return mangled; +} + +SymbolTableEntry::Kind SymbolTableEntry::getKind() const { + std::string name = getInternalName(); + + Kind objc = objcSymbolKind(name); + if (objc != NumKinds) + return objc; + + // Both manglings sit behind the leading underscore of the C naming + // convention, so it is dropped before they are looked for. + if (name.size() > 1 && name[0] == '_') { + std::string mangled = name.substr(1); + if (mangled.compare(0, 2, "_Z") == 0) + return KindCXX; + if (isSwiftMangledName(mangled)) + return KindSwift; + } + + return KindC; } SymbolTableEntry::Type SymbolTableEntry::getType() const { diff --git a/MachO/symboltableentry.h b/MachO/symboltableentry.h index c696fba..29114fc 100644 --- a/MachO/symboltableentry.h +++ b/MachO/symboltableentry.h @@ -2,6 +2,7 @@ #define SYMBOLTABLEENTRY_H #include "macho_global.h" +#include #include class MachOFile; @@ -10,6 +11,16 @@ class EXPORT SymbolTableEntry public: SymbolTableEntry(MachOFile& file, char* stringTable); virtual ~SymbolTableEntry(); + + /** + * The name of the symbol, demangled when asked for. + * + * Demangling is what makes a name readable: the leading underscore of the C + * naming convention goes, the mangled C++ and Swift names are turned into + * what they were written as, and the Objective-C metadata symbols lose the + * prefix that spells out their kind, so that "_OBJC_CLASS_$_NSString" reads + * "NSString". + */ std::string getName(bool shouldDemangle) const; enum Type { @@ -22,9 +33,38 @@ class EXPORT SymbolTableEntry }; Type getType() const; + + /** + * What the symbol is, as far as its name says. + * + * The symbol table records no language, and for most symbols the name is all + * there is to go on: the prefixes of the two manglings and of the + * Objective-C metadata are what tell the kinds apart. + */ + enum Kind { + KindC = 0, + KindCXX, + KindSwift, + KindObjCClass, + KindObjCMetaclass, + KindObjCProtocol, + KindObjCIvar, + KindObjCOther, + NumKinds + }; + + Kind getKind() const; virtual unsigned int getInternalType() const = 0; virtual const char* getInternalName() const = 0; + /** + * The ordinal of the library an imported symbol is bound to, for symbols + * that use the two level namespace: 1 is the first library of the load + * commands, 2 the second, and so on. Zero when the symbol is not bound to + * one library, which is the case for everything the image defines itself. + */ + virtual unsigned int getLibraryOrdinal() const = 0; + protected: MachOFile& file; char* stringTable; diff --git a/MachO/symboltableentry32.cpp b/MachO/symboltableentry32.cpp index fdd5d5a..b3d6143 100644 --- a/MachO/symboltableentry32.cpp +++ b/MachO/symboltableentry32.cpp @@ -14,4 +14,8 @@ unsigned int SymbolTableEntry32::getInternalType() const { return entry->n_type; } +unsigned int SymbolTableEntry32::getLibraryOrdinal() const { + return GET_LIBRARY_ORDINAL(file.getUint16(entry->n_desc)); +} + diff --git a/MachO/symboltableentry32.h b/MachO/symboltableentry32.h index 668cc50..c07994c 100644 --- a/MachO/symboltableentry32.h +++ b/MachO/symboltableentry32.h @@ -9,6 +9,7 @@ class SymbolTableEntry32 : public SymbolTableEntry SymbolTableEntry32(MachOFile& file, struct nlist* entry, char* stringTable); virtual const char* getInternalName() const; virtual unsigned int getInternalType() const; + virtual unsigned int getLibraryOrdinal() const; private: struct nlist* entry; }; diff --git a/MachO/symboltableentry64.cpp b/MachO/symboltableentry64.cpp index e68620b..245b94c 100644 --- a/MachO/symboltableentry64.cpp +++ b/MachO/symboltableentry64.cpp @@ -14,3 +14,7 @@ unsigned int SymbolTableEntry64::getInternalType() const { return entry->n_type; } +unsigned int SymbolTableEntry64::getLibraryOrdinal() const { + return GET_LIBRARY_ORDINAL(file.getUint16(entry->n_desc)); +} + diff --git a/MachO/symboltableentry64.h b/MachO/symboltableentry64.h index 9f1bca9..459ba6b 100644 --- a/MachO/symboltableentry64.h +++ b/MachO/symboltableentry64.h @@ -9,6 +9,7 @@ class SymbolTableEntry64 : public SymbolTableEntry SymbolTableEntry64(MachOFile& file, struct nlist_64* entry, char* stringTable); virtual const char* getInternalName() const; virtual unsigned int getInternalType() const; + virtual unsigned int getLibraryOrdinal() const; private: struct nlist_64* entry; }; diff --git a/README.md b/README.md index d8cb6a8..8d8d9a6 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,195 @@ -[![License](https://img.shields.io/github/license/kwin/macdependency)](https://www.gnu.org/licenses/gpl-3.0.en.html) -[![Build Status](https://github.com/kwin/macdependency/actions/workflows/build.yml/badge.svg)](https://github.com/kwin/macdependency/actions/workflows/maven.yml) +![License](https://img.shields.io/github/license/kwin/macdependency) -MacDependency shows all dependent libraries and frameworks of a given executable, dynamic library or framework on Mac OS X. It is a GUI replacement for the otool command, and provides almost the same functionality as the Dependency Walker (http://www.dependencywalker.com) on Windows. +![Build Status](https://github.com/kwin/macdependency/actions/workflows/build.yml/badge.svg) + +MacDependency shows all dependent libraries and frameworks of a given executable, dynamic library or framework on Mac OS X. It is a GUI replacement for the otool command, and provides almost the same functionality as the Dependency Walker () on Windows. More information available in the [Wiki](../../wiki). ![Screenshot](images/macdependency.png) + +## This fork + +This repository is a fork of [kwin/macdependency](https://github.com/kwin/macdependency). +It keeps everything the original does and adds: + +- the Objective-C metadata of an image, printed as a declaration; +- the system libraries that exist only in the **dyld shared cache**; +- a **Kind** column in the symbol table, with filters on the headers of the + Type and Kind columns; +- a **File Kind** column in the dependency tree, next to the renamed **Link Type** column; +- a log that is readable in dark mode and read-only. + +Below, **this fork** marks a feature that only exists here. + +## What it does + +- Opens an executable, a dynamic library or a framework and shows everything it + depends on as a tree, with the install name, how the dependency is linked, what + the file itself is, and the current and compatible version of every entry. +- For the selected entry it shows what the load command behind it says: file name, + file type, ID, size, UUID, architecture, last modified date, RPaths and the dynamic + linker it was linked against. *Reveal in Finder* jumps to the file. +- Reports what is wrong with the link — dependencies that cannot be found, version + mismatches, name mismatches, architecture mismatches — in the *Warnings & Errors* + tab, where every line links to the dependency it concerns. +- Switches between the architectures of a universal binary. +- Searches the symbol table by name, and narrows it down to one type or one kind + of symbol. + +On top of that, MacDependency takes the Objective-C metadata and the symbol table of +an image apart, which is what the rest of this document is about. + +## The dependency tree + +| Name (Install Name) | Link Type | File Kind | Current Version | Compatible Version | +| ------------------- | --------- | --------------- | --------------- | ------------------ | +| DVTFoundation | Normal | Dynamic Library | 1.0.0 | 1.0.0 | +| Foundation | Normal | Shared Cache | 2000.0.0 | 150.0.0 | +| LoggingSupport | Weak | Shared Cache | 1.0.0 | 1.0.0 | + +- **Link Type** — how the dependency is linked, i.e. which of the load commands + brought it in: `Normal` (`LC_LOAD_DYLIB`), `Weak` (`LC_LOAD_WEAK_DYLIB`, the + dependency is allowed to be missing) or `Delayed` (`LC_LAZY_LOAD_DYLIB`). + *This fork:* the column used to be called simply *Type*, which said nothing + about what it was a type of, now that a second column describes the file. +- **File Kind** — what the file itself is. *This fork.* + - `Executable File` — `MH_EXECUTE`; + - `Dynamic Library` — `MH_DYLIB`, and the other things that are loaded into + another process: bundles, stubs, kext bundles, the dynamic linker; + - `Shared Cache` — the image has no file on disk at all, it was read out of the + dyld shared cache (see below); + - `Unknown` — nothing was read for the row, because the library is missing or + has no architecture in common with its parent. +- The **Name** column is the one that takes up the slack when the list is resized; + the four columns after it keep the width they were given. +- A row is drawn in the ordinary text colour, in red when the dependency could not + be resolved and in yellow when it is only a warning. + +## Objective-C class definitions + +*This fork.* MacDependency reads the Objective-C metadata out of the Mach-O image +itself and prints it as a declaration, so a symbol like `_OBJC_CLASS_$_NSView` can +be turned back into the interface it came from: + +```objc +@interface NSView : NSResponder +{ + _NSTrackingAreaViewHelper *_trackingAreaHelper; + NSPSMatrix *_frameMatrix; + NSView *_superview; + NSMutableSet *_dragTypes; + CGRect _frame; + CGRect _bounds; + NSArray *_subviews; + CALayer *_layer; + NSWindow *_window; + ... +} + ++ (id)new; ++ (bool)requiresConstraintBasedLayout; +- (id)initWithFrame:(CGRect arg1); +@end +``` + +- **A single click** on a class symbol in the symbol table shows the declaration in + the *Class Definition* tab at the bottom of the window, without switching that tab + under you. **A double click** opens the same text in a window of its own: + monospaced, read-only, selectable, with a *Copy* button. +- Selecting the **metaclass** symbol (`_OBJC_METACLASS_$_NSView`) shows the class + methods of the class instead of its instance members. +- Selecting a symbol that is **not** a class says so rather than doing nothing: + *"Unsupported symbol: \_DVTAllocateObject is not an Objective-C class."* When the + class cannot be found in the image, that is reported as well. +- The declaration is complete: the superclass, the protocols the class adopts, the + ivars with their types, the `@property` declarations with their attributes, and + both the instance and the class methods. +- A property of the protocol object itself — a class property — is printed with the + modern spelling: `@property (class, readonly) bool supportsSecureCoding;`, as in + `@protocol NSSecureCoding`. +- Nothing is loaded and no code is run to produce this — the metadata is parsed from + the image. For a system framework that means from the **dyld shared cache**, see below. +- The reader covers the whole of an image's Objective-C metadata, categories and + protocols included (`@interface NSArray (DVTFoundationAdditions)`, standalone + `@protocol ... @end`). The output has been compared entry by entry with + [`ipsw class-dump`](https://github.com/blacktop/ipsw): for AppKit the two agree on + all 2729 classes and all 66955 methods, and on the name of every category and + protocol. + +## dyld shared cache + +Since macOS 11 most system libraries and frameworks no longer exist as files on +disk — they live in the dyld shared cache. MacDependency opens them anyway: it +locates the image inside the shared cache and reads it from the memory the cache is +mapped into. Such a dependency has no file to reveal in the Finder, which is what +the **File Kind** column says with `Shared Cache`. *This fork:* the tree used to +tell those rows apart by colouring them, which read badly; the column says it in +words instead, in a colour that can be read. + +## The symbol table + +The symbol table lists the exported and the imported symbols of the selected image. +It has three columns — Type, Kind and Name — and two filters, one on the type of a +symbol and one on its kind: + +| Type | Kind | Name | +| ------ | ---------- | -------------------------------------------------------------------------- | +| Export | ObjC class | `DVTFilePath` | +| Export | ObjC ivar | `DVTByteBuffer._bytes` | +| Export | C++ | `DVT::DVTArrayBuilder::_ensureCapacity(unsigned long)` | +| Export | Swift | `static DVTFoundation.IconOfFileIconReference.== infix(...) -> Swift.Bool` | +| Export | C | `DVTAllocateObject` | + +- **Kind** *This fork.* Says what a symbol is: `C`, `C++`, `Swift`, `ObjC class`, + `ObjC metaclass`, `ObjC protocol`, `ObjC ivar` or `ObjC`. A symbol table records + no language, so the kind is worked out from the name — from the prefixes of the + two manglings and of the Objective-C metadata. +- **The filters sit in the headers of the columns they filter.** *This fork.* The + header of the Type column and the header of the Kind column each carry a chevron; + clicking it opens the list of what can be chosen. The column shows what the filter + is about, and a row that is missing is one the column would have shown. A chevron + is drawn in the accent colour while its filter is narrowing the table, so that + rows which are hidden do not look like rows that were never there. +- **The Type filter** offers `All types`, `Export` and `Import`, one of them at a + time. The same filter is also on the **Export** and **Import** buttons above the + table, which is where it is reached from most of the time; whichever of the two is + used, the other follows. The table opens on the exports alone. Turning off the + last type left on is refused, because a table with nothing in it says less than one + that still shows something. +- **The Kind filter** offers `All Kinds` followed by every kind of symbol, and the + list is built from the kinds the model knows about, so it cannot fall out of step + with what the Kind column can show. +- **Demangle Names** turns mangled names back into what they were written as: C++ + names go through the Itanium demangler, Swift names through `swift_demangle`, and + the leading underscore of the C naming convention is dropped in every case. + Objective-C metadata symbols lose their prefix as well, so `_OBJC_CLASS_$_DVTFilePath` + reads `DVTFilePath`. With the option off, every name is shown exactly as the symbol + table holds it. +- **A double click on an imported symbol** follows it to the library that provides + it: the dependency tree selects that library, and its symbol table selects the + export of the same name. The type filter switches to *Export* on the way, because + the imports of the library that was jumped to are not what you are looking for. + +## Copying + +- **⌘C** copies the selected row of the symbol table exactly as the table displays + it, for instance `Export ObjC class DVTFilePath`. It acts only while the symbol + table has the focus and one of its rows is selected, so it stays out of the way + while the dependency tree is being used. +- The class definition text and the log are read-only but selectable, and ⌘C copies + the selection out of them as usual. + +## The log + + +The *Warnings & Errors* tab collects what went wrong while the file was being read: +dependencies that could not be found, version mismatches, architecture mismatches, +and the reasons a class definition could not be produced. Lines that concern a +particular dependency are links — clicking one jumps to it in the dependency tree. +The text follows the system appearance and is readable in dark mode as well. +*This fork:* it used to be drawn in black whatever the background, and to accept +edits; it now carries a colour of its own and is read-only. From 19b680ac8643849fb9651bea94c0308517880e69 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 8 Oct 2026 16:09:00 +0800 Subject: [PATCH 8/9] Fix sort icon and filter icon overlap --- MacDependency/SymbolTableHeaderView.h | 8 ++- MacDependency/SymbolTableHeaderView.m | 94 ++++++++++++++++++--------- 2 files changed, 68 insertions(+), 34 deletions(-) diff --git a/MacDependency/SymbolTableHeaderView.h b/MacDependency/SymbolTableHeaderView.h index 55ae1a5..6f2f87b 100644 --- a/MacDependency/SymbolTableHeaderView.h +++ b/MacDependency/SymbolTableHeaderView.h @@ -3,9 +3,11 @@ // MacDependency // // The header of the symbol table. The headers of the columns that filter the -// table -- the type of a symbol and its kind -- carry a chevron and open the -// list of what can be chosen when the chevron is clicked. The rest of the -// header keeps the behaviour of a plain table header, resizing included. +// table -- the type of a symbol and its kind -- carry a magnifying glass and +// open the list of what can be chosen when it is clicked. The rest of the +// header keeps the behaviour of a plain table header, sorting and resizing +// included; the magnifying glass stays clear of the sort indicator AppKit +// draws at the right of a sorted column. // #import diff --git a/MacDependency/SymbolTableHeaderView.m b/MacDependency/SymbolTableHeaderView.m index 7f707bb..51aded9 100644 --- a/MacDependency/SymbolTableHeaderView.m +++ b/MacDependency/SymbolTableHeaderView.m @@ -9,13 +9,26 @@ #import "SymbolTableHeaderView.h" #import "SymbolTableController.h" -/** How wide the clickable chevron is, and how wide the resize edge stays. */ -static const CGFloat kChevronAreaWidth = 24.0; -static const CGFloat kResizeEdgeWidth = 4.0; +/** + * How wide the clickable area a filter icon sits in is. The icon is centred in + * it, so the area is a little wider than the icon itself. + */ +static const CGFloat kFilterAreaWidth = 20.0; + +/** + * What the right edge of a header is left to AppKit, which draws the sort + * indicator of a sorted column there. Measured: the indicator covers the ten + * points before the last eight, so the last eighteen are enough to keep the two + * apart. The band is left free whether or not the column is sorted, so that the + * filter icon does not move out from under the pointer when the sort changes. + */ +static const CGFloat kSortIndicatorAreaWidth = 18.0; + +/** The square the magnifying glass of a filter is drawn in. */ +static const CGFloat kFilterIconSize = 9.0; -/** The size of the chevron itself. */ -static const CGFloat kChevronWidth = 7.0; -static const CGFloat kChevronHeight = 4.0; +/** How thick the strokes the magnifying glass is made of are. */ +static const CGFloat kFilterIconLineWidth = 1.5; @implementation SymbolTableHeaderView @@ -30,21 +43,21 @@ - (void) awakeFromNib { } /** - * The rectangle the chevron of a column is drawn in and clicked in, or - * NSZeroRect for a column that does not filter anything and for one that is - * too narrow to hold both the chevron and the edge to resize it by. + * The rectangle the filter icon of a column is drawn in and clicked in, or + * NSZeroRect for a column that does not filter anything and for one that is too + * narrow to hold both the icon and the sort indicator beside it. */ -- (NSRect) chevronRectOfColumn:(NSInteger)column { +- (NSRect) filterIconRectOfColumn:(NSInteger)column { NSTableColumn* tableColumn = [[self tableView] tableColumns][(NSUInteger)column]; if (![self.filterController hasFilterMenuForTableColumn:tableColumn]) return NSZeroRect; NSRect header = [self headerRectOfColumn:column]; - if (NSWidth(header) < kChevronAreaWidth + kResizeEdgeWidth) + if (NSWidth(header) < kFilterAreaWidth + kSortIndicatorAreaWidth) return NSZeroRect; - return NSMakeRect(NSMaxX(header) - kChevronAreaWidth - kResizeEdgeWidth, NSMinY(header), - kChevronAreaWidth, NSHeight(header)); + return NSMakeRect(NSMaxX(header) - kSortIndicatorAreaWidth - kFilterAreaWidth, NSMinY(header), + kFilterAreaWidth, NSHeight(header)); } - (void) drawRect:(NSRect)dirtyRect { @@ -54,37 +67,56 @@ - (void) drawRect:(NSRect)dirtyRect { return; for (NSInteger column = 0; column < [[self tableView] numberOfColumns]; column++) { - NSRect area = [self chevronRectOfColumn:column]; + NSRect area = [self filterIconRectOfColumn:column]; if (NSEqualRects(area, NSZeroRect)) continue; - CGFloat x = NSMidX(area) - kChevronWidth / 2.0; - CGFloat y = NSMidY(area) - kChevronHeight / 2.0; - - NSBezierPath* chevron = [NSBezierPath bezierPath]; - [chevron moveToPoint:NSMakePoint(x, y + kChevronHeight)]; - [chevron lineToPoint:NSMakePoint(x + kChevronWidth / 2.0, y)]; - [chevron lineToPoint:NSMakePoint(x + kChevronWidth, y + kChevronHeight)]; - [chevron setLineWidth:1.5]; - [chevron setLineCapStyle:NSLineCapStyleRound]; - // A filter that is narrowing the table is worth noticing: the rows that // are missing would otherwise look like rows that were never there. BOOL active = [self.filterController hasActiveFilterForTableColumn: [[self tableView] tableColumns][(NSUInteger)column]]; - [(active ? [NSColor controlAccentColor] : [NSColor headerTextColor]) setStroke]; - [chevron stroke]; + [self drawFilterIconInRect:area active:active]; } } +/** + * A magnifying glass: a lens with a handle running out of its lower right, + * which is the way round one is held. The view is flipped, so the lower right + * is where both coordinates grow. + */ +- (void) drawFilterIconInRect:(NSRect)area active:(BOOL)active { + NSRect icon = NSMakeRect(NSMidX(area) - kFilterIconSize / 2.0, + NSMidY(area) - kFilterIconSize / 2.0, + kFilterIconSize, kFilterIconSize); + + CGFloat diameter = kFilterIconSize * 0.7; + CGFloat radius = diameter / 2.0 - kFilterIconLineWidth / 2.0; + NSPoint centre = NSMakePoint(NSMinX(icon) + diameter / 2.0, NSMinY(icon) + diameter / 2.0); + CGFloat corner = radius * M_SQRT1_2; + + NSBezierPath* glass = [NSBezierPath bezierPath]; + [glass appendBezierPathWithOvalInRect:NSMakeRect(centre.x - radius, centre.y - radius, + radius * 2.0, radius * 2.0)]; + // The handle leaves the lens at forty five degrees and ends in the corner of + // the icon, which is what makes the glass read as one. + [glass moveToPoint:NSMakePoint(centre.x + corner, centre.y + corner)]; + [glass lineToPoint:NSMakePoint(NSMaxX(icon) - kFilterIconLineWidth / 2.0, + NSMaxY(icon) - kFilterIconLineWidth / 2.0)]; + [glass setLineWidth:kFilterIconLineWidth]; + [glass setLineCapStyle:NSLineCapStyleRound]; + + [(active ? [NSColor controlAccentColor] : [NSColor headerTextColor]) setStroke]; + [glass stroke]; +} + - (void) mouseDown:(NSEvent*)event { NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil]; NSInteger column = [self columnAtPoint:point]; - NSRect area = column < 0 ? NSZeroRect : [self chevronRectOfColumn:column]; + NSRect area = column < 0 ? NSZeroRect : [self filterIconRectOfColumn:column]; if (NSEqualRects(area, NSZeroRect) || !NSPointInRect(point, area)) { - // Not the chevron: the header does what it always does, which is where - // the column is resized from. + // Not the icon: the header does what it always does, which is where the + // column is sorted from and resized from. [super mouseDown:event]; return; } @@ -100,8 +132,8 @@ - (void) mouseDown:(NSEvent*)event { atLocation:NSMakePoint(NSMinX(area), NSMinY(area)) inView:self]; - // The menu changed what the table lists, and the chevron says whether a - // filter is on. + // The menu changed what the table lists, and the icon says whether a filter + // is on. [self setNeedsDisplay:YES]; } From 69fdc8233168b7ec534ac193ec85ccf613bc2ba7 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 8 Oct 2026 16:16:59 +0800 Subject: [PATCH 9/9] Update screenshot --- README.md | 2 +- images/macdependency.jpg | Bin 0 -> 360861 bytes images/macdependency.png | Bin 353097 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 images/macdependency.jpg delete mode 100644 images/macdependency.png diff --git a/README.md b/README.md index 8d8d9a6..8ff39ff 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ MacDependency shows all dependent libraries and frameworks of a given executable More information available in the [Wiki](../../wiki). -![Screenshot](images/macdependency.png) +![Screenshot](images/macdependency.jpg) ## This fork diff --git a/images/macdependency.jpg b/images/macdependency.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce525f553fb41dead0cceaa32e51b5ad23c757a8 GIT binary patch literal 360861 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%0D& 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%0D8juf+!XoeLeXm4GIlE2m&ex#ed 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 Cpc#4q literal 0 HcmV?d00001 diff --git a/images/macdependency.png b/images/macdependency.png deleted file mode 100644 index ad491d51f49f2ed52c3e90ab70469dd2e86edbc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353097 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≷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