6.1. 소개

마침내 때가 왔다. 여러분이 아직도 이 문서를 읽고 있으며, 여전히 어셈블리로 무언가를 만들겠다는 광기어린(!) 생각을 가지고 있다면 (여기까지 읽은 사람이라면, 정말 어셈블리 팬임에 틀림없다), 이제부터 시작하는데에 필요한 것을 알려주겠다.

여러분이 앞서 읽은 바와 같이 여러분은 리눅스 운영체제에서 여러가지 방법으로 프로그래밍을 할 수 있다. 이제부터 본 저자는 커널의 시스템 콜을 직접 호출하는 방법을 보여주려 한다. 왜! 직접 커널을 호출하는가? 그렇게 하는 것이 커널이 제공하는 서비스를 호출하는 가장 빠른(!) 방법이기 대문이다. 이 방법을 사용하면, 우리의 코드는 다른 라이브러리에 링크될 필요가 없다. ELF 인터프리터를 사용할 필요도 없다.단지, 커널과 직접 의사소통할 따름이다.

저자는 동일한 일을 하는 샘플 프로그램을 nasmgas, 이 두개의 어셈블러를 사용해서 각각 프로그래밍 한 소스를 보여주겠다. 자세히 보면, 인텔계열과 AT&T 유닉스 계열의 문법의 차이를 알.. 수도 있을까?

여러분은 또한, 유닉스 어셈블리 프로그래밍 튜토리얼(UNIX assembly programming tutorial - http://linuxassembly.org/intro.html)의 소개를 읽어볼 수 있다. 거기에는 리눅스 이외에도, 다른 유닉스 계열의 운영체제를 위한 샘플 코드들이 있다.(역자 주 : FreeBSD, BeOS 등)

6.1.1. 필요한 도구들

당연히 어셈블러가 필요하다. -- nasm 이나 gas.

그리고, 링커가 필요하다. -- ld 왜냐하면, 어셈블러는 단지 목적코드(object code)만을 만들어내기 때문이다. 대부분의 배포본에는 gasld 가 포함되어 있다. binutils 패키지에 패키징되어 있다.

nasm 의 경우, 리눅스용의 문서와 바이너리 패키지를 다운로드해서 설치해야 한다. 다운로드 할 수 있는 사이트는 다음과 같다 : nasm site; 맨드레이크, 수세, Stampede, 데비안 등의 패키지에는 포함되어 있다. 먼저, 확인하라.

정말 깊이 파고들려면, 여러분의 운영체제의 include 파일들을 설치해야 하고, 가능하다면, 커널 소스까지 설치하라 (여러분의 운영체제가 공개 운영체제이면 가능하다.)