IOS рдРрдк рдХреЛ рддреЛрдбрд╝рдирд╛! рднрд╛рдЧ реи

рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдФрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЕрдм рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рд░рдирдЯрд╛рдЗрдо рдкрд░ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдлрд┐рд░, рдпрд╛рдж рд░рдЦрдирд╛! рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдмрджрд╕реВрд░рдд рдкрдЯрд╛рдЦрд╛ рдмрдирдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрдЯрд╛рдЦрд╛ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рдЗрд╕ рдкрд╛рда рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреНрдпрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдЖрдкрдХреЛ рдПрдЖрд░рдПрдо (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рда рдХреЗ рдЕрд░реНрде рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдЬреНрдЮрд╛рди рдХрд╛ рд╕реНрддрд░ рд░рд╛рд╕реНрддреЗ рдореЗрдВ Google рдкрд░ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХрд╛ рд╣реИред рдЦреИрд░, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдХреЗ рдкрд╛рд╕, рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред :) - рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦреЗрдВрдЧреЗ!

рд░рдирдЯрд╛рдЗрдо рдореИрдирд┐рдкреБрд▓реЗрд╢рди


рдкрд┐рдЫрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдордиреЗ рдЖрдкрдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП .plist рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рдордп рдЪрд░ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, LLDB рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ, GDB рдХреЗ рд╕рд╛рде рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди
5.0.1 (рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рдордп рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг) рдореЗрдВ Xcode рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, GDB рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдореНрдмреЛрд░рд┐рди рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдмреЛрдЭ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдПрд▓рдПрд▓рдбреАрдмреА рдФрд░ рдЬреАрдбреАрдмреА рдХреЗ рдмреАрдЪ рдХрдорд╛рдВрдб рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реАрдбрд┐рдб рдХрд░рддрд╛ рд╣реВрдВ ред - рдиреЛрдЯ рдкреНрд░рддрд┐ред

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ iOS рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдореБрдЦреНрдп рдмрдВрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ ( Meme Collector.app ) рдЦреЛрд▓реЗрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рд╣рдо рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ: рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рдЯрд╛рдЗрдк рдХрд░реЗрдВ:

 lldb 

рдбреАрдмрдЧрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдмрдврд╝рд┐рдпрд╛ред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдо рдЙрд╕рд╕реЗ рдПрдХ рдирд┐рдордВрддреНрд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ: (lldb)

рд╣рдо рдбрд┐рдмрдЧрд░ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ:
рдореИрдВ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдХреНрд╖рд░ (lldb) рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЖрдк рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рднреА рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ

 attach --name "Meme Collector" --waitfor 

attach рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдПрд▓рдПрд▓рдбреАрдмреА рдХреЛ " Meme Collector " рдирд╛рдордХ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдЗрд╕рд▓рд┐рдП рдбрд┐рдмрдЧрд░ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдЗрдП iOS рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ (рдкрд╛рда рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ) рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ, рдЖрдИрдбреАрдИ рд╕реЗ рдирд╣реАрдВ) - рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕реЗ "рдкреБрдирд░рд╛рд░рдВрдн" рдХрд╣реЗрдВрдЧреЗред

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрд▓рдПрд▓рдбреАрдмреА рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдордЬрд╝рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдбреАрдмрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рдХрд╣реЗрдВ:

 Process 1427 stopped Executable module set to "/Users/dmitriy/Library/Application Support/iPhone Simulator/7.0.3/Applications/9A72F266-8851-4A25-84E4-9CF8EFF95CD4/Meme Collector.app/Meme Collector". Architecture set to: i486-apple-macosx. 

рдФрд░ рдПрдХ рдирдИ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд: (lldb)

рдкреНрд░рддреНрдпреЗрдХ ViewController рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рдареАрдХ рд╡рд╣реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВред рдЕрдХреНрд╕рд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╡рд╣рд╛рдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП viewDidLoad рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ iOS рдореЗрдВ, UIViewController рдЙрдкрдХреНрд▓рд╛рд╕реЗрд╕ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ viewDidLoad рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ viewDidLoad ред

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдВ:

 b viewDidLoad 

рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЗрд╕ рд╕рдВрд╡реЗрджреА рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП viewdidload рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдлрд▓ рд╣реЛ viewdidload ред

рдпрд╣ viewDidLoad (C ++ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рддрд░реАрдХреЛрдВ рд╕рд╣рд┐рдд) рдирд╛рдордХ рд╕рднреА рддрд░реАрдХреЛрдВ рдкрд░ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ ObjC рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдирдХреЗ рдирд╛рдо рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -[UIViewController viewDidLoad] , рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк UIViewController рд╡рд░реНрдЧ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдПрд▓рдПрд▓рдбреАрдмреА рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП 15 рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдорд┐рд▓реЗ:

 Breakpoint 1: 15 locations. 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЙрд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рд░рдЦрд╛ рд╣реИред рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:

 br l 

(рдпрд╣ breakpoint list рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реИ - рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдХрдорд╛рдВрдб рдХрд╛ рдкреВрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред)

рдЦреИрд░, рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:

 Current breakpoints: 1: name = 'viewDidLoad', locations = 15, resolved = 15 1.1: where = Meme Collector`-[ViewController viewDidLoad] + 18 at ViewController.m:27, address = 0x0001f482, resolved, hit count = 0 1.2: where = UIKit`-[UIViewController viewDidLoad], address = 0x005d3db5, resolved, hit count = 0 1.3: where = UIKit`-[_UIModalItemsPresentingViewController viewDidLoad], address = 0x0065ab4b, resolved, hit count = 0 1.4: where = UIKit`-[UIKeyboardCandidateGridCollectionViewController viewDidLoad], address = 0x00680729, resolved, hit count = 0 1.5: where = UIKit`-[UIActivityGroupViewController viewDidLoad], address = 0x008d2b6b, resolved, hit count = 0 1.6: where = UIKit`-[UIPrintPanelTableViewController viewDidLoad], address = 0x009be80f, resolved, hit count = 0 1.7: where = UIKit`-[UIPrintStatusViewController viewDidLoad], address = 0x009c8828, resolved, hit count = 0 1.8: where = UIKit`-[UIPrintRangeViewController viewDidLoad], address = 0x009d29ae, resolved, hit count = 0 1.9: where = UIKit`-[_UILongDefinitionViewController viewDidLoad], address = 0x00a10cf4, resolved, hit count = 0 1.10: where = UIKit`-[_UINoDefinitionViewController viewDidLoad], address = 0x00a1249d, resolved, hit count = 0 1.11: where = UIKit`-[UIReferenceLibraryViewController viewDidLoad], address = 0x00a13bd4, resolved, hit count = 0 1.12: where = UIKit`-[_UIFallbackPresentationViewController viewDidLoad], address = 0x00a77877, resolved, hit count = 0 1.13: where = UIKit`-[_UIViewServiceViewControllerOperator viewDidLoad], address = 0x00aba23b, resolved, hit count = 0 1.14: where = UIKit`-[UIActivityViewController viewDidLoad], address = 0x00b4f296, resolved, hit count = 0 1.15: where = UIKit`-[_UITextEditingController viewDidLoad], address = 0x00b9a6ec, resolved, hit count = 0 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: -[ViewController viewDidLoad] , рдЪреВрдВрдХрд┐ рдмрд╛рдХреА Apple рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЬрд╛рдУ! рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:

 c 

рдЬреЛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ continue рд╣реИ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЬрдм рддрдХ viewDidLoad рдкрд╣рд▓реА рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрддреА рддрдм рддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛:

 Process 1427 resuming Process 1427 stopped * thread #1: tid = 0x83c4, 0x0001f482 Meme Collector`-[ViewController viewDidLoad](self=0x08f7c620, _cmd=0x00c50587) + 18 at ViewController.m:27, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1 frame #0: 0x0001f482 Meme Collector`-[ViewController viewDidLoad](self=0x08f7c620, _cmd=0x00c50587) + 18 at ViewController.m:27 24 25 - (void)viewDidLoad 26 { -> 27 [super viewDidLoad]; 28 self.memeDescriptionTextView.clipsToBounds = YES; 29 self.memeDescriptionTextView.layer.cornerRadius = 20.0f; 30 [self.moneyLabel sizeToFit]; 

