OS/Concept2012. 8. 18. 20:25

CPU register



CPU에서 사용되는 Register 종류

▷ General-Purpose Register

▷ Segment Register

▷ EFLAGS Register

▷ EIP Register


General-Purpose Register


논리, 산술 연산에 사용되는 operand나 주소 계산을 위한 operand, memory pointer에 사용됩니다.

▷ EAX (Extended Accumulator Register) : 산술연산, 함수 return 값 저장

▷ EBX (Extended Base Register) : DS Segment의 Data를 가리키는 역할, 주소지정 확대

▷ ECX (Extended Counter Register) : Loop의 반복 횟수, bit shift 수 저장

▷ EDX (Extended Data Register) : 입출력 동작

▷ ESI (Extended Source Register) : Memory 복사에서 출발지 index

▷ EDI (Extended Destination Register) : Memory 복사에서 목적지 index

▷ ESP (Extended Stack Register) : Stack pointer, Stack의 TOP을 가리킴

▷ EBP (Extended Base Register) : Stack 내부의 변수 값을 읽을때 사용, Stack frame의 시작점


Segment Register


Memory에서 segment를 확인하는 pointer입니다.

▷ CS : Code segment의 시작 주소 저장

▷ SS : Stack segment의 시작 주소 저장

▷ DS : Data segment의 시작 주소 저장

▷ ES : 여분의 Data segment용, 문자열 처리 명령시 목적지 data 저장

▷ FS/GS : 여분의 segment용, IA32 프로세서에서만 사용 가능


EFLAGS Register


상태 플래그, 제어 플래그, 시스템 플래그 그룹으로 구성되어 있으며, 1, 3, 5, 15, 22 ~ 31 bit는 예약되어 있습니다.


상태 플래그 (Status Flags)

산술연산(ADD, SUB, MUL, DIV)을 하는 명령의 결과를 가리킵니다.

▷ CF (bit 0) Carry Flag : 부호 없는 정수끼리의 산술연산 후 오버플로우 확인

- 0 : 오버플로우 발생 안한 경우

- 1 : 오버플로우 발생

▷ PF (bit 2) Parity Flag

▷ AF (bit 4) Adjust Flag

▷ ZF (bit 6) Zero Flag : 산술연산 또는 비교동작의 결과 표시

- 0 : 결과가 0 이 아닌 경우

- 1 : 결과가 0 인 경우

▷ SF (bit 7) Sign Flag

▷ OF (bit 11) Overflow Flag : 부호 있는 수 끼리의 산술연산 후 오버플로우 확인

- 0 : 오버플로우 발생 안한 경우

- 1 : 오버플로우 발생 (너무 큰 정수 또는 너무 작은 음수인 경우)


제어 플래그 (Control Flags)

▷ DF (bit 10) Direction Flag


시스템 플래그 (System Flags)

▷ TF (bit 8) Trap Flag

▷ IF (bit 9) Interrupt enable Flag

▷ IOPL (bit 12, 13) I/O Privilege Level field

▷ NT (bit 14) Nested task Flag

▷ RF (bit 16) Resume Flag

▷ VM (bit 17) Virtual-8086 Mode flag

▷ AC (bit 18) Alignment Check flag

▷ VIF (bit 19) Virtual Interrupt Flag

▷ VIP (bit 20) Virtual Interrupt Pending flag

▷ ID (bit 21) Identification flag


EIP Register


현재 프로세서가 실행하고 있는 명령 바로 다음에 실행할 명령어의 offset을 저장합니다.

소프트웨어에 의해 조작될 수 없으며, CALL, JMP, RET와 같은 control-transfer 명령에 의해서만 영향을 받습니다.


'OS > Concept' 카테고리의 다른 글

Copy On Write  (0) 2012.11.15
Stack frame  (0) 2012.08.26
Little endian  (0) 2012.08.16
Stack에 변수가 저장되는 방식  (0) 2012.08.16
Posted by slimV
OS/Linux2012. 8. 18. 16:51

LD_PRELOAD



대부분의 최신 운영체제는 동적 라이브러리라고도 하는 공유 라이브러리(Shared library)를 사용합니다.

공유 라이브러리를 포함하는 파일의 확장자는 .so(Shared Object)입니다.

일반적으로 libaaa.so는 libaaa.so.x에 대한 Symbolic link로, 여기에서 x는 라이브러리의 버전을 나타냅니다.

Linux의 경우 이런 라이브러리의 대부분을 /usr/lib에 저장합니다.


Linux에서도 프로세스가 로드될 때 여러 라이브러리들을 로드합니다.

LD_PRELOAD는 프로그램이 라이브러리를 가져오기 전에

원하는 라이브러리를 먼저 등록해주는 환경변수입니다.

프로그램은 LD_PRELOAD로 지정된 공유 오브젝트를 먼저 링크하게 됩니다.



명령어


컴파일러 옵션 : gcc [source] -fPIC -shared -o [destination]

참조 명령 : export LD_PRELOAD="[file path]"


'OS > Linux' 카테고리의 다른 글

setuid & setgid & sticky bit  (0) 2012.08.20
Symbolic/Hard link  (0) 2012.08.17
i-node  (0) 2012.08.17
Posted by slimV

Skeleton

id : vampire

pwd : music world


'Wargame > Lord of BOF (Redhat)' 카테고리의 다른 글

[Level12]golem -> darkknight  (0) 2012.08.21
[Level11]skeleton -> golem  (0) 2012.08.20
[Level09]troll -> vampire  (0) 2012.08.17
[Level08]orge -> troll  (0) 2012.08.17
[Level07]darkelf -> orge  (0) 2012.08.17
Posted by slimV