[Linux/C] 시스템 콜
2020.01.01
시스템 콜 커널에서 제공하는 저수준의 API를 사용하는걸 시스템 콜이라고 하는데, 이 호출이 어떤 식으로 이뤄지는지 생각해본적이 있는가? 시스템 콜은 커널의 코드를 실행하겠다는 뜻인데, 사용자 영역의 앱이 직접적으로 커널의 코드를 실행할 수 있을까? 물론 그럴 수 없다. 그럼 어떻게 ? 사용자 영역의 앱이 시스템 콜을 사용하려한다는 시그널을 커널로 보낼 수 있다. ( 아키텍처마다 약간씩 메커니즘이 다를 수는 있는데 기본 원리는 같음 ) i386 아키텍처에서는 인터럽트 명령에 0x80 값을 넣어 주면 시스템 콜을 사용한다는 뜻. MOV EAX, 5 INT 0x80 위에서 인터럽트 명령 전에 EAX 레지스터에 5를 담았는데, 5는 open() 시스템 콜을 의미한다. ( 각각의 시스템 콜마다 정해진 숫자값이 ..