Slide 1

Slide 1 text

ΞηϯϒϦͰֶͿCPUΞʔΩςΫνϟ akkey / @AkkeyLab iOSDC Japan 2025

Slide 2

Slide 2 text

ྺ࢙త෼ذ఺

Slide 3

Slide 3 text

ྺ࢙త෼ذ఺ 3 https://developer.apple.com/jp/videos/play/wwdc2025/102/?time=3296

Slide 4

Slide 4 text

ྺ࢙త෼ذ఺ 4 https://developer.apple.com/jp/videos/play/wwdc2025/102/?time=3296

Slide 5

Slide 5 text

Macʹ͓͚ΔCPUͷྺ࢙

Slide 6

Slide 6 text

Macʹ͓͚ΔCPUͷྺ࢙ 6 CISC RISC Complex Instruction Set Computer Reduce Instruction Set Computer ໋ྩ͕ෳࡶ ໋ྩ͕୯७

Slide 7

Slide 7 text

Macʹ͓͚ΔCPUͷྺ࢙ 7 1984 MC68000 680x0 CISC ΞʔΩςΫνϟ ઃܭख๏ CPU ຌྫ

Slide 8

Slide 8 text

Macʹ͓͚ΔCPUͷྺ࢙ 8 1984 1992 MC68000 680x0 PowerPC Power RISC CISC ΞʔΩςΫνϟ ઃܭख๏ CPU ຌྫ

Slide 9

Slide 9 text

Macʹ͓͚ΔCPUͷྺ࢙ 9 1984 1992 2006 Intel x86 MC68000 680x0 PowerPC Power RISC CISC CISC ΞʔΩςΫνϟ ઃܭख๏ CPU ຌྫ

Slide 10

Slide 10 text

Macʹ͓͚ΔCPUͷྺ࢙ 10 Apple Silicon Arm 1984 1992 2006 2020 Intel x86 MC68000 680x0 PowerPC Power RISC RISC CISC CISC ΞʔΩςΫνϟ ઃܭख๏ CPU ຌྫ

Slide 11

Slide 11 text

Macʹ͓͚ΔCPUͷྺ࢙ 11 Apple Silicon Arm 1984 1992 2006 2020 x86 Rosetta MC68000 680x0 PowerPC Power RISC RISC CISC CISC Mac 68K Emulator Intel Rosetta 2 ΞʔΩςΫνϟ Ҡߦπʔϧ ઃܭख๏ CPU ຌྫ

Slide 12

Slide 12 text

ΞηϯϒϦͰHello, World!

Slide 13

Slide 13 text

ΞηϯϒϦͰHello, World! 13 ΞηϯϒϦ Ξηϯϒϥ ػցޠ 010100 110101 011010 Ξηϯϒϧ ʂ

Slide 14

Slide 14 text

ΞηϯϒϦͰHello, World! 14 ΞηϯϒϦ Assembly language ϓϩάϥϛϯάݴޠͷͻͱͭͰɺػցޠͱ1:1ʹରԠͨ͠ݴޠ

Slide 15

Slide 15 text

||||||||||||||| ||||||||||||||| ||||||||||||||| ||||||||||||||| 010100 110101 011010 ΞηϯϒϦͰHello, World! 15 ػցޠ Χʔωϧ ϋʔυ΢ΣΞ γεςϜίʔϧ ੍ޚ ʁ ΞηϯϒϦ

Slide 16

Slide 16 text

ΞηϯϒϦͰHello, World! 16 γεςϜίʔϧ System Call ΧʔωϧʹΑͬͯఏڙ͞Ε͓ͯΓɺ
 σʔλͷೖग़ྗ΍ϓϩάϥϜͷऴྃͱ໋͍ͬͨྩ͕͋Δ

Slide 17

Slide 17 text

ΞηϯϒϦͰHello, World! 17 $ man 2 write γεςϜίʔϧ ϚχϡΞϧίϚϯυ ໋ྩ໊ ssize_t write(int fildes, const void *buf, size_t nbyte);

Slide 18

Slide 18 text

ΞηϯϒϦͰHello, World! 18 ssize_t write(int fildes, const void *buf, size_t nbyte); ϑΝΠϧ
 σΟεΫϦϓλ 0ɿඪ४ೖྗ
 1ɿඪ४ग़ྗ
 2ɿඪ४Τϥʔग़ྗ ର৅഑ྻͷ൪஍ ग़ྗόΠτ਺ C

Slide 19

Slide 19 text

ssize_t write(int fildes, const void *buf, size_t nbyte); ΞηϯϒϦͰHello, World! 19 mov x0, #1 adr x1, greeting mov x2, #14 greeting: .ascii "Hello, World!\n" 1 5 10 14 C ASSEMBLY

Slide 20

Slide 20 text

ΞηϯϒϦͰHello, World! 20 mov x0, #1 Φϖίʔυ Φϖϥϯυ Move #1 x0 to ಡΈํɿ Ϩδελ ஋