"рдФрд░ рдЕрдм ... рдИ-рдпрд╛рд░ ... рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдордЬрд╝реЗрджрд╛рд░ рд╕рдордп рд╣реИ: рдЕрдиреНрдпрдерд╛ рдореИрдВ рдирд╣реАрдВ рдЦреЗрд▓рддрд╛!"



рд╣рдордиреЗ ViewController рд╡рд░реНрдЧ (ViewController.m рдлрд╝рд╛рдЗрд▓) рдХреЗ рдлреНрд░реЗрдо рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдФрд░ рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдХреВрд▓? рдФрд░ рдЕрдзрд┐рдХ! рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рд╕рднреА рд╡рд░реНрдЧреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдзреНрдпрд╛рди! - рдПрдХрд▓ред

рд╣рд╛рдБ, рдПрдХрд▓ред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдХрд╛ рдзреНрдпрд╛рдирдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдХ "рджрд┐рд▓рдЪрд╕реНрдк" рд╡рд░реНрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ MoneyManager рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ purchaseCurrency рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдПрд╣? :)

рд╣рдорд╛рд░реЗ (lldb) рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░реЗрдВ:

 call [[MoneyManager sharedManager] purchaseCurrency] 

рд╣рдордиреЗ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛! рдбрд┐рдмрдЧрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛:

 (BOOL) $0 = YES 

рдпрджрд┐ рд╣рдордиреЗ рдЙрддреНрддрд░ YES рджреЗрдЦрд╛, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЖрднрд╛рд╕реА рдореБрджреНрд░рд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ "рдЕрдзрд┐рдЧреНрд░рд╣реАрдд" рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред (рдпрд╣рд╛рдБ рд▓реЗрдЦрдХ рдиреЗ рдлрдВрджрд╛ рд▓рдЧрд╛рдпрд╛, рдпрд╣ рдЕрдВрджрд░реВрдиреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╣рдо, рдкрдЯрд╛рдЦреЗ, рдЗрд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред - рдкреНрд░рддрд┐ рд╡реНрдпрдХреНрддрд┐ред )

LLDB Enter рджрдмрд╛рдХрд░ рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рдХреЛ рднреА рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдорд┐рдЦрд╛рдЗрд▓ рдорд┐рдЦрд╛рд▓рдХреЛрд╡ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд▓реВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рджрдмрд╛рдПрдВ:

 (lldb) call [[MoneyManager sharedManager] purchaseCurrency] (BOOL) $0 = YES (lldb) (BOOL) $1 = YES (lldb) (BOOL) $2 = YES (lldb) (BOOL) $3 = YES (lldb) (BOOL) $4 = YES (lldb) (BOOL) $5 = YES (lldb) (BOOL) $6 = YES (lldb) (BOOL) $7 = YES (lldb) 

рдореБрдлреНрдд рд╕рд╛рдордЧреНрд░реА рдЦрд░реАрджрдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдХрднреА рдирд╣реАрдВ рд░рд╣рд╛! рдЕрдм рдПрдХ-рджреЛ рдмрд╛рд░ рдХрдорд╛рдВрдб рдбрд╛рд▓реЗрдВ

 c 

... рддрд╛рдХрд┐ рд╕рднреА рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЬреЛ рд╣рдо рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ:



рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рдЦреИрд░, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ Ctrl + C рджрдмрд╛рдПрдВред LLDB рдбрд┐рдмрдЧрд░ рд╣рдорд╛рд░реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдЪрд▓реЛ рдЕрдм рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ: q рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ y рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ:

 (lldb) q Quitting LLDB will detach from one or more processes. Do you really want to proceed: [Y/n] y 

рд╣рдо рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрдЫрд╛рдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдбреАрдмрдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рд░рдирдЯрд╛рдЗрдо рд╣реЗрд░рдлреЗрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рдВрд░рдХреНрд╖рдг


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбрд┐рдмрдЧрд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ! рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдБрдЪ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбрд┐рдмрдЧрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рдордп рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред рдПрдХ рд╣реИрдХрд░ (рдХреНрд░реИрдХрд░, рдЪреАрдЯрд░, ...) рдЗрд╕ рдЪреЗрдХ рдХреЗ рдмрд╛рдж рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдм рдЦрддрд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рд░рди рд▓реВрдк рдореЗрдВ рдЪреЗрдХ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЪреЗрдХ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  2. рдХреЛрдб рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдПрдХ рдЬрд╛рдВрдЪ рдбрд╛рд▓реЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВред

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЖрдорддреМрд░ рдкрд░ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдЗрд╕рдХреА рдХреАрдордд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЧрд░реНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрдорддреА рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИ ред рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред

MoneyManager рд╕рд┐рдВрдЧрд▓рдЯрди рдореЗрдВ рдбрд┐рдмрдЧрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдХрдХреНрд╖рд╛ рдХреЗ рд╕реНрдерд┐рд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрдЬрд╛рдп nil рд▓реМрдЯреЗрдВред

рдЙрдиреНрдирдд рдореЛрдб
рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдВрджреЗрд╢ рд╣реИрдВ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ - рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХреЛрдб рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЦреИрд░, рдЕрдВрдд рдореЗрдВ, рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ! рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓реЗрдВ (рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЖрдИрдбреАрдИ рдпрд╛ Xcode рдореЗрдВ) рдФрд░ MoneyManager.m рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВред рдпрд╣рд╛рдВ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ: рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдореИрдХреНрд░реЛ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдбрд┐рдмрдЧрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ nil рд▓реМрдЯреЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

sharedManager рд╡рд░реНрдЧ рдХреЗ sharedManager рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:

 #ifndef DEBUG SEC_IS_BEING_DEBUGGED_RETURN_NIL(); #endif 

