내 보호 모드 운영 체제를 작성 중이며 인터럽트 테이블을 수정하여 특정 명령 (인쇄 문자열 등)이 명령 프롬프트 응용 프로그램이나 다른 응용 프로그램으로 리디렉션되도록하는 방법을 알아야합니다. 테이블을 어떻게 수정합니까?x86 인터럽트 테이블 수정
답변
우선 시스템 호출에 인터럽트를 사용하는 것은 실제로 더 이상 구현하지 않는 "좋은"방법이 아닙니다. x64를 타깃으로한다면, SYSCALL
과 SYSRET
을 조사해야한다. 사용자의 관점에서 볼 때 커널 코드를 매우 편리하게 사용할 수있다. 단, 이들을 사용하는 데 필요한 몇 가지 설정 루틴을 다룰 의향이 있다면 두. 이것이 옵션이 아니라면, 커널 코드의 일부를 프로세스의 가상 메모리 공간에 매핑하는 것을 고려하십시오. Google은 linux-gate.so.1
에 대해 그 구현 예를 읽습니다.
그러나 인터럽트를 통해 syscalls을 구현하려는 경우 계속 읽으십시오. 물론 하드웨어와 실제로 상호 작용하기 위해서는 어느 쪽이든 인터럽트 테이블을 수정해야 할 것입니다.
보호 모드의 x86에서 인터럽트는 IDT에 있으며 인터럽트 설명자 테이블의 줄임말입니다. 이 테이블은 Task Gate Descriptor, Interrupt Gate Descriptor 또는 Trap Gate Descriptor를 포함 할 수 있습니다. 테이블은 리얼 모드 인터럽트 벡터 테이블과 유사한 방식으로 인덱싱된다. 테이블의 n
번째 항목에는 인터럽트를 처리하는 데 사용되는 설명자가 포함됩니다. n
. 인터럽트 및 트랩 게이트는 실제로 여분의 데이터가있는 인터럽트 루틴 코드의 포인터 일 뿐이지 만 태스크 게이트에는 해당 인터럽트를 처리 할 태스크의 선택자인 태스크 상태 세그먼트 선택기가 있습니다. 64 비트 모드에서는 하드웨어 작업 처리가 더 이상 사용되지 않으므로 인터럽트/트랩 게이트 만 지원됩니다.
나는이 문제를 매우 명확하게 설명하는 인텔 매뉴얼을 다시 말하면서 그 요점을 실제로 볼 수 없으므로, 이제 have a read (비록 지금은 그러한 매뉴얼이 있어야 함)을 제안합니다. 인터럽트 처리는이 문서의 6 장에 설명되어 있습니다.
- 1. 인터럽트 테이블 수정
- 2. x86 : 인터럽트 처리기 루프
- 3. x86 CPU의 인터럽트 대기 시간 추정
- 4. c/asm에서 인터럽트 다시 쓰기 x86
- 5. 인터럽트 설명자 테이블 변경
- 6. WiX x86/x64로 machine.config 수정
- 7. x86 명령어 인코딩 테이블
- 8. ARMv6 인터럽트 벡터 테이블 설정
- 9. x86 아키텍처 용 Linux 커널에서 인터럽트 처리 코드의 위치
- 10. 사용자 입력 수정 - x86 Linux 어셈블리
- 11. x86 어셈블리에서 자체 수정 코드를 작성하는 방법
- 12. 소프트웨어 인터럽트
- 13. 병합 : 여러 테이블 수정
- 14. Teradata의 테이블 수정
- 15. 잘못된 레코드가있는 테이블 수정
- 16. 미러링 테이블 수정
- 17. 수정 내 테이블 뷰
- 18. 테이블 생성 날짜 수정
- 19. 테이블 수정/기록?
- 20. MySQL 테이블 수정
- 21. Java 테이블 arraylist 수정
- 22. 리눅스에서 인터럽트 처리. 인터럽트 공유
- 23. 인터럽트/인터럽트 처리기 이해, PIC
- 24. BIOS 인터럽트 페이지 번호
- 25. 타이머 인터럽트
- 26. BIOS 인터럽트 호출 방법
- 27. 행이있는 데이터 테이블 수정 가능
- 28. SPID를 처리 할 테이블 수정
- 29. Android에서 수정 가능한 셀이있는 테이블
- 30. 인터럽트 및 인터럽트 처리에 관한 질문
http://wiki.osdev.org/IDT – ughoavgfhw
OS 아키텍처 및 시스템 호출에 대한 모든 논의는 .. 음, 방대한 주제 일뿐입니다. '나는 명령 프롬프트가 찾을 수있는 특정 위치에 문자열과 물건을 넣을 것'을 의미한다 - 그렇게 쉽게 원격으로 밝혀지면 놀랄 것이다. 일반적으로 '다른 앱으로 리디렉션'하는 것은 '문자열 및 항목'이 OS 할당 구조체/객체로 이동하고 다른 프로세스의 스레드로 신호를 보내 게된다는 것을 의미합니다. 사용되는 메커니즘이 아키텍처에 따라 다르므로 매우 복잡하며 블로그로 설계 할 수 없습니다. –