어셈블리어란?
기계어를 조금 가독성을 높여 사람이 비교적 쉽게 이해할 수 있도록 하는 기계어와 1대1대응 언어이다.
어셈블리어를 어셈블하도록 해주는 작업을 하는것이 어셈블러이다.
어셈블리어는 cpu마다 다르기때문에 어셈블러의 종류가 다양하다
우리는 순수하게 어셈블리어에 대해서만 배울것이기 때문에 올리디버거라는 디버깅프로그램을 이용해 공부할것이다.
우리는 ia32라는 인텔 32비트기반의 어셈블리어를 배울것이다.
어셈블리어에도 당연히 문법이 있다. 문법에 대해서 알아보자
mov eax, 1
mov는 연산자 eax, 1은 피연산자이며 피연산자는 ,(콤마)를 통해 구분한다.
저걸 해석하면 eax에 1이라는 값을 넣어라! 라는 뜻이다.
eax는 뭐지?
cpu 안에는 레지스터라는 기억장치가 있다.
레지스터에는 4바이트의 공간을 가지는
EAX, EBX, ECX, EDX, ESP, EBP, ESI, EBI가 있다.
즉 위의 명령은 EAX라는 레지스터공간에 1의 값을 넣은것이다.
F8을 통해 실행시켜보면 오른쪽 레지스터창에 EAX가 1로 변한것을 알 수 있다.
EAX와 같은 레지스터도 더 세부적인 구조가 있다.
EAX는 2바이트씩 반을 나눠서 오른쪽 2바이트는 AX, AX를 1바이트씩 나눠서 왼쪽은 AH, 오른쪽은 AL의 구조이다.
레지스터창에서 레지스터를 더블클릭하면 세부적으로 숫자 저장이 가능하다.
레지스터는 크기가 정해져있기 때문에 레지스터에 값을 넣을때는 크기에 맞는 값을 넣어주어야한다.
(1...3)
'Study > reversing' 카테고리의 다른 글
리버싱에 대해 알아보자 (0) | 2017.08.19 |
---|---|
리턴코드 분석 (0) | 2017.06.16 |
어셈블리어 기본명령어 (0) | 2017.04.11 |
리틀엔디안 빅엔디안 (0) | 2017.04.11 |
어셈블리어, 주소에 접근하기 (0) | 2017.04.04 |