рдЕрдм рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:



SEC_IS_BEING_DEBUGGED_RETURN_NIL() рдПрдХ рдорд╛рдирдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдореИрдХреНрд░реЛ рдХреЛ рдПрдХ рдХреЙрд▓ рд╣реИ рдЬреЛ рдПрдХ рдбрд┐рдмрдЧрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдиреЗ рдкрд░ nil рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рдореИрдХреНрд░реЛ рдХреЗрд╡рд▓ рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╣реА рд░рд┐рд▓реАрдЬрд╝ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
(рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП)
Xcode: рдЙрддреНрдкрд╛рдж> рдпреЛрдЬрдирд╛> рдпреЛрдЬрдирд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ ... (- < ) - рдмрд╛рдИрдВ рдУрд░ рдЪрд▓рд╛рдПрдБ ... рдЬрд╛рдирдХрд╛рд░реА> рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рджрд╛рдИрдВ рдУрд░ рд░рд┐рд▓реАрдЬрд╝ рдЯреИрдмред

AppCode: рднрд╛рдЧреЛ> рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ ... > рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рд░рд┐рд▓реАрдЬрд╝ред


рдЙрдиреНрдирдд рдореЛрдб
рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдореИрдХреНрд░реЛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдУрдмреНрдЬреЗрдХ рд╡рд┐рдзрд┐ рдпрд╛ рд╕реА рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд▓реЗрдХрд┐рди! рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░рдг рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдЬрд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдЬреЛ рдХреЛрдИ рднреА рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреА рдЬрд╛рд╕реВрд╕реА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдкрдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ (рдЖрдЧреЗ рджреЗрдЦрдирд╛: рдпрд╣ рд╣рдо рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ) - рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдирд╛ рдЪреЗрдХ рдЫрд┐рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ, рд╕рд┐рдВрдЧрд▓рдЯрди рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрдЯрд╛рдЦреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдкреИрдЪ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдм IDE рд╕реЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВ (рдХреНрдпрд╛ рдЖрдк рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЪреБрдирдирд╛ рдирд╣реАрдВ рднреВрд▓реЗрдВрдЧреЗ?)

Xcode: рд░рди (тМШR)
AppCode: рдбреАрдмрдЧ (Ctrl + D)

рдЬрдм рдЖрдк рд░рди рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ Xcode рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ LLDB рдбрд┐рдмрдЧрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо: рдЦрд╛рддрд╛ рд╢реЗрд╖ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣рд╛рдБ рдХрд╣реАрдВ nil рд╣реИ:



рдФрд░ AppCode рдореЗрдВ, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдорд╛рдВрдб рд╣реИрдВ: рд░рди рдХрдорд╛рдВрдб рдбреАрдмрдЧрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбреАрдмрдЧ рдХрдорд╛рдВрдб рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред

рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬрд╛рдВрдЪреЗрдВ: рдХреНрдпрд╛ рдЖрдк рдЕрдм рдХреБрдЫ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВ? MoneyManager рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

IDE рдореЗрдВ рд╕реНрдЯреЙрдк рдмрдЯрди (рдЪреБрдХрддрд╛) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЛрдХреЗрдВ ред LLDB рдбрд┐рдмрдЧрд░ рдХреЛ рднреА рд░реЛрдХреЗрдВред рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдВред рдЖрд╡реЗрджрди рдореБрджреНрд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдмрдЧрд░ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЛ рди рдХреЗрд╡рд▓ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдмрд▓реНрдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рд╕рдордп рдкрд░ рдПрдХ рдордирдорд╛рдирд╛ рдмрд┐рдВрджреБ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдВ:

 ps aux | grep "Meme Collector" 

рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ "рдореЗрдореЗ рдХрд▓реЗрдХреНрдЯрд░" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

 dmitriy 2008 0,0 0,0 2432784 636 s001 S+ 1:05 0:00.00 grep Meme Collector dmitriy 2001 0,0 0,4 857416 32240 ?? S 1:04 0:00.65 /Users/dmitriy/Library/Application Support/iPhone Simulator/7.0.3/Applications/9A72F266-8851-4A25-84E4-9CF8EFF95CD4/Meme Collector.app/Meme Collector 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ (рджреВрд╕рд░рд╛ рдХреЙрд▓рдо) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ 2001 рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ, LLDB рдХреЛ -p рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝ рдЬрд╛рдП:

 lldb -p {  } 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ "lldb -p 2001" рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдПрд▓рдПрд▓рдбреАрдмреА рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛:

 Attaching to process with: process attach -p 2001 Process 2001 stopped Executable module set to "/Users/dmitriy/Library/Application Support/iPhone Simulator/7.0.3/Applications/9A72F266-8851-4A25-84E4-9CF8EFF95CD4/Meme Collector.app/Meme Collector". Architecture set to: i486-apple-macosx. 

рдЬрдм LLDB рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, MoneyManager рд╕рд┐рдВрдЧрд▓рдЯрди MoneyManager рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 call [[MoneyManager sharedManager] purchaseCurrency] 

рдореБрджреНрд░рд╛ рдХреЛ "рдЦрд░реАрджрдиреЗ" рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрдм NO рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдФрд░ sharedManager рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВ:

 po [MoneyManager sharedManager] 

рдФрд░ рдЗрд╕ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?

  nil 

рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдерд╛! рд╣рдорд╛рд░рд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрдо рд╕реЗ рдХрдо рдХреЛрдИ рднреА рд╕рдордЭрджрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рди рд╣реА рдпрд╣ рдЦрд░реАрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдкрдЯрд╛рдЦрд╛ nil рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ред

рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ:

 c 

"рдЦрд░реАрдж рдореБрджреНрд░рд╛" рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХреЛ рдХрд╛рдиреВрдиреА рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдХреБрдЫ рдирд╣реАрдВ рдЖрдПрдЧрд╛! рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрд▓рдПрд▓рдбреАрдмреА рдЕрднреА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред



рдбрд┐рдмрдЧрд░ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ: Ctrl + C рджрдмрд╛рдПрдВ рдФрд░ рдлрд┐рд░ q рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВред рдЦрд░реАрдж рдореБрджреНрд░рд╛ рдмрдЯрди рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдбрд┐рдмрдЧрд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдзрд┐рдХ рдХрдареЛрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред Ptrace рдлрдВрдХреНрд╢рди ptrace рд╕рдВрднрд╡ рд╣реЛ, GDB / LLDB рдХреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IDE рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ main.m рдЦреЛрд▓реЗрдВ ред рдПрдХ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:

 #include <sys/ptrace.h> 

рдФрд░ main рд╕рдорд╛рд░реЛрд╣ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рддреАрди рд▓рд╛рдЗрдиреЗрдВ:

 #ifndef DEBUG ptrace(PT_DENY_ATTACH, 0, 0, 0); #endif 

