|
ncloader
0.1
|
[Stage 2 Error Code] 더 자세히 ...
#include <x86.h>
데이타 필드 | |
| struct { | |
| unsigned long edi | |
| unsigned long esi | |
| unsigned long ebp | |
| unsigned long esp | |
| unsigned long ebx | |
| unsigned long edx | |
| unsigned long ecx | |
| unsigned long eax | |
| } | pushad |
| unsigned short | ds |
| unsigned short | reserved0 |
| unsigned short | es |
| unsigned short | reserved1 |
| unsigned short | fs |
| unsigned short | reserved2 |
| unsigned short | gs |
| unsigned short | reserved3 |
| unsigned long | irq |
| unsigned long | ecode |
| unsigned long | eip |
| unsigned long | cs |
| unsigned long | eflags |
[Stage 2 Error Code]
Thread context 에서 CPU Context 정보를 담는 자료구조로써, x86 CPU 는 Interrupt 가 발생하면, eip, cs, eflags 를 push 한다. 그 이후의 것들은 각 ISR 에 진입하기 직전에 OS 개발자가 모두 Push 하는 것으로 CPU 의 현재 상태를 모두 저장해 놓는 것이다.
Context switching 은 CPU 를 사용하는 사용자가 계속 바뀌는 것을 의미하는 것이라고도 볼 수 있는데, CPU 사용자가 바뀔 때마다, 그 사용자의 Context 를 유지해주어야 한다.
이 자료구조는 Context 를 유지하기 위한 자료들로 구성된다.
| unsigned long pt_regs::cs |
복귀할 코드가 있는 코드 세그먼트 셀렉터
| unsigned short pt_regs::ds |
Initialize these segment selectors using USER selectors
| unsigned long pt_regs::eax |
| unsigned long pt_regs::ebp |
| unsigned long pt_regs::ebx |
| unsigned long pt_regs::ecode |
에러 코드
| unsigned long pt_regs::ecx |
| unsigned long pt_regs::edi |
| unsigned long pt_regs::edx |
| unsigned long pt_regs::eflags |
| unsigned long pt_regs::eip |
복귀할 Instruction pointer
| unsigned short pt_regs::es |
| unsigned long pt_regs::esi |
| unsigned long pt_regs::esp |
| unsigned short pt_regs::fs |
| unsigned short pt_regs::gs |
| unsigned long pt_regs::irq |
인터럽트 요청 번호
| struct { ... } pt_regs::pushad |
pushad 명령으로 채워지는 값들
| unsigned short pt_regs::reserved0 |
| unsigned short pt_regs::reserved1 |
| unsigned short pt_regs::reserved2 |
| unsigned short pt_regs::reserved3 |