그냥 물어보고 싶은데, 리눅스에서 standart 시스템 호출이 인터럽트 벡터 테이블을 가리키는 int 명령어로 수행된다는 것을 알고 있습니다. 나는 이것이 Windows에서 비슷하다고 가정합니다. 그러나 좀 더 높은 수준의 특정 시스템 루틴을 어떻게 호출합니까? 당신은 창문을 창문에 어떻게 만들라고 말합니까? 이 DLL에서 코드에 의해 처리되는 알아,하지만 실제로 어셈블러 - 지시 수준에서 happend? DLL의 루틴은 int 명령어로 소프트웨어 인터럽트를 호출합니까, 아니면이를 처리 할 수있는 다른 접근법이 있습니까? 감사.Windows에서 시스템 호출
답변
창을 만들기 위해 Win32 호출을 만드는 것은 실제로 인터럽트와 관련이 없습니다. 클라이언트 응용 프로그램은 이미 링커에서 사용할 주소를 제공하는 호출을 제공하는 .dll과 연결되어 있습니다. 호출 메 커니 즘의 차이점에 대해 묻기 때문에 여기에서는 커널 레벨 호출이나 장치 드라이버와는 달리 모든 응용 프로그램에서 사용할 수있는 Win32 호출에 대해 설명합니다. 어셈블리 언어 수준에서는 대부분의 Win32 호출이 내부적으로 필요한 커널 호출을 수행하는 사용자 수준 호출이기 때문에 다른 함수 호출과 동일합니다. 링커는 일종의 분기 명령의 대상으로 Win32 함수의 주소를 제공합니다. 구체적인 사항은 컴파일러에 따라 다릅니다.
[편집] 당신이 인터럽트와 int에 대해 옳은 것처럼 보입니다. 벡터 테이블. CodeGuru에는 NT 커널 호출 작동 방식에 대한 OS 세부 정보가있는 좋은 기사가 있습니다. 링크 :
http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8035
Win32 API는 사용자 모드 (링 3)로 실행되는 레이어입니다. Windows는 또한 OS/2 및 POSIX API 계층을 지원하는 데 사용되었지만 사용되지 않아 제거되었습니다. 창 관리자는 순수 사용자 모드 코드이며 커널 호출이 필요하지 않습니다. 커널 리소스 (CreateThread, VirtualAlloc 등)를 사용하는 API 호출 만이 "실제"운영 체제 (ntdll.dll)를 호출하고 소프트웨어 인터럽트 (int 0x2e)로 링 0에 트랩합니다.
이것은 전체적인 이야기는 아닙니다. NT4 이후 윈도우 매니저는 커널 모델 (win32k.sys)에 있었고, 그것을 호출하기위한 전체 시스템 콜을 가지고있다. 그 전에도 CSRSS에 살았으므로 커널을 통해 호출하여 (LPC를 사용하여) 커널 호출을 수행해야했습니다. 또한 Windows는 int 0x2e를 사용하여 잠시 동안 커널 모드에 들어 가지 않습니다. 어떤 아키텍처를 사용하는지에 따라 다르지만 일반적으로 현재는 x86을 사용하여 x86에서 커널 모드로 전환됩니다. – Stewart
- 1. Windows에서 시스템 "로드"받기
- 2. Windows에서 Java로 시스템 파일이란 무엇입니까?
- 3. Windows에서 시스템 스피커의 낮은 레벨 제어
- 4. 시스템 호출 번호와 시스템 호출 핸들러 포인터 사이의 충돌
- 5. Windows에서 Ghostscript를 호출 이름으로 호출 하시겠습니까?
- 6. fork 시스템 호출
- 7. 시스템 호출 예
- 8. 실행 시스템 호출 오류
- 9. 어셈블리 및 시스템 호출
- 10. 는 시스템 호출
- 11. Fork() 시스템 호출 변경
- 12. Vfork 시스템 호출
- 13. 시스템 호출 및 명령
- 14. 파이프 시스템 호출
- 15. 모의 시스템 호출 루비에서
- 16. Ruby에서 시스템 호출
- 17. .NET에서 모노로 시스템 호출
- 18. FUSE에서 시스템 호출 디버깅
- 19. UNIX 시스템 호출 목록?
- 20. .net 시스템 호출 성능
- 21. 스레드에서 슬립 시스템 호출
- 22. Windows에서 다른 프로세스의 함수 호출
- 23. Windows에서 "시스템"및 "시스템 유휴 프로세스"PID가 상수입니까?
- 24. Windows에서 시스템 호출의 출력을 저장할 수 있습니까?
- 25. Windows에서 유용한 시스템 프로파일을 수집하려면 어떻게합니까?
- 26. Windows에서 액세스 2003 시스템 DSN을 추가 7
- 27. 리눅스 시스템 호출 getpeername C++
- 28. W2K8의 Windows 시스템 호출 문제
- 29. 시스템 호출 set_tid_address는 언제 사용됩니까?
- 30. Android Linux 시스템 호출 목록
네, dll에 필요한 호출이 있음을 알고 있습니다. 하지만 기본적으로 내가 원하는 모든 것입니다 : 소프트웨어 인터럽트의 형태로 Windows syscalls을 그리는 dll 루틴을 가지고 있습니까? 그렇지 않은 경우 Windows 커널에 창을 표시하는 방법은 무엇입니까? 내가 아는 한, 당신의 프로그램이 링벨 레벨 제한 때문에 int 명령어보다 다른 방법으로 움직일 수는 없다는 것을 알 수 있습니다. –
b-gen-jack-o-neill : AFAIK 커널은 창 관리를 담당하지 않습니다. –
최신 프로세서에서는 INT 명령어로 소프트웨어 인터럽트를 실행하는 대신 sysenter/sysexit 명령어가 사용됩니다. 개념은 동일합니다. 커널 모드로 전환하는 방법입니다. 윈도우는 커널에서 관리되지 않지만 CreateWindow 시스템 호출을 찾지 못합니다. 대신 윈도우 관리자와 같은 다른 프로세스와의 통신을 포함하여 수많은 다른 시스템 호출을 기반으로 빌드됩니다. – nos