ptrace рдлрд╝рдВрдХреНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдбрд┐рдмрдЧрд░реНрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ GDB рдФрд░ LLDB рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ред рд╣рдордиреЗ ptrace рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝рд╛, рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде PT_DENY_ATTACH рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (рдпрд╛рдиреА, PT_DENY_ATTACH ) рдХреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред

рдЕрдм IDE рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рди рдХрд░реЗрдВред

Xcode : рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рд╣рдо рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рддреБрд░рдВрдд рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рд╡рд╣реАрдВ, Xcode LLDB рдХреЛ рдЗрд╕рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди iOS рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдбреАрдмрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред "рдПрдХ рдмрд╛рд░ рдбрд┐рдмрдЧрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ," Xcode рд╕реЛрдЪрддрд╛ рд╣реИ, "рдЖрд╡реЗрджрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд░реЛрдХреЗрдВред" рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬрдВрдЧрд▓реА рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред - рдиреЛрдЯ рдкреНрд░рддрд┐ред

AppCode : рд░рди (тМШR) рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдбреАрдмрдЧ рдХрдорд╛рдВрдб (Ctrl + D) рдХреЗ рд╕рд╛рде рдпрд╣ Xcode рдХреА рддрд░рд╣ рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИред

рдФрд░ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдЙрд╕ рдкрд░ рдЕрдм рдбрд┐рдмрдЧрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 lldb -p {  Meme Collector} 

рдкрд░рд┐рдгрд╛рдо рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ:

 Attaching to process with: process attach -p 3435 error: attach failed: process did not stop (no such process or permission problem?) 

рдпрд╣ рдЫреЛрдЯреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдХрд░рдг рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рд╕реЗ рд╣рдмреНрд░ рдкрдврд╝рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рджрд╛рдврд╝реА рд╡рд╛рд▓реЗ рд╣реИрдХрд░ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗред рдЬрдм рдЖрдк ptrace рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдЖрдкрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджреЗрдВрдЧреЗред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╣реБрдд рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣реИрдХрд░реНрд╕ рд╕рд╛рдЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдпрд╛рдж рддрд╛рдЬрд╛ рдХрд░рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░рди рд╕рдордп рдореЗрдВ рдУрдмрдЬреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдбреАрдмрдЧрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛ рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рд╣реИ рд╡рд╣ рдЖрдкрдХреЛ рд╕рд╛рдЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рд╢реБрд░реВ рдХреА рдереА:
рдХреЛрдИ рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ!

рд╣рдо рдПрдХ рдмрд╛рдЗрдирд░реА рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЗрд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рдФрд░ рдХреНрдпрд╛ рд╣реИред

рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЗрд░реЗ рдЬреИрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ рдирдП Xcode рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ), рдпрд╛ рддреЛ рдЖрдк рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрдЬрд╛рдп рдбреАрдмрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рд╣реИрдВ - рдкрддреЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

OS X рдФрд░ iOS рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЛ Mach-O рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдмрд╛рдЗрдирд░реА рдПрдХ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдХрд╣рд╛рдВ рдФрд░ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд▓реЛрдб рдЖрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рдж рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЦрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рдХрдорд╛рдВрдб рд╡рд┐рд╢реЗрд╖ рдЭрдВрдбреЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб (рдЦрдВрдб) рдореЗрдВ рдПрдХ рдпрд╛ рдХрдИ рдЦрдВрдб (рдЦрдВрдб) рд╣реЛрддреЗ рд╣реИрдВред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрднрд╛рдЧ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ:


Apple рдХрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рдордЪ-рдУ рдкреНрд░рд╛рд░реВрдк рд╕рдВрджрд░реНрдн рднреА рд╣реИред - рдиреЛрдЯ рдкреНрд░рддрд┐ред

рдЕрдм рд╣рдо рд╕рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП Meme Collector рдмрд╛рдЗрдирд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рд╣реЗрдбрд▓рд╛рдЗрди рд╕реЗред рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рдЕрднреА рднреА рдореБрдЦреНрдп рдмрдВрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ "рдореЗрдореЗ рдХрд▓реЗрдХреНрдЯрд░ .app" рдореЗрдВ, рджрд░реНрдЬ рдХрд░реЗрдВ:

 otool -h "Meme Collector" 

рдпрд╣ рдЖрджреЗрд╢ рдореЗрдореЗ рдХрд▓реЗрдХреНрдЯрд░ рдмрд╛рдЗрдирд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

 Meme Collector: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags 0xfeedface 7 3 0x00 2 25 3372 0x01000085 

рдЙрдиреНрдирдд рдореЛрдб
0xfeedface (0xFEEDFACE) рдПрдХ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдкрддрд╛ рд╣реИ рдпрд╛ ... рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдХреБрдЫ рд╡рд╛рдХреНрдпрд╛рдВрд╢, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛? рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдЙрддреНрддрд░ред - рдиреЛрдЯ рдкреНрд░рддрд┐ред

рдиреЛрдЯ: рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 25 рд▓реЛрдб рдХрдорд╛рдВрдбреНрд╕ ( cmds ) рд╣реИрдВ, рдФрд░ рд╡реЗ 3372 рдмрд╛рдЗрдЯреНрд╕ ( sizeofcmds ) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЗрди рдХрдорд╛рдВрдбреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

 otool -l "Meme Collector" 

(рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдХреЛ ItK рджрдмрд╛рдХрд░ рд╕рд╛рдлрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред - рдиреЛрдЯ рдкреНрд░рддрд┐ ) ред

рдЖрдкрдХреЛ рдХрдИ, рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рдорд┐рд▓реЗрдВрдЧреАред рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдпрд╛рд░реА рдХреЗ рдмрд┐рдирд╛) рдЖрдк рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рд╕реЗрдЧрдореЗрдВрдЯ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзреНрдпрдпрди рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдЖрдЗрдП рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрддреНрд╕реБрдХ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред

рдФрд░ рд╣рдо рдЕрдкрдирд╛ рдкрд╛рда рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред Obobjc_classname рдирд╛рдордХ ) F ) рдЕрдиреБрднрд╛рдЧ __objc_classname , offset рдзреНрдпрд╛рди рджреЗрдВ - рдпрд╣ рдЗрд╕ рдЦрдВрдб рдХреА "рд╕реНрдерд┐рддрд┐" рдпрд╛ "рд╢рд┐рдлреНрдЯ" рд╣реИ рдЬреЛ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдЖрднрд╛рд╕реА рдореЗрдореЛрд░реА рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред

рдЙрдиреНрдирдд рдореЛрдб
offset рдмрд╛рд░реЗ рдореЗрдВред рд╕рдмрд╕реЗ рдЙрддреНрд╕реБрдХ, рд╢рд╛рдпрдж, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Addr рдФрд░ offset рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрд╛, рдХреНрдпреЛрдВ рдпрд╣ рдЕрдВрддрд░ рд╣рд░ рдЬрдЧрд╣ 0x1000 = 4096 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ? рдпрджрд┐ рдЕрднреА рддрдХ рдирд╣реАрдВ, рддреЛ __PAGEZERO рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдкреГрд╖реНрдаред

