
스톰트루퍼 둠칫둠칫
스둠둠~
유저모드에서 커널모드에게 동작을 요청하는 방법이다.
유저모드란 운영체제가 사용자에게 부여하는 권한이기 때문에 상당히 한정적이다. 그렇기에 파일시스템에 접근하는 등 그 이상의 권한을 얻기 위해서 이를 가능하게 하는 커널모드의 접근으로 syscall을 사용한다.
syscall은 추가적인 인자를 필요로 하지 않는 단일 명령 니모닉이다.
그렇기에 어셈블리 상황에서도 단 한줄만 입력하면 된다.
syscall
하지만 이 하나의 명령은 굉장히 다양한 동작을 수행할 수 있다.
이러한 동작은 레지스터의 값들에 의해서 결정된다.
rax : syscall에 따른 동작을 결정한다.
예를 들어 rax가 0x0이면 이는 sys_read를 실행하여 파일의 내용을 읽근다.
그리고 아래의 순서대로의 레지스터가 각 함수의 인자를 차례대로 담당한다.
rdi rsi rdx rcx r8 r9 stack
rdi에 설정되어 있는 값을 함수의 첫번째 인자,
rsi에 있는 값을 함수의 두번째 인자로 사용하여 동작한다.
이 링크와 같이 다양한 자료에서 syscall을 호출 시 레지스트의 값에 대한 정보를 제공하고 있다.
이들을 이용해서 shellcode를 작성할 때와 같이 다양한 상황에서 syscall을 사용하는데 도움을 얻을 수 있을 것이다.
다음에는 shellcode를 직접 작성해보는 것을 공부해보게카