#4강 메모리
📌RAM(Random Access Memory)
-주기억장치에 사용, 휘발성 메모리
-하드디스크에 비해 속도가 빠르기 때문에 주기억장치로 사용
-저장 원리: 전류의 흐름에 따라 0과 1로 저장
참고) 레지스터, 캐시, 램, 하드디스크
용량: 하드디스크(T) > RAM(G) > 레지스터(Byte)
속도 및 가격: 레지스터 > RAM > 하드디스크
#5강 메모리 주소 접근
-word(워드): 컴퓨터 설계 시 정해지는 메모리 기본 단위, 하나의 기계어 명령어나 연산을 통해 저장된 장치로부터 레지스터에 옮겨 놓을 수 있는 데이터 단위
-메모리 각 주소에 바이트 단위로 데이터를 담도록 설계
-32비트: 주소 값은 32bit(4Byte)로 설계, 2^32개의 주소 지정 가능
→32bit 램 용량은 2^32*1바이트 = 4GB //램에 따라 다름
참고) 데이터 단위
K: 2^10, M: 2^20, G: 2^30
-어셈블리어로 메모리 주소 표현은 [주소]
ex) mov [00402000], al
-mov [mem], [mem]은 없음 → 레지스터에 복사 후 다시 복사해야함!
#6강 메모리 크기 지정
-*ptr: 포인터, 메모리의 공간을 가르킴
dword ptr: 4Byte
word ptr: 2Byte
byte ptr: 1Byte
->ptr 앞에 크기 지정
참고) word의 크기는 현재 주로 4byte지만 16bit때 지칭하던 이름을 그대로 사용하고 있기 때문에 여기서 word는 2byte를 지칭, qword: 8Byte
ex) mov (dword ptr) ds: [402000] eax
->402000부터 4byte를 사용하겠다, dword는 생략 가능
mov [402000], 0
-> 크기를 지정하지 않았다는 오류가 뜸 mov dword ptr [402000], 0
-여기서 ds는 data segment
-cs ds es ss -data를 읽어올 때는 ds: 를 씀, ss는 스택 영역, cs는 코드 영역에서 읽어오는 것 -생략 가능
-메모리에는 낮은 자리수부터 1byte씩 반대로 들어감(리틀앤디안)
ex) 91 91 54 75 -> 75 54 91 91
#7강 리틀 엔디안
📌엔디안: 메모리와 같은 1차원 배열에 여러 개의 연속된 대상을 배열하는 방법 , 메모리에 데이터를 저장할 때 1바이트 단위로 하지만 읽고 쓸 때는 4바이트(32비트) 혹은 8바이트(64비트) 단위로 하기 때문에 바이트 저장 순서 필요, 리틀엔디안과 빅엔디안이 있음
📍리틀 엔디안
-낮은 자리부터 쓰기(오른->왼), 레지스터로 옮길 때 역순으로
-낮은 자리의 데이터가 먼저 오기 때문에 더 높은 자릿수 데이터를 추가할 때 다음 바이트에 넣으면 됨
-cpu에게 용이
-intel은 little 엔디안 방식을 사용
📍빅 엔디안
-높은 자리(msb)부터 쓰기(왼->오른), 레지스터로 옮길 때 순서대로
-사람이 읽기가 편함
ex) mov dword ptr [402004], 12345678
78 56 34 12
mov ecx, dword ptr[402004] 78 56 34 12
mov dx, word ptr[402004] 12 34
'해킹 및 보안 > 리버싱' 카테고리의 다른 글
[스무디] 어셈블리어 강의 정리 (18~22강) (0) | 2022.11.10 |
---|---|
[스무디]어셈블리어 강의 13~17강 정리 (0) | 2022.10.13 |
[스무디] 어셈블리어 강의 8~12강 정리 (0) | 2022.10.06 |
[ 스무디 ] 어셈블리어 강의 1~ 3강 정리 (1) | 2022.10.02 |
리버싱 입문 (0) | 2022.10.02 |