시스템 호출 인터페이스는 낮은 수준에서 구현되므로 "일반적인"코드가 아닌 아키텍처 / 플랫폼에 따라 다릅니다.
그러나 Linux 32 비트 x86 커널에서 시스템 호출이 유사한 아키텍처 Linux 64 비트 x86_64에서 동일하게 유지되지 않는 숫자를 갖는 이유를 명확하게 알 수 없습니까? 이 결정의 동기는 무엇입니까?
필자의 첫 번째 추측은 배경 문제가 x86_64 시스템에서 32 비트 응용 프로그램을 실행 가능하게 유지하는 것이므로 시스템 호출 번호에 대한 합리적인 오프셋을 통해 시스템은 사용자 공간이 32 비트 또는 64 비트임을 알 수 있습니다. 각기. 그러나 이것은 사실이 아닙니다. 적어도 x86_64의 시스템 호출 번호 0 인 read ()는이 생각과 일치 할 수없는 것 같습니다.
또 다른 추측은 시스템 호출 번호를 변경하면 보안 / 경화 배경을 가질 수 있다는 것입니다.
아키텍처에 의존하는 코드 부분을 구현하는 데 어려움을 겪지 않아도 필요가 없을 때 시스템 호출 번호를 변경하는 방법이 여전히 궁금 합니다 (16 비트 레지스터조차도 현재 ~ 346 숫자보다 크게 더 많이 저장하기 때문에 호출), 휴식 호환성 이외를 달성하기 위해 도움이 될 , 도서관, libc를 통해 시스템 호출을 사용하지만 (완화시킨다 그것을).