Slide 21

Slide 21 text

ssize_t write(int fildes, const void *buf, size_t nbyte); ΞηϯϒϦͰHello, World! 21 mov x0, #1 adr x1, greeting mov x2, #14 greeting: .ascii "Hello, World!\n" 1 5 10 14 C ASSEMBLY

Slide 22

Slide 22 text

ssize_t write(int fildes, const void *buf, size_t nbyte); ΞηϯϒϦͰHello, World! 22 mov x16, #4 svc #0x80 C ASSEMBLY ಛผͳׂΓࠐΈ໋ྩ Supervisor Call γεςϜίʔϧϑΝΠϧ͔Β൑அ syscall.h* */Library/Developer/CommandLineTools/SDKs/MacOSX{version_number}.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/syscall.h

Slide 23

Slide 23 text

ΞηϯϒϦͰHello, World! 23 $ man 2 _exit γεςϜίʔϧ ϚχϡΞϧίϚϯυ ໋ྩ໊ void _exit(int status);

Slide 24

Slide 24 text

void _exit(int status); ΞηϯϒϦͰHello, World! 24 mov x0, #0 mov x16, #1 svc #0x80 C ASSEMBLY ऴྃεςʔλε ਖ਼ৗऴྃɿ0

Slide 25

Slide 25 text

ΞηϯϒϦͰHello, World! 25 mov x0, #1 adr x1, greeting mov x2, #14 mov x16, #4 svc #0x80 mov x0, #0 mov x16, #1 svc #0x80 greeting: .ascii "Hello, World!\n" Arm x86

Slide 26

Slide 26 text

ΞηϯϒϦͰHello, World! 26 mov x0, #1 adr x1, greeting mov x2, #14 mov x16, #4 svc #0x80 mov x0, #0 mov x16, #1 svc #0x80 greeting: .ascii "Hello, World!\n" mov $1, %rdi lea greeting(%rip), %rsi mov $14, %rdx mov $0x2000004, %rax syscall xor %rdi, %rdi mov $0x2000001, %rax syscall Arm x86

Slide 27

Slide 27 text

ελοΫτϨʔεΛಡΈղ͘

Slide 28

Slide 28 text

ελοΫτϨʔεΛಡΈղ͘ 28

Slide 29

Slide 29 text

ελοΫτϨʔεΛಡΈղ͘ 29 import SwiftUI let f: (() -> Void)? = nil @main struct CrashCodeApp: App { init() { f!() } var body: some Scene { WindowGroup {} } } Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

Slide 30

Slide 30 text

0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22, x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> ελοΫτϨʔεΛಡΈղ͘ 30

Slide 31

Slide 31 text

0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22, x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> ελοΫτϨʔεΛಡΈղ͘ 31 Φϖίʔυ

Slide 32

Slide 32 text

0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22, x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> ελοΫτϨʔεΛಡΈղ͘ 32 Φϖϥϯυ

Slide 33

Slide 33 text

ελοΫτϨʔεΛಡΈղ͘ 33 సૹ ෼ذ ܭࢉ ෼ذઌͷώϯτ 0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22, x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176>

Slide 34

Slide 34 text

ελοΫτϨʔεΛಡΈղ͘ 34 సૹ ෼ذ ܭࢉ 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> 0x1957e5f9c <+176>: str wzr, [sp, #0x10] 0x1957e5fa0 <+180>: str x8, [sp, #0x8] 0x1957e5fa4 <+184>: mov w8, #0x2 ; =2 0x1957e5fa8 <+188>: strb w8, [sp] 0x1957e5fac <+192>: adrp x0, 1047 0x1957e5fb0 <+196>: add x0, x0, #0x494 ; "Fatal error" 0x1957e5fb4 <+200>: adrp x3, 1047 0x1957e5fb8 <+204>: add x3, x3, #0x750;"Unexpectedly found nil while unwrapping an Optional value"

Slide 35

Slide 35 text

ελοΫτϨʔεΛಡΈղ͘ 35 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> 0x1957e5f9c <+176>: str wzr, [sp, #0x10] 0x1957e5fa0 <+180>: str x8, [sp, #0x8] 0x1957e5fa4 <+184>: mov w8, #0x2 ; =2 0x1957e5fa8 <+188>: strb w8, [sp] 0x1957e5fac <+192>: adrp x0, 1047 0x1957e5fb0 <+196>: add x0, x0, #0x494 ; "Fatal error" 0x1957e5fb4 <+200>: adrp x3, 1047 0x1957e5fb8 <+204>: add x3, x3, #0x750;"Unexpectedly found nil while unwrapping an Optional value" సૹ ෼ذ ܭࢉ

Slide 36

Slide 36 text

ൃల

Slide 37

Slide 37 text

ൃల 37 ॻ੶ൢചதʂ

Slide 38

Slide 38 text

Thank you !!