рдпрд╣рд╛рдВ __objc_classname рд╕реЗрдХреНрд╢рди рдХреА рд╢рд┐рдлреНрдЯ 159942 рдмрд╛рдЗрдЯреНрд╕ (рджрд╢рдорд▓рд╡ рдореЗрдВ) рд╣реИред рдиреАрдЪреЗ рдХреА рдЫрд╡рд┐ рдореЗрдВ, рдмрд╛рдИрдВ рдУрд░ - рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рддред

рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЬрд╛рдПрдВред рдПрдХ рдирдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ () N ) рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ "Meme рдХрд▓реЗрдХреНрдЯрд░.рдПрдкреНрдк " рдХрд░реЗрдВ:

 strings -o "Meme Collector" 

strings рдХрдорд╛рдВрдб рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ -o рдзреНрд╡рдЬ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд┐рдЦреЗрдЧрд╛ред

рдЦреИрд░, 159942 рдореЗрдВ рдХреНрдпрд╛ рд╕реНрдерд┐рдд рд╣реИ? рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо! (рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред) рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо __objc_classname рдЕрдиреБрднрд╛рдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рдереЗ:



рд╕реАрдзреЗ рдЗрд╕ рдЦрдВрдб рдХреЗ рдКрдкрд░, рд╣рдо __objc_methname рдЕрдиреБрднрд╛рдЧ рджреЗрдЦрддреЗ рд╣реИрдВ, рдпрд╣ 140887 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╣реИрдВ (рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП), рдЬреЛ рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред

рдЙрдиреНрдирдд рдореЛрдб
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ init рдкрджреНрдзрддрд┐ рдкрд╣рд▓реЗ рдХреНрдпреЛрдВ рдЖрддреА рд╣реИ?

рдЬрд╣рд╛рдБ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдо рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред __objc_classname рд╕реЗрдХреНрд╢рди __objc_classname рд╕реЗрдХреНрд╢рди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреВрдЯ рдХрдорд╛рдВрдб рдореЗрдВ, рд╡реЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЪрд▓реЗ рдЧрдП - рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВред

рддреЛ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдХ-рдУ рдмрд╛рдЗрдирд░реА рд╣реИ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВ ... рддрджрдо! рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╕рдВрд╢реЛрдзрдиред

рднрд╛рд░реА рддреЛрдкрдЦрд╛рдиреЗ: disassembler рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ


рдХреНрдпрд╛ рдЖрдк рдЧрдВрднреАрд░ рдмрдВрджреВрдХреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ? рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП!

рдЖрдк рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕реБрдирддреЗ рд╣реИрдВ: рдЖрд╡реЗрджрди "рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛" рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗ ... рдПрдордПрдордПрдо ... рдЕрд▓рдЧ рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЗрд░рд╛рджрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо (рд▓реЗрдЦрдХ рдФрд░ рдЕрдиреБрд╡рд╛рджрдХ) рдкреВрд░реА рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдЖрдкрдХреА рдЕрдЪреНрдЫреА рд╕реЗрд╡рд╛ рдХрд░реЗрдЧрд╛ред рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреАрдП рдбреЗрдореЛ рдФрд░ рдХреБрдЫ рд╣реЗрдХреНрд╕ рдПрдбрд┐рдЯрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рд╣реЗрдХреНрд╕ рдлреЗрдиреЗрдВрдб ред рдЖрдИрдбреАрдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдмрд╛рдЗрдирд░реА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╕рдордп рд╣реИрдХрд░реНрд╕ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░, рдбрд┐рдмрдЧрд░ рдФрд░ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИред рдФрд░ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдЗрддрдирд╛ рдорд╣рдВрдЧрд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рд▓рдЧрднрдЧ 15 рд╕реЗрдХрдВрдб рдкрд╣рд▓реЗ рд╕реБрдирд╛ рдерд╛, рддреЛ рдЖрдИрдбреАрдП рд╕реАрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реАрдорд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдХреЛрдбрд╛рдВрддрд░рдХ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЕрдзреНрдпрдпрди рдЗрд╕рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЕрдХреНрд╖рдо рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ x86 рдЕрд╕реЗрдВрдмрд▓рд░ рдЯрд╛рдЗрдк рд╣реИред рдФрд░ рд╣рдо рд╕рднреА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд░реЗрдВрдЧреЗ - рд╣реЗрдХреНрд╕ рдлрд╝реЗрдВрдбред
рдЙрдиреНрдирдд рдореЛрдб
"рдЕрд╕реЗрдВрдмрд▓рд░ рдЯрд╛рдЗрдк ... x86 рдХреИрд╕рд╛ рд╣реИ? ARM?┬╗ тАФ . , iOS- ARM-. x86. , , .

рдЖрдИрдбреАрдП рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ Ada Lovelace рдиреЗ рд╣рдорд╛рд░рд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рд╣реИ: Go

рдмрдЯрди рджрдмрд╛рдПрдВ ред рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рд╣рдо (рд╣рд╛рдВ, рд╣рд╛рдВ) рдЕрднреА рднреА рдмрдВрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ ( ) рдореЗрдВ рд╣реИрдВред рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдлрд╝рд╛рдЗрдВрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ:Meme Collector.app

 open -R . 

рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рдпрд╣рд╛рдВ рдбреЙрдЯ рдкреНрд░рддреАрдХ рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░"ред

рдЕрдЧрд▓рд╛, рдЦреЛрдЬрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЬреЛ рдЦреБрд▓рддрд╛ рд╣реИ, рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ> рдкреИрдХреЗрдЬ рд╕рд╛рдордЧреНрд░реА рджрд┐рдЦрд╛рдПрдВ :



(OS Mavericks рдмрдВрдбрд▓ рдХреЛ "рдкреИрдХреЗрдЬ" рдХрд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрд╕реА рдореЗрдВ рдпрд╣ рдирд╛рдо рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред - рдзреНрдпрд╛рди рджреЗрдВред )

рдмрдВрдбрд▓ рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реЗрдЧреАред Meme Collector, рдЗрд╕реЗ рдЖрдИрдбреАрдП рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреАрдВрдЪреЗрдВ рдФрд░ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдИрдбреАрдП рдиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рдЗрдирд░реА рдПрдХ i386 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИред

рдЖрдкрдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдмрджрд▓рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛) - рдФрд░ "рдЪрд▓реЛ рдЪрд▓реЗрдВ!" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ редрдареАрдХ рд╣реИред Disassembler рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреА рдпреЛрдЬрдирд╛ (рдореИрдкрд┐рдВрдЧ) рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ - рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди ... рдХреИрд╕реЗ рдХрд╣реЗрдВ ... рдЕрдзрд┐рдХ рдкреЗрд╢реЗрд╡рд░ред :)

рдпрджрд┐ рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ "рдЙрджреНрджреЗрд╢реНрдп-рд╕реА 2.0 рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? тАЭ- рдЙрддреНрддрд░ рд╣рд╛рдБред рдпрджрд┐ рдЖрдк "рдирд┐рдХрдЯрддрд╛ рджреГрд╢реНрдп" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреВрдЫрддреЗ рд╣реИрдВ, рддреЛ рдЙрддреНрддрд░ рдирдВред

