2011-04-22 5 views

답변

9

, 당신은 인터럽트 디스크립터 테이블 레지스터 결과적으로 인터럽트 디스크립터 테이블 자체를 얻기 위해 sidt 명령을 사용할 수 있습니다. 손에두고, 당신은 system_call의 주소 (또는 x86-64의 호환성을 위해 IA32 상당) 0x80으로 시스템 호출 인터럽트에 의해 호출 기능을 얻을 수 있습니다. 해당 인터럽트 핸들러를 디스 어셈블하고 특정 간접 호출 명령어를 스캔하면 호출 명령어 내에서 주소를 추출 할 수 있습니다. 해당 주소는 시스템 호출 표 (x86) 또는 x86-64의 IA32 호환 시스템 호출 표입니다.

x86-64 네이티브 시스템 호출 테이블을 얻는 것은 비슷합니다 : sidt으로 인터럽트 테이블을 재구성하는 대신 프로세서의 IA32_LSTAR MSR을 읽으십시오. (high << 32 | low)의 주소가 시스템 호출 디스패처입니다. 이전과 같이 메모리 스캔 호출 명령에서 sys_call_table 주소를 추출하지만, 어드레스의 상위 32 비트를 마스크 기억한다.

이 글은 로트보다 더 많은 기술적 인 정보 (검색 할 바이트 등)를 커널 코드에서 훑어보기 전에 이해해야합니다. 빠른 Google 검색 후 문서화 된 전체 프로세스 (예제 모듈 코드 포함) here을 발견했습니다.

행운을 빌어 요, 자신을 날려하지 않으려 고!

+0

을 사용하지 않음 링크가 죽었습니다. ( – galaxy