Anglais | 简体中文
WBBlades est un ensemble d'outils basé sur l'analyse de fichiers Mach-O
, comprenant la détection en un clic pour l'application (prend en charge OC
et Swift
), l'analyse de la taille du paquet (prend en charge une seule bibliothèque statique/bibliothèque dynamique), l'analyse des crashs point à point (basée sur sur les journaux système, prend en charge l'analyse de la pile de crash des plates-formes Huawei et Bugly, prend en charge les états signés et non signés), l'extraction automatique de classe et la capacité Hook basée sur le fichier Mach-O. Il utilise principalement l'analyse du code d'assemblage __Text, l'extraction de l'architecture, la suppression des fichiers DYSM, la suppression de la table des symboles, la technologie d'analyse des fichiers crash (ips). Prend en charge l'analyse des grandes méthodes/petites méthodes et iOS 15 ci-dessus concernant le traitement dyld_chained_Fixups. Afin de permettre aux utilisateurs de comprendre rapidement le projet WBBlades, nous proposons une fonctionnalité Readme intelligente basée sur GPT.
Nom de l'outil | Aperçu des fonctions | Technologies associées |
---|---|---|
Lisez-moi intelligent | Le format interactif de questions et réponses facilite une compréhension rapide du projet WBBlades et des technologies associées. | Discussion GPT |
Détection en un clic pour l'application | Détection de classes inutiles Swift & OC, détection de ressources inutiles et suggestions d'optimisation de réduction de la taille des packages. | Démontage, extraction d'instructions __Text, analyse Mach-O, table de symboles et structure de classe Swift dans Mach-O |
Analyse de la taille du colis | Détection de la taille réelle occupée par les bibliothèques statiques et dynamiques dans le fichier .ipa. | Décapage d'architecture, analyse de structure de bibliothèque statique |
Analyse des accidents | Utilisez .app ou dYSM pour analyser les journaux de pannes du système et prenez en charge l'analyse de la pile de pannes sur les plates-formes Huawei et Bugly | Analyse de fichiers DYSM, extraction légère de table de symboles, analyse de fichier ips, avec/sans analyse de crash de table de symboles |
Crochet de classe Mach-O | Extrayez automatiquement les classes de n'importe quel fichier Mach-O, puis accrochez-les. | dyld_ chained_ Corrections, liaison, rebase et analyse de méthodes grandes/petites |
La nouvelle version implémente une implémentation visuelle complète de l'ensemble d'outils basée sur le fonctionnement original en ligne de commande des outils ci-dessus et est conçue pour améliorer l'efficacité de la R&D. De plus, dans l'analyse des crashs difficiles, pour certains crashs qui ne sont pas faciles à reproduire et ne peuvent pas être collectés par des outils généraux (le processus de l'application est directement tué par le système d'exploitation), une analyse de crash point à point est fournie.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
Target sélectionne « WBBladesCrashApp ».
L'outil de visualisation WBBlades est présenté ci-dessous. Cliquez sur le bouton dans la zone de fonction de gauche, sélectionnez un outil tel que la détection des classes inutiles, l'analyse de la taille des applications, etc., et opérez selon les invites de l'outil, et le résultat sera affiché dans la zone de texte ;
Introduction détaillée à l'outil de visualisation : Introduction détaillée à l'outil de visualisation
La cible sélectionne "WBBlades",Compilez et construisez pour générer des outils de ligne de commande Copiez les "lames" du produit généré dans /usr/local/bin,comme suit: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
Détection en un clic
$ blades -diagnose xxx.app
Détection en un clic des classes inutiles, des ressources inutiles et des ressources en double, etc.
Détection de code inutilisé ObjC et Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-from indiquant que seul le code inutilisé dans les bibliothèques statiques suivantes est analysé. Sans ce paramètre, la valeur par défaut est toutes les classes de l'APP.
Analyse de la taille de l'application (mesurez directement la taille de .a ou .framework après la liaison)
$ blades -size xxx.a xxx.framework ....
En prenant en charge la saisie d'un chemin de dossier, toutes les bibliothèques statiques du dossier seront analysées.
Récupération de journaux sans fichier dSYM (en cas de fichier dSYM manquant, essayez la symbolisation de la pile de crash ObjC
, Swift
n'est pas pris en charge)
$ blades -symbol xxx.app -logPath xxx.ips
Description | Soutien | Exemple de code |
---|---|---|
Appel statique des classes ObjC | ✅ | [MyClass new] |
Appel dynamique des classes ObjC | ✅ | NSClassFromString(@"MyClass") |
Appel dynamique ObjC via la concaténation de chaînes | NSClassFromString(@"My" + @"Class") | |
Méthode de chargement ObjC | ✅ | +load{...} |
ObjC et Swift hérités | ✅ | SomClass : MyClass |
ObjC et Swift étant des propriétés | ✅ | @property (strong,atomic) MyClass *obj; |
Appel direct en classe Swift | ✅ | MyClass.init() |
Appel rapide utilisant le runtime | ✅ | objc_getClass("Demo.MyClass") |
Paramètres génériques Swift | ✅ | SomeClass<MyClass>.init() |
Appel dynamique de classe Swfit dans ObjC | ✅ | NSClassFromString("Demo.MyClass") |
Déclaration de type Swift dans le conteneur | var array:[MyClass] | |
Nidification multiple rapide | ✅ | class SomeClass {class MyClass {...} ...} |
Prend en charge la détection rapide de la taille liée d'une bibliothèque statique. Pas besoin de compiler et de créer un lien. Par exemple : si vous souhaitez savoir de combien la taille de l'application augmentera lorsqu'un SDK est importé ou mis à jour, vous pouvez utiliser blades -size
pour estimer la taille , sans avoir besoin de connecter le SDK pour compiler et lier avec succès pour calculer.
En cas de perte du fichier dSYM, essayez de restaurer le journal via blades -symbol
. **Par exemple, dans un package d'application, le fichier dSYM est effacé après un certain temps, mais le fichier d'application est conservé. Dans ce cas, vous pouvez envisager d’utiliser des lames pour la symbolisation. **Avant d'utiliser l'outil, faites attention à quelques points :
Si votre application est un package de débogage ou un package qui ne supprime pas la table des symboles, vous pouvez utiliser dsymutil app -o xx.dSYM
pour extraire la table des symboles. Utilisez ensuite la table des symboles pour symboliser le journal.
Cet outil ne supporte qu'ObjC, et son principe est de déterminer la fonction du crash en analysant l'adresse de la méthode ObjC dans Mach-O. Par conséquent, il ne convient pas à Swfit, C et C++. De plus, les outils ne sont pas omnipotents et ne sont utilisés que comme moyens techniques complémentaires d’urgence. Dans les situations quotidiennes, il est recommandé d'utiliser des tables de symboles pour la symbolisation des journaux.
Nous espérons sincèrement que les développeurs pourront fournir des commentaires et des suggestions précieux, et que les développeurs pourront fournir des commentaires sur les suggestions et les problèmes en soumettant un PR ou un problème.
Si vous êtes intéressé par WBBlades, vous pouvez rejoindre le groupe de développement WBBlades et discuter ensemble des problèmes techniques. Veuillez ajouter le compte Wechat « zqlong320 » ou scanner le code QR ci-dessous en tant qu'ami et nous vous inviterons ensuite à rejoindre le groupe.
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
NAIN : https://www.prevanders.net/dwarf.html#releases
简体中文 | Anglais
WBBlades lance Mach-O
et l'application Mach-O ( OC
et Swift
). 、包大小分析 (支持单个静态库/动态库的包大小分析)、点对点崩溃解析(基于系统日志,支持华为和Bugly平台崩Il s'agit d'une classe Mach-O avec crochet. XT汇编代码分析、架构提取、符号表剥离、dYSM文件提取、崩溃文件(.ips)解析等技术手段实现,支持big méthode / petite méthode 解析 以及 iOS 15 versions de dyld_chained_fixups. Le fichier WBBlades est disponible en anglais et le fichier Readme est également disponible sur GPT.
工具名称 | 功能概述 | 相关技术 |
---|---|---|
Lire le fichier Lisez-moi | 式互动,便于快速了解WBLades项目以及相关技术 | GPT聊天 |
Application | Swift/OC | 反汇编、__Text指令提取、Mach-O解析、符号表/Swift类在Mach-O中的结构 |
包大小分析 | 检测静态库/动态库在.ipa中占用的实际大小 | 架构剥离、静态库结构分析 |
崩溃解析 | Le site dYSM est doté d'une application dYSM. | dYSM文件解析、轻量符号表提取、ips文件解析、有/无符号表崩溃解析 |
Crochet Mach-O类 | Crochet de classe Mach-O | dyld_chained_fixups 、binding、rebase、grande/petite méthode解析 |
新版本在原来基于命令行运行上述工具的基础上,对工具集进行了全面的可视化实现,开箱即用,在疑难崩溃解析上,针对一些不易复现、且通用工具无法收集的崩溃(被操作系统直接杀死App进程场景),提供了基于系统日志的点对点崩溃解析功能。
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
cible: WBBladesCrashApp
WBBlades可视化工具如下图所示。点击左侧功能区按钮,点击进入无用类检测、包大小检测等工具,根据工具内的提示进行操作即可,具体的数据会输出到文本框中;
Nom du produit: Nom du produit
target:WBBlades,编译运行,生成命令行工具 将生成的产物blades 拷贝至 /usr/local/bin 下,具体操作如: sudo cp ${Your_BUILD_DIR}/blades /usr/local/bin
一键诊断
$ blades -diagnose xxx.app
一键检测无用类、无用资源、重复资源等
Télécharger OC
& Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-depuis l'application
包大小分析 (直接测算.a |.framework链接后的大小)
$ blades -size xxx.a xxx.framework ....
支持输入一个文件夹路径,输入后该文件下所有的静态库都会被分析
Il s'agit OC
d'exploitation rapide pour les utilisateurs Swift
.
$ blades -symbol xxx.app -logPath xxx.ips
明 | 是否支持 | 代码示例 |
---|---|---|
OC 的类的静态调用 | ✅ | [MyClass new] |
OC 的动态调用 | ✅ | NSClassFromString(@"MyClass") |
OC 字符串拼接动态调用 | NSClassFromString(@"My" + @"Class") | |
Chargement OC | ✅ | +load{...} |
Commentaires sur OC & Swift | ✅ | SomClass : MyClass |
Logiciels OC & Swift | ✅ | @property (strong,atomic) MyClass *obj; |
Swift 直接调用 | ✅ | MyClass.init() |
Temps d'exécution Swift | ✅ | objc_getClass("Demo.MyClass") |
Swift 泛型参数 | ✅ | SomeClass<MyClass>.init() |
Swfit OC 中动态调用 | ✅ | NSClassFromString("Demo.MyClass") |
Swift 容器中作为类型声明 | var array:[MyClass] | |
Swift 多重嵌套 | ✅ | class SomeClass {class MyClass {...} ...} |
举例说明:如果你blades -size
rechange pour SDK et SDK blades -size
est une option pour le SDK.
blades -symbol
de lame dSYM blades -symbol
. Il s'agit d'un modèle WBBlades .
dsymutil app -o xx.dSYM
sont également disponibles. dsymutil app -o xx.dSYM
来提取符号表。然后用符号表进行日志符号化。我们诚挚地希望开发者提出宝贵的意见和建议,开发者Il s'agit d'un problème de relations publiques.
Il s'agit d'une version WBBlades. Le "zqlong320" est un produit de haute qualité, et le "WBBlades" est également utilisé.
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