어셈블리어는 왜 공부해야하는가

두부4등분·2025년 10월 13일

어셈블리어를 공부하기 전 "어셈블리어를 왜 공부해야하는가"에 대해서 자신의 생각을 정리하고 공부하면 조금 더 구체적으로 공부 방향성을 잡을 수 있어서 블로그를 작성하게 되었다.

우선 어셈블리어란 무엇인가?

어셈블리어는 바이너리 코드를 사람이 읽을 수 있도록 나타낸 저수준 언어이다.

어셈블리어는 기계어와 1대1로 대응되는 가장 저수준 언어이기 때문에 하드웨어의 동작과도 밀접하게 연관되어 있다.

맛보기로 예시를 들자면
add eax, ebx
는 EAX 레지스터에 EBX 레지스터의 값을 더한 뒤, 그 결과를 다시 EAX에 저장하는 명령이다.

즉, CPU 내부의 산술논리연산장치(ALU)가 두 레지스터의 값을 더하고, 결과를 EAX로 되돌려 쓴다.

ALU는 무엇인가?


어셈블리어는 왜 공부해야할까?

어셈블리어를 왜 공부해야하는지에 대해서 컴퓨터 구조, 보안적 관점, 최적화 관점 총 3가지 관점에서 생각해보았다.

💻컴퓨터 구조 관점

컴퓨터 구조는 하드웨어(레지스터, 메모리, 캐시, 파이프라인 등)가 명령을 어떻게 처리하는지 보는 분야다.
어셈블리어는 그런 하드웨어 동작을 ‘직접 보여주는’ 언어라서, 컴퓨터 구조를 공부할 때 함께 보면 이해가 훨씬 쉬워진다.

예시

명령어(ISA)와 레지스터 동작 보기

  • 어셈블리로 명령 하나하나를 보면 어떤 레지스터를 쓰고 결과를 어디에 두는지 바로 알 수 있다.
    예시: mov, add 같은 명령이 레지스터를 어떻게 바꾸는지 확인한다.

🔐보안적 관점

보안은 컴퓨터 시스템의 내부 동작을 이해하는 학문이다.
어셈블리어는 하드웨어와 소프트웨어의 경계를 직접 다루는 언어이므로 보안 분야에서 필수적이다.
아래는 어셈블리어가 특히 많이 쓰이는 리버싱 기반의 실무 활동들이다.

리버싱

리버싱은 컴파일된 실행 파일(바이너리)를 분석하는 과정이다. 이 과정에서 실행 파일을 분석할때
어셈블리어는 필수적이다.

리버싱을 이용한 실무 예시

1. 취약점 분석 (Vulnerability Research)

취약점 분석은 프로그램의 설계·구현상 결함을 찾아내어 악용 가능성을 평가하는 작업이다. 어셈블리 코드를 보면 함수의 스택 프레임, 메모리 접근 오프셋, 경계 검사 여부 등을 직접 확인할 수 있으므로, 버퍼 오버플로우나 잘못된 포인터 사용과 같은 결함을 정확히 식별하고 영향 범위를 평가할 수 있다.

2. 익스플로잇 개발 (Exploit Development)

익스플로잇 개발은 발견된 취약점을 실제로 악용해 시스템 동작을 제어하는 페이로드를 만드는 과정이다. 이 과정에서는 리턴 주소(EIP/RIP) 조작, 레지스터 값 설정, 시스템 콜 호출 방식 등 어셈블리 수준의 제어가 전제되어야 하므로 어셈블리 이해가 필수적이다.

3. 악성코드 분석 (Malware Analysis)

악성코드는 소스 없이 배포되는 경우가 대부분이고 난독화·패킹이 자주 사용된다. 어셈블리 수준에서 코드 흐름과 API 호출 패턴을 읽을 수 있어야 파일 암호화 루틴, 키로깅, 네트워크 통신 등 악성 행위를 분해·추적하고 대응 방안을 세울 수 있다.


⚙️최적화 관점

최적화는 코드가 하드웨어에서 더 빠르고 효율적으로 실행되도록 만드는 작업이다.
어셈블리어는 컴파일러가 실제로 내보낸 명령어 시퀀스를 그대로 보여주기 때문에, 성능 문제의 원인을 바로 확인하고 직접 개선할 수 있게 해준다.

예시

레지스터 중심 최적화

  • 어셈블리를 보면 값이 메모리와 레지스터 사이에서 어떻게 오가는지 보인다.
    예시: 반복문 안에서 자주 쓰는 값을 레지스터에 유지해 메모리 접근을 줄이는 방식으로 성능을 개선한다.

0개의 댓글