рдЬрдм рдЖрдИрдбреАрдП рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрдореЗ рдореЗрдВ рдЖрдПрдВрдЧреЗ ред рдпрджрд┐ рдЖрдИрдбреАрдП рд╡рд┐рдВрдбреЛ рдмрд╣реБрдд рдиреАрдЪреЗ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╛рдПрдВ рдкреИрдирд▓ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдвреВрдВрдвреЗрдВ start, рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рддрдм рддрдХ рд╕реНрдкреЗрд╕рдмрд╛рд░ рджрдмрд╛рдПрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реБрдВрджрд░ рдлрд╝реНрд▓реЛрдЪрд╛рд░реНрдЯ рдХреЛ рди рджреЗрдЦреЗрдВ:


(рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕реНрдерд╛рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛, рдореБрдЭреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдХ рдпрд╛ рдПрдХ рдмрд╛рд░ рдкреНрд░реЗрд╕ рдХрд░рдирд╛ рдерд╛ред рдареАрдХ рд╣реИ, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИред - рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ )

рдФрд░ Xcode рдпрд╛ AppCode рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рджреЗрдЦреЗрдВрдЧреЗред

рдУрдкрдиMoneyManager.m рдФрд░ рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВbuyObject:

 - (BOOL)buyObject:(id<PurchasableItemProtocol>)object { NSUInteger totalMoney = self.money.unsignedIntegerValue; NSUInteger cost = [object cost].unsignedIntegerValue; if (totalMoney < cost) { return NO; } _money = @(totalMoney - cost); return [self saveState]; } 

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬрд╛рдиреЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдореЗрдВ _moneyрднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ NOрдФрд░ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рдПрдХ рдЦрд░реАрдж рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ / рд░реЛрдХрдирд╛ рдПрдХ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдкреИрд╕рд╛ рд╣реИ? (рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╕реНрдЯреЛрд░ рдореЗрдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ? - рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ред )

рдпрджрд┐ рдЖрдк рдЗрд╕ рдЪреЗрдХ ("рдХреВрджреЛ рдУрд╡рд░", рдЕрд╕реЗрдореНрдмрд▓рд░ рд╢рдмреНрджреЛрдВ рдореЗрдВ) рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реИрдВ - рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХреЛрдИ рднреА рдЪреАрдЬрд╝ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЦрд░реАрджрддреЗ рд╕рдордп рдореВрд▓реНрдп _moneyрдХреЛ рдПрдХ рдХрд╛рд░рдХ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдм рд╣рдореЗрдВ disassembler рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдИрдбреАрдП рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкреИрдирд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рдмрд╕ рдЗрд╕ рдкреИрдирд▓ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдлрд┐рд░ Ctrl + F рджрдмрд╛рдПрдВ(рдпрд╛ рдореЗрдиреВ рд╕реЗ: рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ> рддреНрд╡рд░рд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ )ред рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд╣рдореЗрдВ buyObject:



рд╣рд╛рдВ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ , рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЖрдИрдбреАрдП рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдПрдЧрд╛, рдЬреЛ рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рдФрд░ рдХреЛрдб рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:



рднрд▓реЗ рд╣реА рдЖрдк рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реНрдХреВрд▓ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВ , рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ buyObject:рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ "рджрд╛рдпрд╛рдБ" рддреАрд░ рдареАрдХ рдЙрд╕реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо рд╣реИрдХрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╡рд╣рд╛рдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рд▓рд╛рд▓ рддреАрд░ "рдмрд╛рдПрдВ" рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд " return nil" рдЬреИрд╕рд╛ рд╣реИ ред

рдореИрдВ рдЖрдкрдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд▓реЛрдб рдХрд░реВрдВрдЧрд╛ред рдЖрдЗрдП рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░ ("рдХреВрдж") рдХреЛ рджреЗрдЦреЗрдВ, рдКрдкрд░реА рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рджреЛ рддреАрд░ рдЪрд▓рддреЗ рд╣реИрдВ - рд▓рд╛рд▓ рдФрд░ рд╣рд░реЗред рдпрд╣ рд╣реИjnb, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдиреАрдЪреЗ рдирд╣реАрдВ рддреЛ рдХреВрджреЛ" (рдЬрд╛рдУ рдЕрдЧрд░ "рдХрдо рдирд╣реАрдВ")ред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╣рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ "рдЬрдВрдк рд╣рдореЗрд╢рд╛" - рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП jmpред

рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдСрдкрд░реЗрдВрдб рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ jnbред рдЗрд╕реЗ рдкреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдЯреЗрдХреНрд╕реНрдЯ рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреЗрд╕рдмрд╛рд░ рджрдмрд╛рдПрдВред

рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд░реИрдЦрд┐рдХ рд░реВрдк рдореЗрдВред рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдирдВрдмрд░ рдвреВрдВрдвреЗрдВ jnb(рдпрд╣ рд▓рд╛рдЗрди рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреА рдЧрдИ рд╣реИ):



рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрддрд╛ 0x00018D88 рдирд┐рдХрд▓рд╛ред рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреНрдп рдкрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдСрдкрд░реЗрдВрдб рдХреЛрдб " jnb short" рд╡рд╣ 0x73??рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдСрдлрд╕реЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдСрдкрд░реЗрдВрдб рдХреЛрдб рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ 0xEB??- рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреВрдж рдХреЛрдб "jmp short"(рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП)ред рдореБрдЭреЗ рдХрд╣рд╛рдВ рд╕реЗ рдСрдкрд░реЗрдВрдб рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реБрдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯреЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдореИрдиреБрдЕрд▓ рд╕реЗ (рд╡реИрд╕реЗ, рдПрдХ рд░реЛрдорд╛рдВрдЪрдХ рд░реАрдб!)

