01 실행파일 생성 과정 (C언어로 코딩한 경우)
1. C언어로 소스코드를 작성. (ex. aaa.c 파일로 저장됨.)
2. 컴파일러(Compiler)에 의해 소스코드가 기계어로 바뀐다.(ex. aaa.obj 파일로 저장됨.) - 컴파일
3. 링커(Linker)에 의해 실행파일이 생성된다. (ex. aaa.exe 파일로 저장됨.) - 링크
우리가 Visual studio 같은 개발 툴로 빌드 과정을 거칠 때 일어나는 일이다.
빌드 : 2 , 3과정을 묶어서 처리함. (컴파일 + 링크)
02 리버싱 (리버스 엔지니어링 = 역 공학)
위와 같이 생성된 실행파일을 디스어셈블러를 이용해 어셈블리어로 바꿔버릴 수 있다.
어셈블리어는 기계어(컴퓨터의 본래의 언어)에 가까운 언어이며, 기계어와 1:1 대응되는 언어이다.
한마디로 이 어셈블리어는 사람이 기계어를 보다 편하게 해석할 수 있도록 한다.
어셈블리어를 해석, 분석하면 역으로 실행파일을 소스코드로 바꾸어 버릴 수 있게 된다.
그 정도의 경지에 이르게 되면 프로그램을 자신의 의도대로 바꾸어 버리는 것은 일도 아니다.
이렇게 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 발견하는 과정을 리버싱(리버스 엔지니어링)이라고 한다.