본문 바로가기
Reverse engineering/리버싱 분석 강의 정리

리버싱#1 어셈블리 기본!!

by grey-hat hacker 2021. 2. 19.
728x90

어셈블리 기본!

 

숫자 표현 

 > 10진수 : 사람이 이해하는 숫자

 > 16진수 : 컴퓨터와 대화하기 위한 숫자

 > 2진수 : 컴퓨터가 이해하는 숫자

   - 1의 보수 : 0은 1로, 1은 0으로 변경

   - 2의 보수 : 1의 보수에서 1을 더한 값 

 

메모리 주소와 섹션

 > 모든 운영체제는 사용자 모드와 커널 모드로 메모리를 나누어 관리

 > 모든 프로그램은 사전에 약속된 형식을 따름

 

프로그램과 메모리

코드 실행 흐름에 따라 변화하는 값들은 

스택 또는 힙에 쌓이게 된다. 

 

스택 

 > 함수 호출 시 생성되는 지역 변수와 매개 변수가 

저장되는 영역, LIFO 구조

 

 > 동적으로 메모리 할당 시 사용하는 영역

 

 

 

 

 

 

 

 

 

 

어셈블리 명령어 세트!

 > 데이터 이동 : 메모리 <-> 메모리, 메모리 <-> 레지스터, 레지스터 <-> 레지스터

 > 산술/논리 연산 : 더하고 빼기, 비트 연산, 소수점 계산 등

 > 제어 흐름 : 분기, 호출, 반환 등

 

피연산자 

ex) add a,b 이와 같은 형식 처럼 어셈블리어는 

 

{instruction} destination(메모리 또는 세그먼트 레지스터), source(메모리, 레지스터, 상수)

                -> 둘 중 하나만 메모리! 둘 다 사이즈가 같아야한다!

 

주소 표기법

 > 빅 엔디안

  주로 유닉스 시스템인 RISC 프로세서 계열에서 사용하는 바이트 순서

  메모리 시작 주소를 상위 바이트부터 기록

  네트워크 패킷에서도 이 방식을 사용 

 ex) 0xabcd -> a b c d

 

 > 리틀 엔디안

  주로 인텔 프로세서 계열에서 많이 사용하는 바이트 순서

  메모리 시작 주소를 하위 바이트부터 기록   

 ex> 0xabcd -> d c b a

728x90
반응형

댓글