macOS에서 C 언어를 어셈블리어로 컴파일

macOS에서 C 언어를 어셈블리어로 컴파일하려면 GCC(GNU Compiler Collection) 또는 Clang 컴파일러를 사용할 수 있습니다. macOS에는 기본적으로 Clang이 설치되어 있지만, GCC를 설치하려면 Homebrew와 같은 패키지 관리자를 사용할 수 있습니다.

아래는 macOS에서 C 언어를 어셈블리어로 컴파일하는 방법입니다.

  1. C 프로그램이 있는 파일을 준비하세요. 예를 들어, 파일 이름이 hello.c라고 가정하겠습니다.
  2. 터미널을 열고 아래와 같은 명령어를 입력하여 C 소스 코드를 어셈블리어로 컴파일하세요.Clang을 사용하는 경우:
clang -S -O0 -mllvm --x86-asm-syntax=intel hello.c -o hello.s

GCC를 사용하는 경우:

gcc -S -O0 -masm=intel hello.c -o hello.s

여기서 -S 옵션은 컴파일러에게 어셈블리어로 컴파일하도록 지시합니다. -O0 옵션은 최적화를 비활성화합니다. 최적화를 끄면 더 읽기 쉬운 어셈블리 코드를 얻을 수 있습니다. -mllvm --x86-asm-syntax=intel (Clang) 또는 -masm=intel (GCC) 옵션은 어셈블리어를 인텔 구문으로 출력하도록 설정합니다.

위의 명령어를 실행한 후, hello.s 파일에 어셈블리어 코드가 생성됩니다. 이 파일을 열어 어셈블리 코드를 확인할 수 있습니다.

Hello C 코드

#include <stdio.h>

int main(){
	printf("Hello\n");
	return 0;
}

어셈블리어

	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 13, 0	sdk_version 13, 0
	.intel_syntax noprefix
	.globl	_main                           ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
	.cfi_startproc
## %bb.0:
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset rbp, -16
	mov	rbp, rsp
	.cfi_def_cfa_register rbp
	sub	rsp, 16
	mov	dword ptr [rbp - 4], 0
	lea	rdi, [rip + L_.str]
	mov	al, 0
	call	_printf
	xor	eax, eax
	add	rsp, 16
	pop	rbp
	ret
	.cfi_endproc
                                        ## -- End function
	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.asciz	"Hello\n"

.subsections_via_symbols

주어진 어셈블리 코드를 실행하려면 먼저 해당 코드를 컴파일하고 링크해야 합니다. 이 과정에서 다음과 같은 단계를 거칩니다.

어셈블리 코드를 파일에 저장합니다. 예를 들어, hello.s라는 파일로 저장합니다.

터미널을 열고, 해당 어셈블리 파일을 목적 파일로 컴파일합니다. 이 때, 아래와 같은 명령어를 사용합니다.

gcc -c hello.s -o hello.o

이 명령어는 hello.s 파일을 hello.o라는 목적 파일로 컴파일합니다.

이제 목적 파일을 실행 파일로 링크합니다. 다음과 같은 명령어를 사용합니다.

gcc hello.o -o hello

이 명령어는 hello.o라는 목적 파일을 hello이라는 실행 파일로 링크합니다.

실행 파일을 실행합니다.

./hello
  1. 이 명령어를 실행하면, 프로그램이 실행되고 “Hello” 문자열이 출력됩니다.

참고로, 이 과정은 x86-64 아키텍처 기반의 macOS 또는 Linux 시스템에서 작동합니다. 다른 시스템이나 아키텍처에서 실행하려면 명령어와 옵션을 조정해야 할 수도 있습니다.

정리하는 뇌

“정리하는 뇌” / 영문제목 “The Organized Mind: Thinking Straight in the Age of Information Overload”은 다니엘 J. 레비튼이 쓴 책으로, 일상 생활에서 우리가 마주치는 지속적인 정보 흐름을 관리하는 전략을 제공하고 정보 과부하 시대에서 살아가는 데에 대한 문제점을 다룹니다.

레비튼은 신경과학, 심리학 및 경제학 분야의 연구를 인용하여 우리 뇌가 정보를 처리하고 분류하는 방식에 대해 설명하며, 이것이 우리의 결정력, 문제 해결 능력 및 집중력에 어떤 영향을 미치는지에 대해 논의합니다. 또한 기술이 우리의 조직력과 집중력에 미치는 영향을 논하고, 산재한 정보를 관리하고 우선순위를 정하며 생산성을 향상시키는 실용적인 팁을 제공합니다.

마음의 조화, 시간 관리 및 단순성이 조직된 뇌를 얻는 데에 얼마나 중요한지 강조합니다. 레비튼은 할 일 목록을 작성하거나 디지털 파일을 정리하는 등의 정보 처리 시스템을 개발하도록 독자를 권장하며, 휴식을 취하고 안정성과 창의성을 촉진하는 활동에 참여하도록 권장합니다.

또한 명확하고 조직적인 물리적 환경의 이점을 탐구합니다. 레비튼은 혼란스러운 것이 어떻게 압도적인 것이 되는지에 대한 과학적 이유를 논하며, 물리적 공간을 정리하고 조직하는 시스템을 만드는 방법에 대해 논합니다.

주요 테마 중 하나는 우리 뇌가 제한된 자원을 가지고 있으며, 이를 현명하게 사용해야 한다는 것입니다. 레비튼은 우리는 언제나 생산적일 수 없으며, 정신적인 에너지를 보충하기 위해 휴식, 안정성 및 창의성에 우선순위를 두어야 한다고 주장합니다.

기술이 우리의 조직력과 집중력에 미치는 영향을 탐구합니다. 레비튼은 디지털 장치의 장단점을 논하며, 알림을 끄고 이메일을 확인하는 지정된 시간을 만드는 등의 방법으로 산재한 정보를 관리하는 방법에 대한 실용적인 팁을 제공합니다.

전반적으로 마음의 조화, 시간 관리 및 단순성을 달성하여 현대 사회의 복잡성을 극복하고 인지 기능을 향상시키기 위한 유용한 통찰력과 실용적인 조언을 제공합니다. 이 책은 정보 과부하를 관리하고 스트레스를 줄이며, 모든 삶의 영역에서 생산성과 창의성을 증가시키는 로드맵을 제공합니다.

가장 흥미로운 부분 중 하나는 레비튼의 결정력에 대한 논의입니다. 그는 우리가 내리는 다양한 결정 유형과 결정에 영향을 미칠 수 있는 인지적 편견에 대해 설명합니다. 다양한 정보 출처에서 정보를 수집하고 결정의 장기적 영향을 고려하기 위해 “10-10-10” 규칙을 사용하는 등, 결정력을 향상시키는 실용적인 팁을 제공합니다.

스트레스가 인지 기능에 미치는 영향을 탐구합니다. 그는 스트레스가 어떻게 해로울 수 있는지에 대한 과학적 이유를 논하며, 신체 운동을 하거나 자연에서 시간을 보내는 등의 스트레스를 줄이는 방법에 대한 실용적인 팁을 제공합니다.

“The Organized Mind”은 현대 사회의 복잡성을 극복하고 인지 기능을 향상시키기 위한 유용한 통찰력과 실용적인 조언을 제공하는 책입니다. 이 책은 정보 과부하를 관리하고 스트레스를 줄이며, 모든 삶의 영역에서 생산성과 창의성을 증가시키는 로드맵을 제공합니다.