рдбрд╛рдЙрдирд▓реЛрдб (рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рд╣реЗрдХреНрд╕ рдлрд╛рдИрдиреНрдб ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ /Applicationsрд╕реЗ рдХреЙрдкреА рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред рдЯрд░реНрдорд┐рдирд▓ рд╕реЗред (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЕрднреА рднреА рдмрдВрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ "рдореЗрдореЗ рдХрд▓реЗрдХреНрдЯрд░.рдПрдкреНрдк" рдореЗрдВ рд╣реИрдВ) рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВ:

 open -a "/Applications/Hex Fiend.app/" "Meme Collector" 

рдПрдХ рд╡рд┐рдВрдбреЛ рд╣рдорд╛рд░реЗ рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде рдЦреБрд▓рддреА рд╣реИред рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдирд╛?рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рджреЛрд╕реНрдд: __objc_classnameрдФрд░ рдЕрдиреНрдп рдЕрдиреБрднрд╛рдЧред рд╣рдорд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣реЗрдбрд░ рд╣реИред


рдЕрдм рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░реЗрдВ:

 otool -l "Meme Collector" | grep -a10 "sectname __text" 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛, рдпрд╣ otool -lрдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдХреЛрдб рдЕрдиреБрднрд╛рдЧ ("рдЯреЗрдХреНрд╕реНрдЯ" рдЕрдиреБрднрд╛рдЧ) рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЦреЛрдЬ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрдХреАрд░реНрдг рдХрд░рддреЗ рд╣реИрдВ grepред рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рд╛:

  segname __TEXT vmaddr 0x00001000 vmsize 0x0002e000 fileoff 0 filesize 188416 maxprot 0x00000007 initprot 0x00000005 nsects 11 flags 0x0 Section sectname __text segname __TEXT addr 0x00002970 size 0x0001dec3 offset 6512 align 2^4 (16) reloff 0 nreloc 0 flags 0x80000400 reserved1 0 reserved2 0 

рдпрд╣рд╛рдВ рд╣рдо рдЕрдиреБрднрд╛рдЧ ( addr) 0x00002970, рдФрд░ рд╢рд┐рдлреНрдЯ ( offset) - 6512 (рджрд╢рдорд▓рд╡) рдХрд╛ рдкреНрд░рд╛рд░рдВрдн рдкрддрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ ред рдЖрдк рдЖрдИрдбреАрдП рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрддрд╛ рдЬрд╣рд╛рдВ рд╕реЗ рдХреЛрдб рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдареАрдХ 0x2970 рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рдКрдкрд░ рддрдХ ("рд░реИрдЦрд┐рдХ" рд░реВрдк рдореЗрдВ) рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред (рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ, рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрд░реНрде рд╕рдорд╛рди рд╣реИ)ред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!рдЕрдВрдХрдЧрдгрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп: рдЖрдкрдХреЛ jnbрджреНрд╡рд┐рдЖрдзрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ ("рдкрд╛рда" рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрд╛ рдЧрдпрд╛) рдХреА рднрд░рдкрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдпрджрд┐ рдЖрдк рдЖрдИрдбреАрдП рдореЗрдВ рдкрд╛рдП рдЧрдП рдкрддреЗ рдкрд░ рдмрд╛рдЗрдЯреНрд╕ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред

рдЗрд╕рд▓рд┐рдП рд╡рд┐рдЪрд▓рд┐рдд рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдореВрд▓рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ:

{рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХреА рдирд┐рд░рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддрд┐} = =
{рдХрдорд╛рдВрдб рдПрдбреНрд░реЗрд╕} - {рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗрдХреНрд╢рди рдХрд╛ рд╕реНрдЯрд╛рд░реНрдЯ рдПрдбреНрд░реЗрд╕} + {рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗрдХреНрд╢рди рдХрд╛ рд╢рд┐рдлреНрдЯ}}

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ:

рдХрдорд╛рдВрдб рдПрдбреНрд░реЗрд╕ jnb: 0x18D88 (рдЖрдИрдбреАрдП рд╕реЗ)
рдкрд╛рда рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ = 0x2970 (рдХрд╛ otool) рдкрд╛рда рдЦрдВрдб рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
= рджрд╢рдорд▓рд╡ 6512 (рдХрд╛ otool)

рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд▓реЗрдВ, рдореЗрдиреВ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ: рджреЗрдЦреЗрдВ> рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП ... (рджрд╢рдорд▓рд╡ рдФрд░ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ)ред

рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛:
0x18D88 - 0x2970 + 6512 = 0x17D88

рдЙрдиреНрдирдд рдореЛрдб
┬лAdvanced Mode┬╗ , 0x1000 (0x18D88 тАУ 0x17D88).

