Slide 1

Slide 1 text

Θ͍Θ͍swiftc൪֎ฤ @ukitaka SwiftͷDemanglerΛॻ͘

Slide 2

Slide 2 text

ࠓ೔ͷ໨ඪ

Slide 3

Slide 3 text

$S13ExampleNumber6isEven6numberSbSi_tF isEven(number: Int) -> Bool Ψν੎

Slide 4

Slide 4 text

Mangle / Demangleͱ͸ Mangleͱ͸ $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.swift ͷ isEven(number: Int) -> Bool

Slide 5

Slide 5 text

Mangle / Demangleͱ͸ Demangleͱ͸ $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool

Slide 6

Slide 6 text

Mangle / Demangleͱ͸ Mangle͞ΕͨγϯϘϧ໊Λ֬ೝ͢Δ $ swiftc -emit-sil Examples/ExampleNumber.swift

Slide 7

Slide 7 text

Mangle / Demangleͱ͸ Mangle͞ΕͨγϯϘϧ໊Λ֬ೝ͢Δ $ swiftc -emit-sil Examples/ExampleNumber.swift

Slide 8

Slide 8 text

Mangle / Demangleͱ͸ SwiftͷDemangleίϚϯυ $ swift demangle '$S13ExampleNumber6isEven6numberSbSi_tF' $S13ExampleNumber6isEven6numberSbSi_tF —> ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool

Slide 9

Slide 9 text

Mangle / Demangleͱ͸ SwiftͷDemangleίϚϯυ $ swift demangle '$S13ExampleNumber6isEven6numberSbSi_tF' $S13ExampleNumber6isEven6numberSbSi_tF —> ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool ࠓ೔͸͜ΕΛ࡞Γ·͢

Slide 10

Slide 10 text

Demangler Demangler ▸ Demanglerͷ࡞੒Λ௨ͯ͠ҎԼΛֶ΅͏ ▸ SwiftͷManglingͷ࢓૊ΈΛֶͿ ▸ ؆୯ͳParserΛ࡞੒͢ΔͷͰɺParserͷςΫχοΫΛମݧͰ͖Δ

Slide 11

Slide 11 text

Swift Demangler workshop ՝୊ʹ͍ͭͯ ▸ جຊ֤ࣗREADMEΛΈͳ͕ΒਐΊͯ΋Β͍·͢ ▸ ՝୊1ʙ5·Ͱ͋Γɺ՝୊1Λશһ͕ୡ੒͢Δ͜ͱΛ໨ඪʹ͠·͢ ▸ ՝୊1ʹ͸αϙʔτ͕͍ͭͯΔͷͰɺͦΕΛΈͳ͕Β΍ͬͯΈ·͠ΐ͏ ▸ Ͱ͖Δਓ͸ͲΜͲΜਐΊͯ΋Βͬͯେৎ෉Ͱ͢ ▸ ಛʹ5ͷsubstitution͸ॏཁͳͱ͜ΖͳͷͰ

Slide 12

Slide 12 text

՝୊1

Slide 13

Slide 13 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool

Slide 14

Slide 14 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF SwiftͷMangle nameʹڞ௨Ͱͭ͘Prefix

Slide 15

Slide 15 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF ؔ਺ΛMangleͨ͠΋ͷͰ͋Δͱ͍͏໨ҹ F

Slide 16

Slide 16 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF “ExampleNumber” ͱ͍͏Ϟδϡʔϧ໊ (ϑΝΠϧ໊) 13͸͔͜͜Β13จࣈ෼͕ࣝผࢠͰ͋Δ͜ͱΛද͢

Slide 17

Slide 17 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF “isEven” ͱ͍͏ؔ਺ͷ໊લ 6จࣈ෼͕ࣝผࢠͰ͋Δ͜ͱΛࣔ͢

Slide 18

Slide 18 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF “number” ͱ͍͏ϥϕϧ 6จࣈ෼͕ࣝผࢠͰ͋Δ͜ͱΛࣔ͢

Slide 19

Slide 19 text

Swift Demangler workshop ՝୊1 $S13ExampleNumber6isEven6numberSbSi_tF ؔ਺ͷγάωνϟ (≒ ܕ) Sb͸ฦΓ஋ͷܕ Bool Si_t͸Ҿ਺ͷܕ (Int)

Slide 20

Slide 20 text

Swift Demangler workshop ՝୊1 global ::= entity entity ::= context entity-spec context ::= module module ::= identifier $S13ExampleNumber6isEven6numberSbSi_tF global

Slide 21

Slide 21 text

Swift Demangler workshop ՝୊1 global ::= entity entity ::= context entity-spec context ::= module module ::= identifier $S13ExampleNumber6isEven6numberSbSi_tF global entity

Slide 22

Slide 22 text

Swift Demangler workshop ՝୊1 global ::= entity entity ::= context entity-spec context ::= module module ::= identifier $S13ExampleNumber6isEven6numberSbSi_tF context entity-spec module

Slide 23

Slide 23 text

Swift Demangler workshop ՝୊1 entity-spec ::= decl-name label-list function-signature 'F' function-signature ::= params-type params-type throws? label-list ::= empty-list label-list ::= ('_' | identifier)* throws ::= 'K' params-type ::= type decl-name ::= identifier identifier ::= NATURAL IDENTIFIER-STRING $S13ExampleNumber6isEven6numberSbSi_tF decl-name label-list function-signature

Slide 24

Slide 24 text

Swift Demangler workshop ՝୊1 (࠶ܝ) $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool