2009-02-26 3 views
0
  1. linux 2.6은 2.4와 어떻게 다른가요?
  2. 소스 커널을 수정할 수 있습니까?
  3. int 0x80 서비스 루틴을 수정할 수 있습니까?
+0

당신이하고 싶은 것을 말하면 왜 시스템을 해킹하는 것이 올바른 방법일까요? –

+0

이것은 실제로 여러 가지 다른 질문 인 것처럼 보입니다 ... 그것을 해독하면 더 나은 결과를 얻을 수 있습니다. – cdeszaq

답변

5
  1. 건축적인 개혁입니다. 모든 것이 내부적으로 바뀌 었습니다. SMP 지원이 완료되면 프로세스 스케줄러가 크게 개선되고 메모리 관리가 정밀 검사를 받게되고 많은 다른 많은 일이 발생합니다.
  2. 예. 그것은 오픈 소스 소프트웨어입니다. 소스 사본이 없으면 공급 업체 나 kernel.org에서 가져올 수 있습니다.
  3. 네,하지만 그것은 휴식의 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

관련 문제