From a3418944478afde0adbccea7428595c0bb617f95 Mon Sep 17 00:00:00 2001 From: "Yu-Cheng (Henry) Huang" Date: Wed, 13 Nov 2019 15:36:07 +0800 Subject: [PATCH] Add BUILD_VERSION load command --- macholibre/dictionary.py | 13 +++++++++++++ macholibre/parser.py | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/macholibre/dictionary.py b/macholibre/dictionary.py index 988f39e..b08a05f 100644 --- a/macholibre/dictionary.py +++ b/macholibre/dictionary.py @@ -538,3 +538,16 @@ 2147483648 + 100: 'POWERPC_970 (LIB64)' } } + +tools = { + 1: 'CLANG', + 2: 'SWIFT', + 3: 'LD' +} + +platforms = { + 1: 'MACOS', + 2: 'IOS', + 3: 'TVOS', + 4: 'WATCHOS' +} diff --git a/macholibre/parser.py b/macholibre/parser.py index 7835843..2fb8c89 100644 --- a/macholibre/parser.py +++ b/macholibre/parser.py @@ -757,6 +757,26 @@ def parse_main(self, cmd, cmd_size): return output + def parse_build_version(self, cmd, cmd_size): + """Parse build version load command.""" + + output = { + 'cmd': cmd, + 'cmd_size': cmd_size, + 'platform': dictionary.platforms[self.get_int()], + 'minos': self.get_int(), + 'sdk': self.get_int(), + 'tools': [] + } + + for _ in range(self.get_int()): + output['tools'].append({ + 'tool': dictionary.tools[self.get_int()], + 'version': self.get_int() + }) + + return output + def parse_lcs(self, offset, size, nlcs, slcs): """Determine which load commands are present and parse each one accordingly. Return as a list. @@ -855,6 +875,8 @@ def parse_lcs(self, offset, size, nlcs, slcs): self.__macho['lcs'].append(self.parse_rpath(cmd, cmd_size)) elif cmd == 'MAIN': self.__macho['lcs'].append(self.parse_main(cmd, cmd_size)) + elif cmd == 'BUILD_VERSION': + self.__macho['lcs'].append(self.parse_build_version(cmd, cmd_size)) def parse_syms(self, offset, size, lc_symtab): """Parse symbol and string tables.