hopper - cocoaheads€¦ · legit every day uses for hopper • do i need to check for changes...

27
Hopper The disassembler (Not the great flight/hotel booking app)

Upload: others

Post on 27-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

HopperThe disassembler

(Not the great flight/hotel booking app)

Page 2: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

! Hi

Felix Lapalme @lap_felix

iOS Developer @ Transit

Page 3: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

• What is Hopper ? (With a machine code 101)

• What useful things can it do ?

• What less useful (but fun) things can it do ?

Overview

Page 4: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

"

Compiled Languages 101

Code (Swift / Objective-C)

Compiler (LLVM)

Executable/Machine code (ARM, Intel x86)

Page 5: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

We need Hopper to inspect this

part"Compiled Languages 101

Code (Swift / Objective-C)

Compiler (LLVM)

Executable/Machine code (ARM, Intel x86)

Page 6: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

A Simple Program

Page 7: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

… when opened with a text/hex editor

Page 8: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView
Page 9: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

Anatomy of a CPU instruction(Add Immediate Instruction on MIPS32)

100000001000100000000101011110The processor reads this:

Page 10: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

Anatomy of a CPU instruction(Add Immediate Instruction on MIPS32)

OP Code Address 1 Address 2 Immediate value001000 00001 00010 0000000101011110

In assembly:addi $r1, $r2, 350

In English:Add 350 to $r2 and put it in $r1

Page 11: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView
Page 12: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

In Hopper

ASM Mode

Page 13: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView
Page 14: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

In Hopper

Control Flow Graph

Page 15: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

In Hopper

Control Flow Graph

Page 16: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

In Hopper

Control Flow Graph

Page 17: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

In Hopper

Pseudo Code

Page 18: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

In Hopper

Hexadecimal Mode

Page 19: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

Felix, this is cool but how is this useful ?

Page 20: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

Legit every day uses for Hopper

• Do I need to check for changes before calling [some UIKit object setter]

• Is it really worth it to use -[UIStackView initWithArrangedSubviews] ?

• How does UIViewController calculate the frame of its initial view ?

(A non exhaustive list)

• How is UIKit disabling touch interactions during View Controller transitions ?

Page 21: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

How is UIKit disabling touch interactions during View Controller transitions ?• From breakpoints, I see [UIPresentationController runTransitionForCurrentState] is called

Page 22: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

How is UIKit disabling touch interactions during View Controller transitions ?• From breakpoints, I see [UIPresentationController runTransitionForCurrentState] is called • I look at that method in Hopper

Page 23: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView
Page 24: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView
Page 25: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView
Page 26: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

Not very legit uses for Hopper(Demo)

Page 27: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView

Thank you!