- linux 2.6은 2.4와 어떻게 다른가요?
- 소스 커널을 수정할 수 있습니까?
- int 0x80 서비스 루틴을 수정할 수 있습니까?
0
A
답변
5
- 건축적인 개혁입니다. 모든 것이 내부적으로 바뀌 었습니다. SMP 지원이 완료되면 프로세스 스케줄러가 크게 개선되고 메모리 관리가 정밀 검사를 받게되고 많은 다른 많은 일이 발생합니다.
- 예. 그것은 오픈 소스 소프트웨어입니다. 소스 사본이 없으면 공급 업체 나 kernel.org에서 가져올 수 있습니다.
- 네,하지만 그것은 휴식의 libc, 그것은 당신의 기본 레이아웃에 휴식 것입니다 것입니다, 당신은 기존의 콜의 순서를 변경하는 경우가 당신의 툴체인을 깰되며, 거의 모든 것이 당신이 원하는 생각할 수 있기 때문에 바람직하지입니다 가능한 한 사용자 공간에서해야합니다.
6
UPDATE :
1 처리기에서 호출 된 함수가 2.6 - 64에 대한 "콜"명령어 핸들러가 호출 되더라도, 0x80으로 처리기가 필수적으로 2.4과 2.6 사이에서 동일하다. 2. 나머지 커널과 마찬가지로 0x80 핸들러를 수정할 수 있습니다.
3. 이전 버전과의 호환성을 제거하지 않으면 수정하지 않고 아무 것도 손상시키지 않습니다. 예를 들어, 그렇게 느껴지면 자신 만의 추적 또는 백도어를 추가 할 수 있습니다. 핸들러를 수정하면 libs와 toolchain을 깨뜨릴 것이라는 다른 게시물이 잘못되었습니다. 디스패치 알고리즘을 깨거나 디스패치 테이블을 잘못 수정하면 문제가 발생합니다.
3a. 원래 게시 한 것처럼 0x80 서비스를 확장하는 가장 좋은 방법은 시스템 호출 처리기를 확장하는 것입니다.
는 커널 소스는 말하기를 : 당신이 원하는 경우 테이블 포인터의 순서가 있음을
가 arch/i386/kernel/syscall_table.S
참고 : 그래서, i386을위한
What: The kernel syscall interface Description: This interface matches much of the POSIX interface and is based on it and other Unix based interfaces. It will only be added to over time, and not have things removed from it.Note that this interface is different for every architecture that Linux supports. Please see the architecture-specific documentation for details on the syscall numbers that are to be mapped to each syscall.
시스템 호출 테이블 항목에 커널 유지 관리자와 어느 정도 호환성을 유지하려면 포인터를 배치하기 전에 테이블을 채워야합니다.
는 콜 벡터 번호
그럼 인터럽트 디스크립터 테이블에 엔트리를 배치
set_system_gate
통해
system_call
함수의 주소를 설정는 traps.c .H
irq_vectors
정의된다.
system_call
함수 자체가 entry.S에 있으며 시스템 호출 테이블에서 요청 된 포인터를 호출합니다.
코드를 읽을 수있는 몇 가지 세부 정보가 있지만 0x80 인터럽트 처리기의 직접 수정은
system_call
함수 내부의 entry.S에서 수행됩니다. 보다 정상적인 방법으로, 디스패치 메커니즘을 수정하지 않고도 자신의 함수를 삽입하여 시스템 호출 테이블을 수정할 수 있습니다.
사실, 2.6 소스를 읽으면 int 0x80과 x86-64 syscall이 지금까지 동일한 코드를 사용한다고 직접 말합니다. 따라서 x86-32와 x86-64에서 이식성있는 변경을 할 수 있습니다.
END 업데이트
INT 0x80 메서드는 시스템 호출 테이블 처리기를 호출합니다. 이는 EAX 레지스터의 내용을 기반으로 커널 함수를 호출하여 호출 테이블에 레지스터 인수를 일치시킵니다. 사용자 정의 커널 API 함수를 추가하기 위해 시스템 호출 테이블을 쉽게 확장 할 수 있습니다.
이것은 시스템 호출 테이블을 사용하기 때문에 x86-64의 새로운 syscall 코드에서도 작동합니다.
당신은 등을 확장하는 것보다, 당신의 libc, 초기화를 포함한 모든 종속 라이브러리와 코드를 중단됩니다 다른 방식으로 현재 시스템 호출 테이블을 변경하는 경우
다음은 현재 리눅스 시스템 호출 테이블입니다 : http://asm.sourceforge.net/syscall.html
관련 문제
- 1. x86 칩에는 0x80 이외의 INT 명령어가 있습니까?
- 2. 이것으로 datagridview를 수정할 수 있습니까?
- 3. foreach 아키텍처를 수정할 수 있습니까?
- 4. 파일에서 행을 수정할 수 있습니까?
- 5. 패널의 어린이 폭을 수정할 수 있습니까?
- 6. 생성 후 스칼라 클래스를 수정할 수 있습니까?
- 7. 다른 프로세스의 UID를 수정할 수 있습니까?
- 8. RoR CRUD 동작을 수정할 수 있습니까?
- 9. 이맥스 미니 버퍼의 색상을 수정할 수 있습니까?
- 10. 메모리의 MSI는 어떻게 수정할 수 있습니까?
- 11. 전달하기 전에 va_list를 수정할 수 있습니까?
- 12. Perl에서받은 소켓 메시지를 어떻게 수정할 수 있습니까?
- 13. VS2008 IDE에서 CPU 레지스터를 수정할 수 있습니까?
- 14. 특정 메뉴에 대한 theme_menu_link를 수정할 수 있습니까?
- 15. 어떻게 Settings.bundle을 실시간으로 수정할 수 있습니까?
- 16. Vim에서 어디서 파일을 수정할 수 있습니까?
- 17. 어쨌든 이클립스에서 키보드 단축키를 수정할 수 있습니까?
- 18. setting.setting 파일에서 값을 수정할 수 있습니까?
- 19. .NET에서 런타임시 메서드 본문을 수정할 수 있습니까?
- 20. https 헤더를 어떻게 수정할 수 있습니까?
- 21. Perl에서 $ 0 값을 어떻게 수정할 수 있습니까?
- 22. 디스플레이의 원점을 수정할 수 있습니까? (win32)
- 23. 안드로이드에서 SMS 헤더를 읽고 수정할 수 있습니까?
- 24. 내 .ini 파일을 해킹/수정할 수 있습니까?
- 25. iOS : UIImagePickerController 기본 UI를 수정할 수 있습니까?
- 26. 여러 스레드가 사전을 수정할 수 있습니까?
- 27. URL 인수를 사용하여 Request.ReferrerUrl을 수정할 수 있습니까?
- 28. 키 세트를 통해지도를 수정할 수 있습니까
- 29. 어떻게이 페이스 북의 오류를 수정할 수 있습니까?
- 30. 런타임에 CSS 파일을 편집하거나 수정할 수 있습니까?
당신이하고 싶은 것을 말하면 왜 시스템을 해킹하는 것이 올바른 방법일까요? –
이것은 실제로 여러 가지 다른 질문 인 것처럼 보입니다 ... 그것을 해독하면 더 나은 결과를 얻을 수 있습니다. – cdeszaq