Ich habe eine Frage bezüglich der Swift-Funktionsnamenregel. Wie ich in IDA Pro versucht, eine iOS-App zu analysieren (vielleicht OS X ist der gleiche Fall) in Swift geschrieben, wie Swift-2048, bekam ich Funktionsname wie folgt:
%Vor%Der Name der ersten und zweiten Funktion sieht sehr ähnlich aus. Nur ein Unterschied ist "TFC" und "TToFC". Was ist das anders? Ich sah, dass eine Funktion sub ist anders:
%Vor%Aber einige von ihnen sind sehr ähnlich:
%Vor% Swift verwendet Name Mangling
für die Benennung von Methoden, Klassen ..... Ich bin auf dieses Artikel , die über schnelle Name Mangling beschreibt. Abschnitt über Mangeln ist unten gezeigt.
Swift behält Metadaten über Funktionen (und mehr) in ihren jeweiligen Symbolen, was Name Mangling genannt wird. Diese Metadaten enthalten den Namen der Funktion (offensichtlich), Attribute, Modulname, Argumenttypen, Rückgabetyp und mehr. Nimm das zum Beispiel:
%Vor% Der fehlende Name für die simpleDescription-Methode lautet _TFC9swifttest5Shape17simpleDescriptionfS0_FT_Si
.
Hier ist die Aufschlüsselung:
_T - Das Präfix für alle Swift-Symbole. Alles wird damit beginnen.
F - Funktion.
C - Funktion einer Klasse. (Methode)
9swifttest - Der Modulname mit einer vorgegebenen Länge.
5Shape - Der Klassenname, zu dem die Funktion gehört, wiederum mit einer vorgegebenen Länge.
17simpleDescription - Der Funktionsname.
f - Das Funktionsattribut. In diesem Fall ist es "f", was nur ein ist normale Funktion. Wir kommen in einer Minute dazu.
S0_FT - Ich bin nicht genau sicher, was das bedeutet, aber es scheint zu markieren der Anfang der Argumente und der Rückgabetyp.
'_' - Dieser Unterstrich trennt die Argumenttypen von der Rückgabe Art. Da die Funktion keine Argumente annimmt, kommt sie direkt nach S0_FT.
S - Dies ist der Anfang des Rückgabetyps. Das "S" steht für Schnell; Der Rückgabetyp ist ein Swift-Built-In-Typ. Das nächste Zeichen bestimmt den Typ.
i - Dies ist der Swift-Built-In-Typ. Ein kleines "I", das für. Steht Int.
Auszug aus: Inside Swift
sieht aus wie tatsächliche Verbindung ist gebrochen, finden Spiegel hier
Mit dem Befehl swift-demangle können Sie den Unterschied zwischen den beiden Funktionen sehen.
%Vor% _T
setzt alle Swift-Funktionen voran und es sieht so aus, als ob To
der Funktion mit dem Attribut @objc
entspricht.
Leider habe ich nicht genug Kenntnisse über die Interna von swift und die objective-c Laufzeit, um Ihnen zu sagen, was jede dieser Funktionen tut. Ich denke, es ist sicher anzunehmen, dass es Teil des Ziels ist, einen schnellen Bridging-Prozess zu erreichen.
Tags und Links ios swift reverse-engineering