английский | 简体中文
WBBlades — это набор инструментов, основанный на анализе файлов Mach-O
, включая обнаружение приложения одним щелчком мыши (поддерживает OC
и Swift
), анализ размера пакета (поддерживает одну статическую/динамическую библиотеку), точечный анализ сбоев (на основе в системных журналах, поддерживает анализ стека сбоев платформ Huawei и Bugly, поддерживает подписанные и беззнаковые состояния), автоматическое извлечение классов и возможность перехвата на основе файла Mach-O. В основном он использует анализ ассемблерного кода __Text, извлечение архитектуры, удаление файлов DYSM, удаление таблиц символов, технологию анализа файлов сбоев (ips). Поддержка анализа большого/малого метода и iOS 15 выше об обработке dyld_chained_Fixups. Чтобы облегчить пользователям быстрое понимание проекта WBBlades, мы предоставляем интеллектуальную функцию Readme, основанную на GPT.
Название инструмента | Обзор функций | Связанные технологии |
---|---|---|
Интеллектуальный файл Readme | Интерактивный формат вопросов и ответов облегчает быстрое понимание проекта WBBlades и связанных с ним технологий. | GPT-чат |
Обнаружение приложения в один клик | Обнаружение бесполезных классов Swift и OC, обнаружение бесполезных ресурсов и предложения по оптимизации сокращения размера пакета. | Дизассемблирование, извлечение инструкций __Text, анализ Mach-O, таблица символов и структура классов Swift в Mach-O |
Анализ размера упаковки | Определение фактического размера, занимаемого статическими и динамическими библиотеками в файле .ipa. | Демонтаж архитектуры, анализ статической структуры библиотеки |
Анализ сбоев | Используйте .app или dYSM для анализа журналов сбоев системы и поддержки анализа стека сбоев на платформах Huawei и Bugly. | Анализ файлов DYSM, упрощенное извлечение таблицы символов, анализ ips-файлов, анализ сбоя таблицы символов или без него |
Крюк класса Mach-O | Автоматически извлекайте классы из любого файла Mach-O, а затем подключайте их. | dyld_chained_ Исправления, привязка, перебазирование и анализ больших/малых методов. |
В новой версии реализована комплексная визуальная реализация набора инструментов, основанная на исходной работе вышеуказанных инструментов с использованием командной строки, и она предназначена для повышения эффективности исследований и разработок. Кроме того, при анализе сложных сбоев, для некоторых сбоев, которые нелегко воспроизвести и которые невозможно собрать обычными инструментами (процесс приложения завершается непосредственно операционной системой), предоставляется точечный анализ сбоев.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
Цель выбирает «WBBladesCrashApp».
Инструмент визуализации WBBlades показан ниже. Нажмите кнопку в левой функциональной области, выберите такой инструмент, как «Обнаружение бесполезных классов», «Анализ размера приложения» и т. д., и действуйте в соответствии с подсказками инструмента, и результат будет выведен в текстовое поле;
Подробное введение в инструмент визуализации: Подробное введение в инструмент визуализации
Цель выбирает «WBBlades». Скомпилируйте и создайте инструменты командной строки. Скопируйте сгенерированные «лезвия» продукта в /usr/local/bin следующим образом: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
Обнаружение в один клик
$ blades -diagnose xxx.app
Обнаружение бесполезных классов, бесполезных ресурсов, дубликатов ресурсов и т. д. одним щелчком мыши.
Обнаружение неиспользуемого кода ObjC и Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-от указания, что анализируется только неиспользуемый код в следующих статических библиотеках. Без этого параметра по умолчанию используются все классы в приложении.
Анализ размера приложения (непосредственное измерение размера .a или .framework после связывания)
$ blades -size xxx.a xxx.framework ....
При поддержке ввода пути к папке будут проанализированы все статические библиотеки в папке.
Восстановление журнала без файла dSYM (в случае отсутствия файла dSYM попробуйте использовать символы стека сбоя ObjC
, Swift
не поддерживается)
$ blades -symbol xxx.app -logPath xxx.ips
Описание | Поддерживать | Пример кода |
---|---|---|
Статический вызов классов ObjC | ✅ | [MyClass new] |
Динамический вызов классов ObjC | ✅ | NSClassFromString(@"MyClass") |
Динамический вызов ObjC посредством объединения строк | NSClassFromString(@"My" + @"Class") | |
Метод загрузки ObjC | ✅ | +load{...} |
ObjC и Swift наследуются | ✅ | SomClass : MyClass |
ObjC и Swift являются свойствами | ✅ | @property (strong,atomic) MyClass *obj; |
Прямой вызов класса Swift | ✅ | MyClass.init() |
Swift вызов с использованием среды выполнения | ✅ | objc_getClass("Demo.MyClass") |
Общие параметры Swift | ✅ | SomeClass<MyClass>.init() |
Динамический вызов класса Swfit в ObjC | ✅ | NSClassFromString("Demo.MyClass") |
Объявление типа Swift в контейнере | var array:[MyClass] | |
Быстрое множественное вложение | ✅ | class SomeClass {class MyClass {...} ...} |
Поддерживает быстрое определение связанного размера статической библиотеки. Не нужно компилировать и компилировать. Например: если вы хотите узнать, насколько увеличится размер приложения при импорте или обновлении SDK, вы можете использовать blades -size
для оценки размера без необходимости подключения SDK для компиляции и успешной компоновки для расчета.
В случае потери файла dSYM попробуйте восстановить журнал с помощью blades -symbol
. **Например, в упаковке приложения файл dSYM удаляется через некоторое время, но файл приложения сохраняется. В этом случае вы можете рассмотреть возможность использования лезвий для обозначения. **Перед использованием инструмента обратите внимание на несколько моментов:
Если ваше приложение представляет собой пакет отладки или пакет, который не удаляет таблицу символов, вы можете использовать dsymutil app -o xx.dSYM
для извлечения таблицы символов. Затем используйте таблицу символов для обозначения бревна.
Этот инструмент поддерживает только ObjC, и его принцип заключается в определении функции сбоя путем анализа адреса метода ObjC в Mach-O. Поэтому он не подходит для Swfit, C и C++. Кроме того, инструменты не всесильны и используются лишь как экстренные дополнительные технические средства. В повседневных ситуациях рекомендуется использовать таблицы символов для обозначения бревен.
Мы искренне надеемся, что разработчики смогут предоставить ценные комментарии и предложения, а разработчики смогут оставить отзыв о предложениях и проблемах, отправив PR или проблему.
Если вас интересует WBBlades, вы можете присоединиться к группе разработчиков WBBlades и вместе обсуждать технические вопросы. Пожалуйста, добавьте учетную запись wechat «zqlong320» или отсканируйте QR-код ниже в качестве друга, и тогда мы пригласим вас присоединиться к группе.
GitHub: https://github.com/aquynh/capstone
GitHub: https://github.com/Sunnyyoung/SYFlatButton
GitHub: https://github.com/nygard/class-dump
GitHub: https://github.com/alexrozanski/PXListView
GitHub: https://github.com/steventroughtonsmith/cartool
ГНОГ: https://www.prevanders.net/dwarf.html#releases
简体中文 | Английский
WBBlades — это Mach-O
приложение для быстрого запуска, приложение App, приложение для мобильных устройств ( OC
, Swift
, приложение) 、包大小分析(支持单个静态库/动态库的包大小分析)、点对点崩溃解析(基于系统日志,支持华为和Bugly平台崩溃堆栈解析,支持有符号和无符号状态)、基于Mach-O的Class自动提取和Hook能力。主要利用了__TE XT также может использоваться в качестве топлива, dYSM также может быть использовано.取、崩溃文件(.ips)解析等技术手段实现,支持big метод /small метод 解析 以及 iOS 15 дней назад dyld_chained_fixups. Загрузите файлы WBBlades в формате Readme и GPT.
工具名称 | 功能概述 | 相关技术 |
---|---|---|
智能Readme | Производитель WBBlades, поставщик оборудования для WBBlades, производитель оборудования для производства автомобилей WBBlades. | GPT — код |
Приложение 一键体检 | Swift/OC использует коды, которые можно использовать, когда они используются. | 反汇编、__Text指令提取、Mach-O解析、符号表/Swift类在Mach-O中的结构 |
包大小分析 | 检测静态库/动态库在.ipa中占用的实际大小 | 架构剥离、静态库结构分析 |
崩溃解析 | Приложение 利用.app содержит dYSM, а также приложение Bugly, которое работает в режиме реального времени. | dYSM, 文件解析, 轻量符号表提取, ips文件解析、有/无符号表崩溃解析 |
Мах-О 类Хук | 自动提取任意Mach-O中的Class并Hook | dyld_chained_fixups 、binding、rebase、большой/маленький метод解析 |
新版本在原来基于命令行运行上述工具的基础上,对工具集进行了全面的可视化实现,开箱即用,专为研发提效而设计。另外,在疑难崩溃解析上, 针对一些不易复现、且通用工具无法收集的崩溃(被操作系统直接杀死App 进程场景), 提供了基于系统日志的点对点崩溃解析功能。
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
цель: WBBladesCrashApp
WBBlades сотрудничает с игроками, играющими на гитаре, с мячом, на гитаре, на гитаре, на гитаре, на гитаре. 、包大小检测等工具,根据工具内的提示进行操作即可,具体的数据会输出到文本框中;
可视化工具详细介绍: 可视化工具详细介绍
целевой файл: WBBlades,编译运行,生成命令行工具 将生成的产物blades 拷贝至 /usr/local/bin 下, 具体操作如: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
一键诊断
$ blades -diagnose xxx.app
一键检测无用类、无用资源、重复资源等
OC
и Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-от 标识只分析以下静态库中的无用代码, 不加此参数默认为APP中全部类
包大小分析 (直接测算.a |.framework链接后的大小)
$ blades -size xxx.a xxx.framework ....
支持输入一个文件夹路径,输入后该文件下所有的静态库都会被分析
无符号表日志符号化(在丢失符号表的情况下,尝试OC
崩溃堆栈符号化,不支持Swift
)
$ blades -symbol xxx.app -logPath xxx.ips
说明 | 是否支持 | 代码示例 |
---|---|---|
OC 的类的静态调用 | ✅ | [MyClass new] |
OC 的动态调用 | ✅ | NSClassFromString(@"MyClass") |
OC 字符串拼接动态调用 | NSClassFromString(@"My" + @"Class") | |
OC-загрузка. | ✅ | +load{...} |
OC и Swift 被继承 | ✅ | SomClass : MyClass |
OC и Swift 作为属性 | ✅ | @property (strong,atomic) MyClass *obj; |
Swift 类直接调用 | ✅ | MyClass.init() |
Swift 通过runtime调用 | ✅ | objc_getClass("Demo.MyClass") |
Свифт 泛型参数 | ✅ | SomeClass<MyClass>.init() |
Swfit 类在OC中动态调用 | ✅ | NSClassFromString("Demo.MyClass") |
Swift 容器中作为类型声明 | var array:[MyClass] | |
Свифт 多重嵌套 | ✅ | class SomeClass {class MyClass {...} ...} |
支持快速检测一个静态库的链接后大小。无需编译链接。举例说明:如果你想知道一个接入或更新一个SDK и SDK, которые можно использовать для blades -size
может использоваться только в SDK, а также в SDK .
在丢失dSYM文件的情况下, 尝试通过blades -symbol
恢复日志。例如某次打包,在一段时间后符号表被清除,但是保留了app WBBlades является производителем WBBlades в Китае .
dsymutil app -o xx.dSYM
также может быть использован в качестве исходного кода.我们诚挚地希望开发者提出宝贵的意见和建议, 开发者可以通过提交PR或者Issue来反馈建议和问题。
欢迎对WBBlades感兴趣的小伙伴加入WBBlades开发交流群, 一起探讨技术问题,请先添加微信号"zqlong320" и "WBBlades", и "WBBlades", и "WBBlades", и "WBBlades", и "WBBlades".
Адрес GitHub: https://github.com/aquynh/capstone.
Адрес GitHub: https://github.com/Sunnyyoung/SYFlatButton.
Адрес GitHub: https://github.com/nygard/class-dump.
Адрес GitHub: https://github.com/alexrozanski/PXListView.
Адрес GitHub: https://github.com/steventroughtonsmith/cartool.
DWARF: https://www.prevanders.net/dwarf.html#releases
GitHub: https://github.com/nygard/class-dump