Assembly를 왜 배워야 할까?
리버싱 엔지니어들이 Assembly 언어를 배우는 이유가 뭘까요…?
목적
Assembly를 왜 배울까?
Reverse Engineer에게 중요한 지식은 바로 어셈블리 언어(Assembly Language)이다. 왜 우리는 어셈블리 언어를 배워야하는 것일까요?
우리가 흔히 사용하는 C, C++, Java, Python 등 여러 프로그래밍 언어들이 존재합니다. 하지만 그러한 언어들로 구성된 소스 코드는 인간은 이해할 수 있지만, 기계(컴퓨터)는 이해할 수 없습니다. 그럼 기계는 어떠한 방식으로 어떻게 코드를 이해할까요? 다른 방법은 없다. 기계는 오직 우리가 작성한 소스 코드를 컴파일 하여 어셈블리 언어 코드 양식으로 제공해줘야만 이해할 수 있습니다.
Reverse Engineering은 역공학 기법이라고 말합니다.
naver IT 용어 사전
즉, 협의로 보자면 어셈블리 코드를 소스 코드로 되돌리는 방법, 이를 ‘리버싱’이라고 부르는 것이죠.
이러한, 이유로 어셈블리 언어는 리버스 엔지니어에게는 매우 필요한 지식이라고 볼 수 있습니다.
Assembly 종류
Assembly 언어에도 많은 종류가 있습니다. 그 이유가 뭘까요?
앞서 말한 것과 같이 Assembly는 저급 언어로써 C 와 기타 다른 프로그래밍 언어들 보단 기계어에 가깝습니다. 이러한 기계어는 각 중앙처리장치(CPU)의 형태에 따라 그 내용이 모두 다르기 때문에 이러한 언어들로 작성된 프로그램들은 모두 한 종류의 CPU에서만 동작하고 다른 종류에서는 실행되지 않는 것이 특징입니다. 이러한 이유로 다양한 종류가 있는 것이죠.
CPU 아키텍처에는 8080, ARM, MIPS, PowerPC, SPARC 등 많은 것들이 있지만 인텔 x86이 오늘날 가장 많이 사용되는 아키텍처로써 주로 x86 Assembly를 배웁니다.
마무리
오늘은 리버스 엔지니어링을 배우기 이전에 우리가 왜 어셈블리 언어를 꼭 숙지해야만 하는지 그 이유에 대해 되새기는 포스팅을 했습니다. 혼자 공부한 것들을 어딘가에 기록해두고 싶은 마음에 시작한 블로그인 만큼 꼭 끝까지 할 수 있기를 바라며 마무리 하겠습니다. 맨 위로 이동 ↑