디버거와 어셈블리 언어
VS를 이용해서 C언어 소스코드를 빌드하면, 실행파일이 생성된다.
이 과정은 결국 사람이 이해하기 쉬운 C언어 코드를 기계가 이해하기 쉬운 기계어로 변환하는 것이다.
이러한 기계어는 사림이 알아보기 어렵기 때문에, 좀 더 편하게 보기 위해서 디버거 툴을 사용한다.
디버거에 탑재된 디스어셈블러(Disassembler) 모듈은 이 기계어를 어셈블리 언어로 번역해서 보여준다.
-
참고로 실행 파일을 생성하는 어떠한 프로그래밍 언어라도
빌드 과정을 거치면 모두 기계어로 변환된다.
디버거를 통해서 어떤 실행파일이라도 어셈블리 언어로 번역해서 볼 수 있기 때문에
리버서는 기본적으로 어셈블리 언어를 잘 알아야 한다.
어셈블리 언어만 잘 익혀 놓으면 실행 파일이 어떠한 프로그래밍 언어로 제작되었는지
상관없이 디버깅을 통한 코드 분석이 가능하다.
어셈블리 언어는 CPU에 종속되어 있다.
즉 일반 PC에서 많이 사용되는 Intel x86 계열의 CPU와
모바일 제품에서 많이 사용되는 ARM 계열의 CPU는
서로 다른 어셈블리 명령어의 형태를 가진다.
-
※ 복습 차원에서 문제 ※
1. 디버거 툴을 사용 하는 이유는?
2. 소스코드를 빌드하는 과정은 무슨 역할을 하는 과정인가?
3. 디스어셈블러의 역할은 무엇인가?
4. 실행파일을 만드는 어떠한 프로그래밍 언어라도 어떤 작업을 거치면 모두 기계어로 변환되는가?
5. 리버서는 왜 어셈블리어를 잘 알아야 하며 알아두면 어떤 점에서 이득인가?
6. 어셈블리어는 어떤 하드웨어에 종속되는가?
7. CPU 제조사는 대표적으로 몇개이며 그 회사들의 이름은 무엇인가?
'Reversing > 리버싱 이론' 카테고리의 다른 글
Visual Studio 빌드 모드 2가지 (0) | 2021.01.29 |
---|---|
패치와 크랙 (0) | 2021.01.29 |
Source code, Hex Code, Assembly Code (0) | 2021.01.29 |
정적 분석과 동적 분석 및 두 가지 분석 방법 활용 (0) | 2021.01.29 |
범용 레지스터(General Purpose Registers)(32bit - 8개) (0) | 2021.01.29 |