рдпрджрд┐ рдЖрдкрдХреА рдЧрдгрдирд╛ рд╕рд╣реА рдирд┐рдХрд▓реА рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрддрд╛ рд╣реЛрдЧрд╛ jnbрдЬреЛ рд╣рдордиреЗ рдЖрдИрдбреАрдП рдореЗрдВ рджреЗрдЦрд╛ рдерд╛ред рдЕрдм Hex Fiend рдореЗрдВ рдПрдбреНрд░реЗрд╕ рдЗрдирдкреБрдЯ рдлреАрд▓реНрдб рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП ( L (рдпрд╛ Edit> Jump To Offset рдореЗрдиреВ рд╕реЗ ) рджрдмрд╛рдПрдВ ред рдЕрдкрдирд╛ рдкрддрд╛ рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ (рдпрджрд┐ рдЖрдк рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ 0xрд╢реБрд░реБрдЖрдд рдореЗрдВ рдордд рднреВрд▓рдирд╛ )ред

Hmm, рджрд╢рдорд▓рд╡ рдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдирдВрдмрд░ред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░реЗрдВ: 0x17D88 = 97672, рдЕрд░реНрдерд╛рдд 97664 рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЖрдкрдХреЛ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдФрд░ 8 рдмрд╛рдЗрдЯреНрд╕ рдЧрд┐рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 8 рдмрд╛рдЗрдЯреНрд╕ = 16 рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдЕрдВрдХ = рджреЛ 4-рдмрд╛рдЗрдЯ рд╢рдмреНрджред рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рд╣реЗрдХреНрд╕ рдлрд╛рдИрдиреНрдб рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА "рдкрд╛рда" рд╢рдмреНрджреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИ: рд╣рдо


рдкрд╣рд▓реЗ рджреЛ рд╢рдмреНрджреЛрдВ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рддреАрд╕рд░реЗ рд╢рдмреНрдж рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ - рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ - рд╣рдорд╛рд░рд╛ рдСрдкрд░реЗрд╢рди рдХреЛрдб 0x7304ред 0x73- рдирд┐рд░реНрджреЗрд╢ рдХреЛрдб, рдФрд░0x04- рдСрдлрд╕реЗрдЯ, рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЖрдЧреЗ "рдХреВрдж" рдЪрд╛рд╣рд┐рдПред

рд╕рд╣реА 0x73рдкрд░ 0xEB(рдзреАрд░реЗ тАЛтАЛрд╕реЗ: рдмреИрдХрд╕реНрдкреЗрд╕ рдХреЛ рдПрдХ рдмрд╛рд░ рджрдмрд╛рдиреЗ рдкрд░ 1 рдмрд╛рдЗрдЯ рдПрдХ рдмрд╛рд░ = рджреЛ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ)ред рд╕рд╣реЗрдЬреЗрдВ ( тМШS ) рдФрд░ рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░реЗрдВред рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЦреЛрд▓реЗрдВ, рдореЗрдореЛрд░реА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ (рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ, рдФрд░ рдЖрдИрдбреАрдИ рд╕реЗ рдирд╣реАрдВ, рддрд╛рдХрд┐ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛рдП)ред рдЬрдм рддрдХ рдЖрдк рдкреИрд╕реЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ рддрдм рддрдХ рдореЗрдореЗ рдЦрд░реАрджреЗрдВред рдЬрдм рдЖрдкрдиреЗ рдРрд╕рд╛ рдЙрддреНрдкрд╛рдж рдЦрд░реАрджрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдЖрдкрдХреЗ "рдкреИрд╕реЗ" рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ?

рд╣рд╛рдВ, рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкреИрд╕рд╛ рд╣реИ?" рдЗрд╕ рд╢рд░реНрдд рдХрд╛ рдПрдХ рдЪреЗрдХ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдкреИрд╕реЗ рдХреЗ рдмрд┐рдирд╛ рднреА рд▓реЗрдирджреЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмреЛрдирд╕: рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореВрд▓реНрдп_money"рд▓реВрдкреНрдб", рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдХреЗ рдХрд╛рд░рдг, рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рдмрдЬрд╛рдп рдпрд╣ 10 32 (рд▓рдЧрднрдЧ 4 рдмрд┐рд▓рд┐рдпрди) рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред

рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╕рдВрд░рдХреНрд╖рдг


рд╣рдо рдЕрдкрдиреА рд░рдХреНрд╖рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛: "рдХреБрдЫ рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред" рдпрд╣ рдХрдерди рднреА рдпрд╣рд╛рдБ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддреЗ рдпрджрд┐ рд╡рд╣ рдЧрдВрднреАрд░ рд╣реИред рдЖрдкрдХреА рдПрдХрдорд╛рддреНрд░ рдЖрд╢рд╛ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдЗрддрдирд╛ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдВред

рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред рдЖрдИрдбреАрдИ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ "рдореЗрдо рдХрд▓реЗрдХреНрдЯрд░-рдкреНрд░реАрдлрд┐рдХреНрд╕.рдкрдЪ" рдвреВрдВрдвреЗрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:

 #define MoneyManager DS_UIColor_Theme 

рдпрд╣ рдХреЛрдб " MoneyManager" рдХреА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдХ рдРрд╕реЗ рдирд╛рдо рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛ рдЬреЛ рдкрдЯрд╛рдЦреЗ рдХреЗ рд▓рд┐рдП рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ: " DS_UIColor_Theme"ред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдХреБрдЫ рднреА рдЯреВрдЯ рди рдЬрд╛рдПред рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЪрдпрдирд┐рдд рдирдпрд╛ рдирд╛рдо рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рднреНрд░рдорд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдЕрдХрдердиреАрдп рдЪреАрдЬреЗрдВ рд╣реЛрдиреЗ рд▓рдЧреЗрдВрдЧреАред

рдЖрдорддреМрд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкрдардиреАрдп рдирд╛рдореЛрдВ рдореЗрдВ рдкрддреЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдФрд░ рдЕрдм, рдХреЛрдб рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЪрд░рд┐рддреНрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИред рдпрд╣ C рдФрд░ C ++ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдЫреБрдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд╕рдВрджреЗрд╢ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ objc_msgSend()ред рдлрд┐рд░ рд╕реЗ рдордиреАрдореИрдиреНрдЬрд░

рдЦреЛрд▓реЗрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд C рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:

 BOOL aSecretFunction(void) { return YES; } 

рдлрд┐рд░ рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ:

 nm "Meme Collector" | grep aSecretFunction 

рдЖрджреЗрд╢ nmрд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ grepрдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:

 00018b8f t _aSecretFunction 

IOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╡рд░реНрдг рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рджреЛ рд╡рд┐рдХрд▓реНрдк рдвреВрдВрдврдирд╛ рд╣реИ: рддреИрдирд╛рддреА рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рд╕реНрдЯреНрд░рд┐рдк рд▓рд┐рдВрдХреНрдб рдЙрддреНрдкрд╛рдж, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд╛рдВ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:



рдлрд┐рд░ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ "рдХреНрд▓реАрди" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (Xcode: рдЙрддреНрдкрд╛рдж) рдХреНрд▓реАрди рдпрд╛ рдРрдкрдХреЛрдб рдореЗрдВ: рд░рди> рдХреНрд▓реАрди ) рдФрд░ recompileред рдлрд┐рд░ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЙрд╕реА рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдПрдВ:

 nm "Meme Collector" | grep aSecretFunction 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!рд╣рдордиреЗ рдЙрд╕ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд┐рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ aSecretFunction()ред рдЕрдм, рдХреНрд░реИрдХрд░ рдХреЛ рдХреЛрдб рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?


рд╣рдордиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рдЗрди рдмрд╛рддреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реБрд░рдХреНрд╖рд╛ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рд╕рдордп), рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕реНрддрд░ рдФрд░ рд╣реИрдХрд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрддреБрд▓рди рд╣реИред

IOS рдРрдк рд╕реБрд░рдХреНрд╖рд╛ рдПрдХ рдЧрдВрднреАрд░ рд╡рд┐рд╖рдп рд╣реИред рдЖрдк рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреА рддрдХ рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╕рддрд╣ рдХреЛ рдереЛрдбрд╝рд╛ рдЦрд░реЛрдВрдЪ рджрд┐рдпрд╛ рд╣реИред рдбреАрдмрдЧрд░ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯреВрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрд╣реБрдд рдЧрд╣рд░реА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЯреЗрд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЬреЗрд▓рдмреНрд░реЗрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдореГрджреНрдз рднреЛрдЬрди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣реИрдХрд┐рдВрдЧ рдФрд░ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ(рд▓реЗрдЦрдХ рдЬреЛрдирд╛рдерди рдЬрд╝рдбрдЬрд╝рд╛рд░реНрд╕реНрдХреА)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ (рдЖрдкрдХреЛ рдРрдкреНрдкрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рддрдВрддреНрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдЧреВрдЧрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХрд╛ рд▓реЗрдЦрдХ рдЖрдИрдУрдПрд╕ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рдЙрдирдХреА рдкрд╕рдВрджреАрджрд╛ рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
рдПрдХ рдЬреЛрдбрд╝реА рдФрд░ рдХрд┐рддрд╛рдмреЗрдВ:
рд╣реИрдХрд┐рдВрдЧ: рдж рдЖрд░реНрдЯ рдСрдлрд╝ рдПрдХреНрд╕рдкреНрд▓реБрдпреЗрд╢рди, рдЬреЙрди рдПрд░рд┐рдХрд╕рди
рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдФрд░ рдЖрдИрдУрдПрд╕ рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг : рдЬреЛрдирд╛рдерди рд▓реЗрд╡рд┐рди рджреНрд╡рд╛рд░рд╛ рдПрдкреНрдкрд▓ рдХреЗ рдХреЛрд░ рдХреЛ
рдордВрдЪ:
http://www.woodmann.com
http://www.reddit.com/r/ReverseEngineering
рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд░ рдЕрдиреБрдЪреНрдЫреЗрдж:
http://blog.timac.org/?p=761

рд▓реЗрдЦрдХ рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдФрд░ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ x128.ru рдореЗрд▓ рджреЗрд╡ рдХреЛ @рд▓рд┐рдЦреЗрдВ ред

Source: https://habr.com/ru/post/In199130/


All Articles