Swift의 Memory Layout 이해하기
·
Programing Langauge/swift
👋 들어가기 전Swift에서 데이터를 Bytes로 변환하거나 반대로 Bytes에서 특정 타입으로 변환하는 코드를 보다 보면 MemoryLayout, alignment, padding, stride와 같은 개념을 마주치게 된다. 처음에는 단순히객체 → BytesBytes → 객체 정도로 생각할 수 있지만, 메모리에 실제 데이터가 어떻게 배치되어 있는지를 이해하지 못하면 이런 코드의 동작을 정확하게 이해하기 어렵다. 특히 UnsafeRawPointer, withUnsafeBytes 등을 사용하는 코드에서는 Swift의 추상화된 값이 실제 메모리에서 어떻게 표현되는지를 알아야 한다. 이번 글에서는 먼저 Swift의 메모리 레이아웃을 간단하게 살펴보자.🏁 학습할 내용Swift 메모리 레이아웃의 4대 요소Me..
InlineArray와 Span
·
Programing Langauge/swift
👋 들어가기 전Swift 6+에서 새로 도입된 InlineArray와 Span은 성능 최적화와 메모리 안전성을 동시에 잡기 위한 핵심 기능이다.기존 Swift에서 저수준 메모리를 다룰 때 느꼈던 한계와, 이를 극복하기 위해 등장한 두 개념의 배경과 사용법을 알아보자.🏁 학습할 내용기존 방식(Array, Tuple, UnsafeBufferPointer)의 한계점InlineArray와 Span의 핵심 역할 및 동작 원리InlineArray와 Span 비교 정리실제 Swift 사용 코드✊ 기존 방식의 한계와 배경 기존 Swift에서 고정 크기의 소규모 데이터나 저수준 메모리에 접근할 때는 성능과 안전성 사이에서 타협이 필요했어.Array: 가변 크기를 지원하는 힙(Heap) 할당 타입이라, 크기가 작은 ..
SIL로 Swift 클로저 뜯어보기
·
Programing Langauge/swift
👋 들어가기 전이전 학습에 이어서, 이번는 간단한 형태의 클로저, 구조체, 클래스를 SIL로 변환시켜 해석해보자. 중복된 내용은 생략하고, 각 타입에 특별한 SIL 문법을 읽어보자.🏁 학습할 내용클로저외부 참조 없는 클로저외부 참조 있는 클로저1️⃣ 외부 참조가 없는 클로저var clo1: (Int, Int) -> Int = { a, b in return a + b }print(clo1(1,2)) 🔥 전역 변수 및 클로저 정의 섹션 // 1. 전역 변수 clo1 선언 (저장 공간 및 초기값 가짐)@_hasStorage @_hasInitialValue var clo1: (Int, Int) -> Int { get set }// 2. 실제 SIL 내에서 관리되는 전역 기호(Symbol)sil_gl..
SIL 맛보기
·
iOS/SwiftUI
👋 들어가기 전이번 시간은 컴파일 과정과 그 과정중에 있는 SIL에 대해 한번 알아보자.🏁 학습할 내용컴파일 과정컴파일 과정 중, SIL의 역할간단한 SIL 해석하기⚙️ 컴파일 과정 🌳 AST (Abstract Syntax Tree, 추상 구문 트리) 단계컴파일의 첫 시작은 소스 코드를 컴퓨터가 분석하기 좋은 구조로 바꾸는 것구문 분석 (Parsing)Swift 소스 코드(.swift)를 읽어 들여 문법 구조를 트리 형태로 만듬.이 단계에서는 문법이 맞는지(괄호가 잘 닫혔는지 등)만 확인의미 분석 및 타입 체킹 (Semantic Analysis & Type Checking):컴파일러가 AST를 훑으며 타입을 추론하고 검사 (예: String 변수에 Int를 대입하려고 하면 여기서 에러 감지.)이 과..
소유권이란?
·
Programing Langauge/swift
👋 들어가기 전최근 일과 사이드 프로젝트에 바쁘게 생활하고 있어, 기저 개념을 학습할 수 있는 시간과 기회가 부족했는데팀동료께서 좋은 개념을 설명해주셔서 한번 학습해보려고 한다. 주제는 바로 제목과 같이 소유권이라는 개념과 함꼐 Swift 진영에서는 어떻게 다루고 있는 지 살펴보려고한다.🏁 학습할 내용소유권은 무엇이고, 왜 필요한가?Copyable과 ~CopyableborrowingconsumeconsumingSIL 맛보기🧐 소유권은 무엇이고, 왜 필요한가? 1️⃣ 소유권아래 코드가 있을 떄, 메모리 관점에서 다음 지문들을 생각해보자.let a = Data(...)let b = aa ----+ | ↓ Data ↑ |b ----+누가 Owner인가?언제 O..
바이너리 분석하기
·
iOS/Modularization
👋 들어가기 전랭그래프 포스팅 이후, 약 3개월만의 포스팅이다..회사와 사이드에 치이다보니, 학습시간이 많이 없어 포스팅을 할께 없었다. 이번 포스팅은 최근 회사에서 바이너리를 분석하는 경험을 하게되었는데, 그 때 알게된 지식과 유용한 tool 사용버을 기록하고자한다.🏁 학습할 내용nmotool✊ nm유닉스 계열 운영체제의 object, 실행, 라이브러리등파일내에 포함된 심볼을 확인하는 도구🚀 역할컴파일/링크 오류 디버깅라이브러리 분석바이너리 분석 💬 명령어nm -[옵션 나열..] [파일]옵션설명-n (numeric-sort)주소 순서대로 정렬-u (undefined-only)정의도지 않은 심볼만 -C (Demangle)Mangling 심볼을 다시 사람이 읽기 쉬운 형태로 변환-D (dyamic)..