어셈블러

 

1. 프로그램
1.1. 동적 어셈블러
1.2. 인라인 어셈블러
1.3. 디스어셈블러
1.4. 종류
2. 발드 스카이에 나오는 제2세대 나노머신의 총칭.
2.1. Dive2에서의 진실

Assembler

1. 프로그램


작성된 어셈블리어기계어로 바꿔 주는 프로그램. 요즘은 C언어로 입문하는 이가 많다보니 어셈블러의 특수성을 제대로 이해하지 못하고 어셈블러와 타 컴파일러간의 차이를 제대로 인식하지 못하는 경우도 있다.
어셈블리어는 기본적으로는 기계어와 1:1 대응이기 때문에 어셈블러에는 인스트럭션 테이블만 내장해 두고 각 구문을 테이블에 맞게 치환만 하면 된다. 이 때문에 대개 '''어셈블러는 타 컴파일러와는 다른 취급을 한다.''' 그러나 이것만 구현하게 되면 다양한 종류의 어셈블러가 나올리는 당연히 없고, 실제로는 어셈블러마다 다른 문법을 지원한다. 가장 크게는 Intel, AT&T로 나뉘고 매크로 등의 기능을 지원하는가/어떤 형식인가 등으로 나뉜다. 그래서 공부해야한다면 자신은 어떤 어셈블러를 사용할지 정하는 것도 중요하다.
대부분의 중/고급 언어의 컴파일러에는 어셈블러가 병합되어 있다. 그러다보니 C의 경우도 C→기계어와 같이 가는 것이 아니라 C→어셈블리어→기계어 순으로 컴파일 할 수도 있다. C로 작성한 다음 어셈블리어로 최적화 한다는 것도 이런 식이다.

1.1. 동적 어셈블러


동적 어셈블러(Dynamic Assembler)는 런타임 어셈블러(Run-Time Assember)라고도 불리는데, 실행 시간에 어셈블리어 등을 기계어로 번역해주는 라이브러리/프로그램이다. 실행시간에 소스코드 생성이 가능하기 때문에 이를 잘 이용하면 C/C++ 같은 컴파일하는 언어에서도 실행 시간에 프로그램을 생성하는 메타프로그래밍 등도 가능해지며, 다른 언어의 컴파일러를 이것으로 만들어서 실행시간에 컴파일 할 수도 있다. 그렇게 해서 만들어지는 것이 JIT이다.

1.2. 인라인 어셈블러


Inline Assembler
언어 차원에서 어셈블리어의 사용을 허락하고 컴파일러가 소스코드를 번역할 때 코드 사이사이의 어셈블리어도 같이 기계어로 번역해 주는 어셈블러다. 당연하지만 어셈블리어만 번역하는 경우는 없고 다른 언어와 같이 쓰인다.
언어가 지원하는 이상의 최적화가 가능하다는 게 장점이다. 어셈블리어의 장점인 호환성을 갖다 버리고 특정 아키텍처에만 극히 최적화된 소스코드를 뽑아낼 수 있기 때문이다. 반대로 다양한 환경에서 빌드가 되는 언어도 호환이 안 되는 것이 단점으로 따라온다.
1990년대 이후에는 컴파일러에서도 굉장히 최적화를 잘 하기 때문에 굳이 인라인 어셈블리를 써가면서 최적화 할 필요가 없다.

1.3. 디스어셈블러


디스어셈블러(Disassembler)는 기계어 코드를 어셈블리어로 바꿔주는 프로그램이다. 가장 많이 사용되는 분야는 해킹 중 리버싱 기법. 어지간한 프로그램들은 기계어로 되어있기 때문에 원래 소스로 되돌려놓지 못 하는데[1] 대신 읽기라도 할 수 있게 어셈블리어로 바꾸는 것이다.
보통은 어셈블러를 다운받으면 1+1로 디스어셈블러가 같이 온다.

1.4. 종류


  • MASM (Microsoft Macro Assembler) 이름에서 알 수 있듯이 MS에서 만든 어셈블러. 윈도우, DOS 지원
  • FASM (Flat Assembler) DOS, 윈도우, Unix-Like, FASM으로 만들어진 OS 지원, x86, x86-64 지원
  • NASM (Netwide Assembler) 현재 굉장히 많이 쓰이는 어셈블러. DOS, 윈도우, OS/2, Unix-Like, OS X 지원, x86, x86-64 지원
  • TASM (Turbo Assembler) DOS, 윈도우 지원
  • GAS (GNU Assembler) 특이하게 AT&T 문법 사용중이다.
  • WebAssembly 이름처럼 웹 브라우저용 어셈블러가 있다.

2. 발드 스카이에 나오는 제2세대 나노머신의 총칭.



