- 아키텍쳐
arm과 x86계열은 당연히 다르겠지
구조부터 명령어셋까지 전부

이건 어렴풋이 다들 이해하고 있을거임

그런데 x86과 x86_64도 약간의 차이가 있음
대표적인게 x86에는 R8 ~ R15까지의 레지스터가 없고, 32비트크기겠지

실제로 RAX,  R8같은 레지스터를 사용한 어셈블리를 32비트 타겟으로 컴파일 시도하면 실패할걸

- OS

역시 OS별로도 차이가 있음

일단 실행파일 형식이 다른데 리눅스의 ELF(옛날에는 aout 썼었음), 맥의 Mach-O등이 있다

호출규약도 OS 별로 다름
똑같은 x86_64를 써도 호출시 인자값을 유닉스의 경우 RDI, RSI, RDX, RCX, R8, R9 순으로 6개의 레지스터를 순서대로 사용하는 반면 윈도우는 RCD, RDX, R8, R9를 사용함 (이 이상은 스택을 사용)

이외애 OS별로 제공하는 시스템콜은 당연히 다를테구
심지어 x86 리눅스와 x86_64 리눅스도 다름
예를 들어 sys_exit와 sys_write의 콜 넘버는 각각 1과 4[x86], 60과 1[x86_64]임

어제 올린다는게 깜박잊고 자버려서;; ㅋㅋ

- dc App