assembler
-
x86-64 Assembly Language 7 Directives와 Hello world 코드Linux Development/Kernel 2021. 8. 1. 19:54
Hello world code 다시 보기 Assembler Directives for AT&T syntax Assembler Directives for Intel syntax 1. Hello world code 다시 보기 이제 앞에서 사용했던 hello world 코드를 해석해보자. Intel syntax에서도 global(라인 1), section(라인 3, 16), db(라인 17), equ(라인 18)등 지시자(directive)를 사용해서 어셈블러에게 정보를 전달한다. 하지만 모든 지시자 앞에 "."(period)가 붙고 모든 레이블 뒤에 ":"(colon)이 붙는 AT&T 방식에 비해 간결성이 떨어진다. Hello world of Intel syntax (좌측) 주변 코드 라인 1에서 코드의 기..
-
x86-64 Assembly Language 5 Hello world와 System callLinux Development/Kernel 2021. 7. 29. 00:43
시스템 콜은 애플리케이션과 OS가 대화하는 가장 중요한 방법이다. 앞선 두 hello world 코드를 보면 물론 여러 가지가 다르지만 그중 시스템 콜을 이용하는데 의미 있는 차이를 보인다. 32bit 환경에서는 int라는 opcode(오피 코드, 명령 부분)와 0x80이라는 operand(데이터 부분)가 포함된 인스트럭션이 보인다. 64bit 환경에서는 syscall이라는 opcode만 보인다. 이 두 가지 코드는 모두 System Call을 이용하기 위한 코드들로서 하나는 32bit에서 고전적으로 쓰이는 트랩 게이트를 이용한 시스템 콜, 다른 하나는 64bit 환경에서 권장되는 MSRs(Modes Specific Registers) 시스템 콜 전용 레지스터들을 이용한 콜이다. 아래는 이에 대한 설명이..
-
x86-64 Assembly Language 2 초기 환경 세팅Linux Development/Kernel 2021. 7. 21. 05:24
Assembly language를 위한 세팅 GAS에서의 Hello world NASM에서의 Hello world 1. Assembly Language를 위한 세팅 리눅스에서 가장 많이 사용되는 어셈블러는 Intel문법의 NASM과 AT&T문법의 GAS이다. 이를 위한 세팅을 해보자. 가장 먼저 컴파일러가 필요하다. GAS는 리눅스 고유의 C 컴파일러 패키지인 GCC에 포함되어 있는 어셈블리 컴파일러다, NASM도 역시 독립적인 어셈블리 컴파일러라서 따로 설치해 줄 필요가 있다. 난 리눅스 Ubuntu 21.04 버전에서 작업할 것이다. VMware로 우분투를 설치하는 방법은 아래 내 블로그 링크에 나와있다. VMware에서 Ubuntu 설치 VMware란? 현재 시중에 나와있는 버츄얼 머신 프로그램 중..
-
x86-64 Assembly Language 1 어셈블러의 종류와 RegisterLinux Development/Kernel 2021. 7. 20. 05:20
개발자로서 가끔 어셈블러(Assembler 또는 Assembly programming)를 왜 해? 그거 해봐야 뭐해?라는 질문을 듣곤 한다. 개인적으로는 어셈블러가 엔지니어와 일반인을 구분하는 가장 중요한 경계선이라고 생각한다. 어셈블러를 아는 것이 당장 나에게 수익을 가져다 주진 않지만 컴퓨터의 구조를 이해하고 우리가 만들어가는 프로그램이라는 것이 무엇인지 명확히 이해할 수 있는 기회를 주기 때문이다. 더 많은 분들이 이 언어를 알고 공부했으면 하는 마음에서 이 글을 쓴다. GAS 어셈블러와 NASM 그리고 MASM 컴퓨터 레지스터 구조 컨텍스트 스위칭(Context switching) 1. AT&T 문법 어셈블러와 NASM 그리고 MASM 어셈블러는 매우 다양하다, 하나의 CPU가 개발될 때마다 CP..