티스토리 뷰

공부

Mach-O

Zedd0202 2019. 12. 6. 16:52
반응형



안녕하세요 :) Zedd입니다.

어제 Let'Swift in 판교..모임을 갔었는데, 진짜,,,다들 너므 갓......

진짜 아 너무너무 팬입니ㄷ ㅏ...............진짜 존경과 경외심.........

이제 제 좌우명은 이제 어제보다 더 나은 코드를 짜는 사람이 되자...입니다.......



아무튼 다 너무 좋은 세션이었고, 마지막 민소네님 세션을 들으면서 

뭔가 제가 이런..컴파일러(?)관련 용어..? 라고 하는게 맞는건지도 지금 잘 모르겠는데..zzzz

Mach-O가 뭔지 아시나욥..!?!?!? 

이 용어를 알았으면 더 이해가 잘 됐을텐데 제가 이런 용어들을 잘 몰라서리..

아무튼 공부를 해보고자 합니다 :D

음 근데, 제가 이걸 공부하면서..틀린 내용이 있을 수 있는데 발견하면 꼭!! 댓글로 말씀해주시면 정말로 감사하겠습니다. 


Mach-O



Mach는 사실 저한테는zzzzzz "마하"...로 밖에 안보이는...

근데 왜 한글로는 마하일까요....영어로 발음하면 ㅁ ㅏK..이런 느낌인데..

자 암튼;;


꼭 순서대로 읽어주세요.  흐름...이기 때문...



- Mach-O는 Mach Object file format의 줄임말이라고 합니다!


- Mach는 Carnegie Mellon University에서 개발된 커널(kernel)이라고 합니다.

(커널 : 컴퓨터 과학에서 커널(kernel)은 컴퓨터의 운영 체제의 핵심이 되는 컴퓨터 프로그램의 하나로, 시스템의 모든 것을 완전히 통제한다. 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다.)


TMI긴 하지만....뭐 확실하진 않지만...!!! 위키에 따르면 요 Mach 프로젝트의 수석개발자인 Richard Rashid가 Mach라는 철자를 좋아했다고 해요!?


- Mach-O는 마이크로 커널의 가장 초기 예시로 언급되곤 하는데, 모든 Mach버전이 마이크로 커널인것은 아니래요.

(마이크로 커널 : 마이크로커널(microkernel)은 컴퓨터 과학에서 운영 체제에 추가되어야 하는 메커니즘을 최소한으로 제공하는 초소형 커널이다. ) 


- macOS, iOS, iPadOS, tvOS, 그리고 watchOS에 사용되는 Apple의 XNU가 이 Mach를 기반으로 했다고 합니다.


Apple의 XNU을 알아야겠죠! 이것 역시 처음들어보네요. 

Mach가 커널이랬고, XNU가 이 Mach를 기반으로 만들어졌으니..

XNU도 당연히 커널이겠죠?


맞습니다.

XNU는 애플에서 만든!! 운영체제 커널입니다. 

XNU는 Xcode에서 정의를 타고타고 들어가다보면 만나는 그 Darwin의 일부라고 합니다.

놀랍게도 XNU은...X is Not Unix......의 약자..


저는 아나 뭐ㅇ ㅑ...설마 저 뜻이겠어..!?..애플 오피셜을 보기 전까지 못믿겠는데..?


출처 : https://developer.apple.com/library/archive/documentation/Porting/Conceptual/PortingUnix/glossary/glossary.html#//apple_ref/doc/uid/TP40002859-TPXREF101




ㅋ..맞군

아니 왜 X is Not Unix인건데 궁금하게


암튼 지금 보니까 Mach가 이 Apple의 플랫폼과..밀접하게 관련되어있다는 걸 알 수 있네요!

Mach에 대해 이제 좀 알아봤으니...다시 Mach-O이야기로 돌아갑시다.


Mach-O는 위에서 언급했다 시피

Mach-O는 Mach Object file format의 줄임말이라고 합니다!


Mach-O는 OS X에서 바이너리의 네이티브 executable format이고, 

shipping code에 선호되는 포맷이라고...


https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CodeFootprint/Articles/MachOOverview.html


애플에서 나온 OverView of the Mach-O Executable Format.....문서에 나오는데요. 

Executable file, Object code shared library, dynamically-loaded code, core dumps를 위한 

파일 형식! 이라고 생각하면 편할 것 같아요. 


Mach-O에는 뭐 JSON같이 특정한 포맷! 이 있는게 아니라, 

그냥 의미가 있는 data chunks로 그룹화된 바이너리 바이트 스트림일 뿐이라고 합니다..

이러한 chunks에는 뭐 바이트 순서, CPU타입, chunks크기 등같은 메타정보가 들어간다고 합니다. 


저 .o, .dylib, .bundle이런게 전부 Mach-O 포맷이라고 생각하면 되는거겠죠..>!?!?


흠....


문서를 보는데 계속 OS X라고 하는데..이건 macOS로 수정해서 적을게요!

- macOS는 각각 자체 런타임 규칙이 있는 여러 응용프로그램 환경을 지원하는데,

- macOS에서 kernel extensions, command-line tools, applications, frameworks, 그리고 libraries (shared and static)는 Mach-O파일을 사용하여 구현된다고 합니다. 


Xcode의 Build Setting에 가면, Mach-O Type을 고를 수 있습니다.

Single View App이나 command line tool은 기본적으로 Executable이네요.


이 Build Setting의 Mach-O타입은

출처 : https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html


바이너리의 타입을 지정하는 identifier입니다. 


그러니까 내가 만들고 싶은(?) 응용프로그램에 맞게 이 Mach-O Type을 지정해줘야 한다는 소리겠지..?


- Framework로 만들었을 때,


Dynamic Library로 기본적으로 설정됩니다.



- Static Library로 만들었을 때


Static Library로 기본적으로 설정되네요.


 

- Mach-O파일은 크게 Header, Load Commands, Raw segment data부분으로 이루어져 있는데, 

뭐 각 Mach-O타입에 따라....이 부분중 어딘가가 바뀌겠죠..!?.....그냥 그럴것 같은데 확실하게...말할수가 없음


이거 header어케봐 ㅠㅠㅠ



사실 진짜 엄청나게 많은 내용이 있는 것 같은데..


https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/MachOTopics/1-Articles/building_files.html#//apple_ref/doc/uid/TP40001828-96838-BABBHEIC


https://stackoverflow.com/questions/44037322/objective-c-how-to-check-if-executable-can-be-launched-eg-terminal


보면

뭐 이런거 적혀있는 Mach-O header가 있다는것 같은데 ㅠㅠㅠㅠㅠㅠ

이거 보는법 아시느 분,,,




아무튼 오늘..Mach-O에 대해 완벽히 안것 같지는 않지만

어제보다는 많이 아는 듯 하네요 ^-^..긍정..

다음 글로는 Mach-O Type에 들어갈 수 있는 애들...을 보며

아니다..

사실 Mach-O Type이 바이너리의 타입을 지정(결정?)하는 애니까..


이친구들을 공부하면 되겠군요 


이 글이 제대로 된, 그리고 정확한 정보전달 글인지 잘 모르겠는데

그래도


1. Mach/XNU가 어떤건지, 

2. Mach-O Type은 바이너리의 타입을 지정하는 identifier


라는 사실만 알아도..!! 좋은 수확이라고 생각합니다.


틀린점이나 피드백은 정말 언제든지!!!!!!! 환영입니다.


반응형