어셈블리 기본!
숫자 표현
> 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
'Reverse engineering > 리버싱 분석 강의 정리' 카테고리의 다른 글
리버싱#1 NASM(넷와이드 어셈블러) 사용법 (0) | 2021.02.25 |
---|---|
리버싱#1 x86 어셈블리 소개 (0) | 2021.02.25 |
리버싱#1 아키텍처 이해하기 (시스템 동작 원리) (0) | 2021.02.19 |
리버싱#1 아키텍처 이해하기! 컴퓨터 구조, CPU 아키텍처 (0) | 2021.02.17 |
리버싱#1 리버싱!? 리버스 엔지니어링? 리버서가 되려면? 무엇을 공부해야 하나요? (0) | 2021.02.17 |
댓글