본문 바로가기
  • 개발 삽질 블로그
해킹 및 보안/리버싱

[ 스무디 ] 어셈블리어 강의 1~ 3강 정리

by 갹둥 2022. 10. 2.

# 1강


📌어셈블리어: 기계어를 일정한 규칙에 따라 대응시킨 것

-기계어 -> CPU에 따라 상이
-어셈블리어-> 기계어를 1:1로 기호와 알파벳으로 변환한 것, *사람이 읽기 편함*
*컴퓨터 구조→ 기계어 → 어셈블리어, 따라서 어셈블리어도 각각 다름
CPU마다 지원하는 오퍼레이션(연산)의 타입과 개수는 제각각, 레지스터의 크기나 개수도 다름

📌 어셈블러: 어셈블리어를 기계어로 바꿔주는 프로그램, 어셈블리어를 기계어 형태의 오브젝트 코드로 해석

-MASM, FASM, NASM, GAS 등이 있음
-지시어가 어셈블러마다 다름!

**ollydbg 사용**

-ollydbg: 바이너리 코드 분석을 위한 x86 디버거, 리버스 엔지니어링에 종종 사용됨



 

#2강


📌어셈블리어→ intel 문법 vs AT&T 문법
- 차이점
**접두사 규칙, 오퍼랜드 위치, 메모리 오퍼랜드, 접미사 규칙 등이 다름**
[https://hardner.tistory.com/22](https://hardner.tistory.com/22) 참고


📌어셈블리어의 구조
-명령어(OpCode), 피연산자(Operand)
ex) mov eax, 1
mov: OpCode
eax, 1: Operand





ollydbg에서 맨 윗줄을 더블클릭하면 어셈블리어 명령어를 작성할 수 있음


📌레지스터: CPU 내의 빠른 저장공간, 용량이 작음, 따라서 프로그램의 전체 내용을 담을 수 없음, 각 4Byte(32bit)씩 저장 가능

EAX ESP ESI

EBX EBP EBI

ECX

EDX



 

# 3

📌Mov
MOV REG, IMM(값) ex) mov eax, 1

MOV REG, REG ex) mov eax, ebx

*어셈블리어는 대소문자를 구분하지 않음


- ollydbg 사용

MOV EBX, 0A → 레지스터 더블클릭 후 값 변경 가능



🖇E[A,B,C,D]X
-Intel 16bit 시절에는 AX라는 2Byte짜리 레지스터가 존재
-Ax의 자리수가 낮은 쪽을 AL(low), 높은 쪽을 AH(high)라는 이름으로 이용
->extended AX =>**EAX(4Byte)**


ex) MOV EAX 12D687

00 12 D6 87

AH, AL 영역에 따로 값을 덮어쓸 수 있음. 단, 크기가 같아야 함 주의

Ex) Mov CH, 0A