티스토리 뷰
세그먼트 레지스터
! Windows / Linux 에서 각각 사용 용도가 다른 것 같음. 나중에 다시 자세히 정리.
! 세그먼트 레지스터는 과거 286 ~ 80386 시스템에서 사용되었으며, 현재는 거의 사용되지 않음.
! In Real mode(??)
-> Boundary(기준값) + Offset(세그먼트 레지스터 - 메모리 주소 시작과의 차이)로 액세스함.
세그먼트란?
세그먼트란, 프로그램에 정의된 특정 영역으로, 코드, 데이터, 그리고 스택으로 알려져 있는 것을 포함한다.
한 세그먼트는 패러그래프 경계(paragraph boundary), 즉 16(hex 기준)으로 나누어지는 위치에서 시작한다.
세그먼트는 메모리의 거의 어느 곳이나 위치할 수 있고, 실제 모드에서 최대64kb(in x86)의 크기를 가질 수 있다.
(메모리를 사용 용도에 따라 나누어 놓음)
CS - Code Segment
실행될 기계 명령어를 포팜하고 있는 공간.
DS - Data Segment
프로그램에서 정의된 데이터, 상수, 작업 영역을 포함한다.
? Win32 응용 프로그램에서 ds segment 에 위치한 win32api(dll load)을 실행하는 경우가 있음.
SS - Stack Segment
프로그램이 임시로 저장할 필요가 있거나(흔히 지역변수), 사용자가 함수를 호출할 경우, subroutine이
사용할 데이터와 주소를 포함한다.
ES - Extra Segment
???
FS / GS - General Purpose Segment
???
참고
http://karfn84.tistory.com/entry/어셈블리-레지스터의-기능
http://stackoverflow.com/questions/3819699/what-does-ds40207a-mean-in-assembly
http://wiki.osdev.org/Segmentation
http://stackoverflow.com/questions/3819699/what-does-ds40207a-mean-in-assembly
'Reversing > Assembly_x86' 카테고리의 다른 글
x86 어셈블리 기초 _ 함수 호출 규약, 스택 (0) | 2016.07.15 |
---|---|
x86 어셈블리 기초 _ 명령어 모음 (0) | 2016.07.14 |
x86 어셈블리 기초 _ 바이트 순서(byte order) (0) | 2016.07.13 |
x86 어셈블리 기초 _ 메모리, 주소 접근 모드 (0) | 2016.07.12 |
x86 어셈블리 기초 _ 정의, 레지스터 (0) | 2016.07.11 |