레지스터의 종류는 많지만 그 중 알아볼 레지스터는 "프로세서 레지스터"이다.

 

주로 자료를 보관하는 기억 장소이다. 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용되며, 대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용하고 있다.

 

프로세서 레지스터에서도 여러개로 나눠진다.

  • 데이터 레지스터 : 정수값을 저장할 수 있는 레지스터.
  • 주소 레지스터 : 메모리 주소를 저장하여 메모리 접근에 사용되는 레지스터. 어떤 프로세서에서는, 주소를 저장하는 것이 아니라 조작하기 위한 목적으로 색인 레지스터를 사용하기도 한다.
  •  범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터.
  • 부동소수점 레지스터 : 많은 시스템에서 부동소수점 값을 저장하기 위해 사용된다.
  • 상수 레지스터 : 0이나 1 등 고정된 값을 저장하고 있는 레지스터.
  • 특수 레지스터 : 프로그램의 상태를 저장한다. 프로그램 카운터, 스택포인터, 상태 레지스터 등이 있다
  • 명령 레지스터: 현재 실행중인 명령어를 저장한다.
  • 색인 레지스터 : 실행중에 피연산자의 주소를 계산하는 데 사용된다.

 

 

 

'Computer science > Disassemble' 카테고리의 다른 글

디스어셈블리, 기본 개념  (0) 2023.11.02

리버스 엔지니어링을 하면 알아야 할 어셈블리디스어셈블리 과정 

 

"리버스 엔지니어링, 밑바닥부터 시작하기 (4) " 까지 그동안 리버스 엔지니어링 과정에서 바로 코드 분석을 들어가서 문제에서 원하는 정답을 냈지만 교수님과 선배님께 물어보니 해당 방법으로 습관을 만들면 나중에 악성코드분석과 하드웨어 유지보수등 원하는 직종에 갔을 때 안 좋아지니 지금부터라도 리버싱 과정에서 어셈블리-> 디스어셈블리->바이너리분석 을 하면 더 좋게 성장할 수 있다 말씀하셔서 피드백을 수용하여 만든 카테고리이며, 그 과정을 만들 것이다.

 

디스어셈블리란 어셈블리어를 거꾸로 변환하여 바이너리코드로 만드는 과정이다.

또한 어셈블리어는 Ryzen(ARM), Intel(AT&T)등 회사에 따라 다 다르게 나오기에 주의해야 하지만, 대부분의 경우 비슷한 로직을 가지고 있다. 

 

x86 - 윈도우즈 운영체제가 동작하는 CPU의 총칭. , 32bit를 의미

x64 - 64bit 윈도우즈 운영체제가 동작하는 CPU의 총칭

ARM - 스마트폰, 태블릿PCCPU 코어 설계 회사

 

 

어셈블리에선 mov, add, jmp, push, call, ret 등을 이용하여 분석하지만 디스어셈블리에선 언어가 아닌 바이너리코드를 분석하는 과정을 말한다.  

 

이 과정에서  컴퓨터 구조와 메모리에 대해 알아가는 것이 현명한 방법이다. 

 

 

위 이미지는 프로그램을 리버싱 툴에 올려놓은 모습으로 메모리가 중간에서 이어주는 역할을 한다.

 

메모리를 자세히 확대하면 CODE, DATA, HEAP, STACK으로 볼 수가 있고 사람은 안보이지만 컴퓨터상 메모리는 한칸씩 주소를 지니고 있기에 이를 메모리 주소라 말하기도 한다. 

 

 

그렇다면 왜 바이너리로 분석하는가?  이는 3가지로 요약할 수 있다.


컴퓨터라 2진수로 표현이 가능하나, 너무 비효율적이고 데이터로 표현하기 까다롭게 길어짐

2자리의 16진수가 1byte2진수로 변환될 수 있기 때문에 정보를 표현하기 유용

RGB16진수 3개로 표현한 값 #96dfa5 와 같이 표현

 

레지스터 구조 및 과정

1.메모리 명령어를 입출력 버스로 이용하여 cpu로 이동 / 용어 : fetch

2.입출력 버스에서 버스 인터페이스, 명령어 공간에 가서 컨트롤 유닛으로 감/ 용어 : decode

3.컨트롤 유닛에서 산술논리장치(ALU)로 이동해서 처리한다. / 용어 : execution

 

레지스터는 EAX, EBX, EDX등을 말하는 것이며 어셈블리와 디스어셈블리를 할 때 자주 나오는 말이니 참고하면서 공부하는것이다. 

 

설명해준 레지스터를 잠시 말하면 아래와 같다.

 

EAX   

- 종료되는 상황에 값이 있으면 return 값을 의미한다.

ex) MOV EAX 10   -> Return 10

 

EDX

 - MUL, DIV(곱셈, 나눗셈) 값 저장 

ECX

 - 평소에는 그냥 계산 값

 - rep 명령이 있으면 반복 횟수로 변경

 

EBX

-메모리 주소의 위치

 


요약

 

어셈블리어는 개발하는 회사마다 천차만별

로직은 비슷함

디스어셈블리는 어셈블리의 역공학 

바이너리는 16진수 바이트

 

 

'Computer science > Disassemble' 카테고리의 다른 글

프로세서 레지스터(Processor Register) - 1  (2) 2023.11.09

+ Recent posts