나노머신 하나로 이루어진 종래와 나노머신과는 다르게, 여러개의 나노머신으로 구성되어 있는 복합 나노머신. 과거에 개발되고 있었으나 잿빛 크리스마스 사건 이후로 사실상 완전히 개발이 중지되었다.
1개의 커맨더 나노머신을 중심으로, 애니메이터, 크리에이터, 레플리케이터의 3가지 나노머신이 주변의 물질에서 특정 물질(환경 재생이 목적이기에 주로 오염물질이 타겟이 된다)만을 무해한 물질로 바꾸는 나노머신을 계속 생산한다.
커맨더가 주는 명령을 확실하게 수행하기에, 지구 환경 재생을 의한 비장의 카드로 주목을 받았으며, 그와 반대로 나노머신의 폭주를 우려한 반대 여론에도 부딪혔다.
그리고 연구 기관에서 사고로 유출된 어셈블러를 막기 위해 궤도폭격용 위성 "궁니르"가 세이슈 학원이 있던 도시를 폭격한 사건이 '''잿빛 크리스마스''' 사건이다. 이 사건을 계기로 주인공과 친구들의 인생은 말이 안 되게 꼬였고, 일부는 지금도 행방이 묘연하다. 이 유출사고로 인해 세계는 피폐해졌고, AI파와 반 AI파의 대립을 더 격화시켰다.
사실 어셈블러의 유출은 사고가 아니었다. 정신적으로 몰렸던 연구자중 한명이 어셈블러의 성과를 보여주기 위해 일부러 유출시켰던 것이다.
문제는 그때까지도 어셈블러는 미완성이였다. 플랜트에서 본격적인 나노머신을 생산하기 시작한 후, 레플리케이터를 통해 나노머신이 복제될 때 위험한 돌연변이종이 생기며, 어셈블러내에서 자체적으로 방역을 해도 얼마 가지 않아 방역체계에 적응한 돌연변이종이 등장하여 돌연변이 나노머신들이 정상적인 나노머신보다 더 많아지게 된다. 더 심한 문제는 연구소에서 하는 작은 규모의 테스트로는 이걸 알 수 없었다는 것이다.
결국 잿빛 크리스마스 사건 당시 이 약점은 그대로 발현된다. 주인공(과 유저) 일행에게 트라우마를 제공한(아니면 할 정도의) 물건이다.(…)
그후 현재에 이르기까지 쿠리하라 나오키와 그 동료들이 수없이 개량했지만, 14분 49초후에는 다시 돌연변이종이 더 많아진다는 사실이 밝혀졌다. 여전히 미완성이었던 것. 차라리 데몬스트레이션으로 만들어졌던 나노플라워가 안전성에서 더 좋았다고 할 정도. 기능성을 너무 추구한 나머지 안정성을 확보하지 못한 물건이라 할 수 있다.

2.1. Dive2에서의 진실


'''사실은 제대로 완성되어 있었다.''' 잿빛 크리스마스 사건에서 어셈블러가 이상을 일으킨 이유는 발드 시스템에 접속했을 때 정신이 오염되어 가던 쿠리하라 나오키가 완전히 몸을 빼앗겨 어셈블러를 살육병기로 용도를 변경시켜 버렸기 때문이다.
그걸 모르는건지 기억하지 못하는 건지, 쿠리하라 나오키는 몇년이고 도피 생활을 하면서 어셈블러 개발에 투자하게 된다. 그러나 정신이 오염되어 몸을 빼앗긴 상태인지라 뭘 해도 살육병기가 되어 버렸던 것이다.
사실 예전에 자신이 오래 버티지 못할 것을 알았던 나오키는 카도쿠라 코우에게 어셈블러가 어떻게 변경되든지, 원래의 환경정화 프로그램으로 복원시키는 프로그램을 비밀리에 넘겨줬고, 마코토 루트에서 그 기억을 되찾은 코우 덕분에 어셈블러는 완벽하게 복원되어 그 능력을 제대로 선보이게 된다.
스즈시로시 전체가 녹색 나무들도 뒤덮히고 잿빛 하늘이 순식간에 푸르게 될 정도로서, 그 능력은 그야말로 '''지구 환경 재생을 의한 비장의 카드'''라는 이전의 명칭에 어울리는 것이었다. 정신 오염과 싸우면서 완성을 시킨 쿠리하라 나오키의 인간승리라고 할 수 있을지도 모른다.
즉 발드 스카이의 목적을 두 가지(첫 번째는 소라를 제외한 히로인 모두의 루트를 거치면서 이루어낸 범세계적인 환경의 정화, 그리고 두번째는 코우의 개인적인 소원 -소라- 을 이루는 것)로 나눈다면 첫 번째를 종결짓는 물건이라 할 수 있다.
마코토가 쿠리하라 나오키를 설득하여 그가 정신과 치료를 받기 위해 일선에서 물러난 새로운 세계에서는, 원래 용도대로 완성되어 빛을 보게 된다.

[1] Java의 경우 원래 소스로 되돌려 놓는 것이 가능한 편이고 그에서 파생된 C# 등의 여러 가상머신 언어들도 소스가 잘 나오는 편. 또 그 외의 스크립트 언어들은 소스를 통째로 배포한다. 사실 기계어를 C로 바꾸는 컴파일러가 있긴 하지만 보통 유료이면서 가상머신 언어들만큼 깔끔하게 안 나온다.