Englisch | 简体中文
WBBlades ist ein Toolset, das auf dem Parsen von Mach-O
-Dateien basiert, einschließlich Ein-Klick-Erkennung für Apps (unterstützt OC
und Swift
), Paketgrößenanalyse (unterstützt eine einzelne statische Bibliothek/dynamische Bibliothek) und Punkt-zu-Punkt-Absturzanalyse (basierend auf in Systemprotokollen, unterstützt die Crash-Stack-Analyse der Huawei- und Bugly-Plattform, unterstützt signierte und nicht signierte Zustände), automatische Klassenextraktion und Hook-Fähigkeit basierend auf Mach-O-Dateien. Es verwendet hauptsächlich __Text-Assembly-Code-Analyse, Architekturextraktion, DYSM-Datei-Stripping, Symboltabellen-Stripping und Crash-File-(IPS)-Analysetechnologie. Unterstützt das Parsen großer Methoden/kleiner Methoden und iOS 15 oben über die Verarbeitung von dyld_chained_Fixups. Um Benutzern ein schnelles Verständnis des WBBlades-Projekts zu erleichtern, bieten wir eine intelligente Readme-Funktion auf GPT-Basis an.
Werkzeugname | Funktionsübersicht | Verwandte Technologien |
---|---|---|
Intelligente Readme-Datei | Das interaktive Q&A-Format ermöglicht ein schnelles Verständnis des WBBlades-Projekts und der damit verbundenen Technologien. | GPT-Chat |
One-Click-Erkennung für App | Swift & OC-Erkennung nutzloser Klassen, Erkennung nutzloser Ressourcen und Optimierungsvorschläge zur Paketverkleinerung. | Disassemblierung, __Text-Anweisungsextraktion, Mach-O-Analyse, Symboltabelle und Swift-Klassenstruktur in Mach-O |
Analyse der Paketgröße | Ermitteln der tatsächlichen Größe, die von statischen und dynamischen Bibliotheken in der IPA-Datei belegt wird. | Architektur-Stripping, statische Bibliotheksstrukturanalyse |
Crash-Analyse | Verwenden Sie .app oder dYSM, um Systemabsturzprotokolle zu analysieren und die Absturzstapelanalyse auf Huawei- und Bugly-Plattformen zu unterstützen | DYSM-Dateianalyse, einfache Symboltabellenextraktion, IPS-Dateianalyse, mit/ohne Symboltabellen-Absturzanalyse |
Haken der Mach-O-Klasse | Extrahieren Sie Klassen automatisch aus jeder Mach-O-Datei und verknüpfen Sie sie dann. | dyld_chained_ Korrekturen, Bindung, Rebase und Parsen großer/kleiner Methoden |
Die neue Version implementiert eine umfassende visuelle Implementierung des Toolsets basierend auf der ursprünglichen befehlszeilenbasierten Bedienung der oben genannten Tools und ist auf die Verbesserung der F&E-Effizienz ausgelegt. Darüber hinaus wird bei der Analyse schwieriger Abstürze für einige Abstürze, die nicht einfach zu reproduzieren sind und nicht von allgemeinen Tools erfasst werden können (der App-Prozess wird direkt vom Betriebssystem abgebrochen), eine Punkt-zu-Punkt-Absturzanalyse bereitgestellt.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
Ziel wählt „WBBladesCrashApp“ aus.
Das Visualisierungstool WBBlades ist unten dargestellt. Klicken Sie auf die Schaltfläche im linken Funktionsbereich, wählen Sie ein Tool wie die Erkennung nutzloser Klassen, die Analyse der Anwendungsgröße usw. aus und befolgen Sie die Anweisungen im Tool. Das Ergebnis wird im Textfeld ausgegeben.
Detaillierte Einführung in das Visualisierungstool: Detaillierte Einführung in das Visualisierungstool
Das Ziel wählt „WBBlades“ aus. Kompilieren und erstellen Sie, um Befehlszeilentools zu generieren. Kopieren Sie das generierte Produkt „Blades“ nach /usr/local/bin
Erkennung mit einem Klick
$ blades -diagnose xxx.app
Erkennung nutzloser Klassen, nutzloser Ressourcen, doppelter Ressourcen usw. mit einem Klick.
Erkennung ungenutzter Codes ObjC & Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-from gibt an, dass nur der nicht verwendete Code in den folgenden statischen Bibliotheken analysiert wird. Ohne diesen Parameter werden standardmäßig alle Klassen in der APP verwendet.
App-Größenanalyse (Messen Sie direkt die Größe von .a oder .framework nach der Verknüpfung)
$ blades -size xxx.a xxx.framework ....
Wenn Sie die Eingabe eines Ordnerpfads unterstützen, werden alle statischen Bibliotheken unter dem Ordner analysiert.
Protokollwiederherstellung ohne dSYM-Datei (Bei fehlender dSYM-Datei versuchen Sie es mit ObjC
Crash-Stack-Symbolisierung, Swift
wird nicht unterstützt)
$ blades -symbol xxx.app -logPath xxx.ips
Beschreibung | Unterstützung | Codebeispiel |
---|---|---|
Statischer Aufruf von ObjC-Klassen | ✅ | [MyClass new] |
Dynamischer Aufruf von ObjC-Klassen | ✅ | NSClassFromString(@"MyClass") |
Dynamischer ObjC-Aufruf durch String-Verkettung | NSClassFromString(@"My" + @"Class") | |
ObjC-Lademethode | ✅ | +load{...} |
ObjC & Swift werden vererbt | ✅ | SomClass : MyClass |
ObjC und Swift sind Eigenschaften | ✅ | @property (strong,atomic) MyClass *obj; |
Schneller Direktanruf der Klasse | ✅ | MyClass.init() |
Schneller Aufruf mit Laufzeit | ✅ | objc_getClass("Demo.MyClass") |
Schnelle generische Parameter | ✅ | SomeClass<MyClass>.init() |
Dynamischer Aufruf der Swfit-Klasse in ObjC | ✅ | NSClassFromString("Demo.MyClass") |
Swift-Typdeklaration im Container | var array:[MyClass] | |
Schnelle Mehrfachverschachtelung | ✅ | class SomeClass {class MyClass {...} ...} |
Unterstützt die schnelle Erkennung der verknüpften Größe einer statischen Bibliothek. Kein Kompilieren und Verknüpfen erforderlich. Beispiel: Wenn Sie wissen möchten, um wie viel die App-Größe zunimmt, wenn ein SDK importiert oder aktualisiert wird, können Sie die Größe mithilfe blades -size
schätzen , ohne das SDK zum Kompilieren und Verknüpfen erfolgreich verbinden zu müssen, um die Berechnung durchzuführen.
Falls die dSYM-Datei verloren geht, versuchen Sie, das Protokoll über blades -symbol
wiederherzustellen. **Zum Beispiel wird bei einer App-Verpackung die dSYM-Datei nach einer gewissen Zeit gelöscht, die App-Datei bleibt jedoch erhalten. In diesem Fall können Sie die Verwendung von Klingen zur Symbolisierung in Betracht ziehen. **Bevor Sie das Tool verwenden, beachten Sie einige Punkte:
Wenn es sich bei Ihrer App um ein Debugpaket oder ein Paket handelt, das die Symboltabelle nicht entfernt, können Sie dsymutil app -o xx.dSYM
verwenden, um die Symboltabelle zu extrahieren. Verwenden Sie dann die Symboltabelle, um das Protokoll zu symbolisieren.
Dieses Tool unterstützt nur ObjC. Sein Prinzip besteht darin, die Funktion des Absturzes durch Analyse der Adresse der ObjC-Methode in Mach-O zu bestimmen. Daher ist es nicht für Swfit, C und C++ geeignet. Darüber hinaus sind Werkzeuge nicht allmächtig und werden nur als technische Ergänzung im Notfall eingesetzt. In alltäglichen Situationen wird empfohlen, Symboltabellen zur Protokollsymbolisierung zu verwenden.
Wir hoffen aufrichtig, dass Entwickler wertvolle Kommentare und Vorschläge abgeben können und dass Entwickler Feedback zu Vorschlägen und Problemen geben können, indem sie PR oder Issue einreichen.
Wenn Sie sich für WBBlades interessieren, können Sie der WBBlades-Entwicklungsgruppe beitreten und gemeinsam technische Fragen besprechen. Bitte fügen Sie das Wechat-Konto „zqlong320“ hinzu oder scannen Sie den QR-Code unten als Ihr Freund und wir laden Sie dann ein, der Gruppe beizutreten.
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
ZWERG: https://www.prevanders.net/dwarf.html#releases
简体中文 | Englisch
WBBlades – Mach-O – Mach-O
– App – OC
– Swift
、包大小分析(支持单个静态库/动态库的包大小分析)、点对点崩溃解析(基于系统日志,支持华为和Bugly平台崩溃堆栈解析, 支持有符号和无符号状态), 基于Mach-O的Class自动提取和Hook能力。主要利用了__TE XT ist die neueste Version von XT取、崩溃文件(.ips)解析等技术手段实现,支持big Methode / kleine Methode für iOS 15 Tage vor der Veröffentlichung von dyld_chained_fixups更快了解WBBlades项目, 我们提供了基于GPT的智能Readme功能。
工具名称 | 功能概述 | 相关技术 |
---|---|---|
WeiterlesenReadme | 问答式互动, 便于快速了解WBBlades项目以及相关技术 | GPT-Version |
App一键体检 | Swift/OC无用类检测, 无用资源检测, 包瘦身优化建议 | 反汇编、__Text指令提取、Mach-O解析、符号表/Swift类在Mach-O中的结构 |
包大小分析 | 检测静态库/动态库在.ipa中占用的实际大小 | 架构剥离、静态库结构分析 |
崩溃解析 | 利用.app或者dYSM对系统崩溃日志解析, 支持华为和Bugly平台的崩溃堆栈解析 | dYSM文件解析、轻量符号表提取、ips文件解析、有/无符号表崩溃解析 |
Mach-O-Hook | 自动提取任意Mach-O中的Class并Hook | Dyld_chained_fixups 、binding、rebase、big/small method解析 |
新版本在原来基于命令行运行上述工具的基础上, 对工具集进行了全面的可视化实现, 开箱即用, 专为研发提效而设计.另外, 在疑难崩溃解析上,针对一些不易复现、且通用工具无法收集的崩溃(被操作系统直接杀死App进程场景),提供了基于系统日志的点对点崩溃解析功能.
$ git clone https://github.com/wuba/WBBlades.git
$ cd WBBlades
$ pod install
Zieladresse: WBBladesCrashApp
WBBlades可视化工具如下图所示.点击左侧功能区按钮,点击进入无用类检测、包大小检测等工具, 根据工具内的提示进行操作即可, 具体的数据会输出到文本框中;
可视化工具详细介绍: 可视化工具详细介绍
target选择:WBBlades,编译运行,生成命令行工具 将生成的产物blades 拷贝至 /usr/local/bin 下,具体操作如: sudo cp ${Ihr_BUILD_DIR}/blades /usr/local/bin
一键诊断
$ blades -diagnose xxx.app
一键检测无用类、无用资源、重复资源等
Mehr Informationen zu OC
& Swift
$ blades -unused xxx.app -from xxx.a xxx.a ....
-von 标识只分析以下静态库中的无用代码,不加此参数默认为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-Last ist nicht verfügbar | ✅ | +load{...} |
OC & Swift-Testversion | ✅ | SomClass : MyClass |
OC & Swift sind nicht verfügbar | ✅ | @property (strong,atomic) MyClass *obj; |
Swift 类直接调用 | ✅ | MyClass.init() |
Swift-Laufzeitumgebung | ✅ | objc_getClass("Demo.MyClass") |
Swift 泛型参数 | ✅ | SomeClass<MyClass>.init() |
Swfit 类在OC中动态调用 | ✅ | NSClassFromString("Demo.MyClass") |
Swift ist eine der beliebtesten Persönlichkeiten der Welt | var array:[MyClass] | |
Swift 多重嵌套 | ✅ | class SomeClass {class MyClass {...} ...} |
支持快速检测一个静态库的链接后大小.无需编译链接.举例说明:如果你想知道一个接入或更新一个SDK对会增加多少包大小,可以用blades -size
ist ein vertrauenswürdiges SDK-Gerät.
在丢失dSYM文件的情况下,尝试通过blades -symbol
恢复日志文件,这种情况下可以考虑使用WBBlades进行符号化。在工具使用前应先注意几点:
dsymutil app -o xx.dSYM
来提取符号表.然后用符号表进行日志符号化.我们诚挚地希望开发者提出宝贵的意见和建议,开发者可以通过提交PR或者Issue来反馈建议和问题.
Die WBBlades-Website ist nicht verfügbar信号„zqlong320“或者扫描下面的二维码为好友, 备注„WBBlades“, 我们会邀请您进群.
GitHub: https://github.com/aquynh/capstone
GitHub: https://github.com/Sunnyyoung/SYFlatButton
GitHub-Version: https://github.com/nygard/class-dump
GitHub:https://github.com/alexrozanski/PXListView
GitHub: https://github.com/steventroughtonsmith/cartool
DWARF-Inhalt: https://www.prevanders.net/dwarf.html#releases
GitHub: https://github.com/nygard/class-dump