🤔 커널이란? 커널은 운영체제의 핵심 부분으로, 컴퓨터 자원을 직접적으로 관리하는 역할을 한다. 사용자와는 직접적으로 상호작용하지 않기 때문에, 사용자의 명령어를 해석하여 커널로 전달하는 번역기(셸, Shell)이 있다. 아래는 32bit 시스템에서 커널 공간과 사용자 공간의 구분이다. 이처럼 둘은 서로 분리되어있고 접근 권한도 다르다. 자세한 내용은 아래 링크를 참고하자. [🖥️ Computer Science/System] - [Pwnable] 시스템콜(syscall), 셸, 커널모드 vs 유저모드 [Pwnable] 시스템콜(syscall), 셸, 커널모드 vs 유저모드 오늘 다룰 내용은 다음과 같다. 커널 모드와 유저 모드 시스템콜(syscall)이란 무엇인가? (+syscall과 call과의 차이)..
오늘 다룰 내용은 아래와 같다. 명령어 행 파라미터의 처리 환경 변수의 처리 파라미터의 처리 UNIX에서는 cli에 입력한 명령어 이름, 옵션, 파일 등을 main의 인자로 전달할 수 있다. 오늘은 이렇게 cli와 결합하여 프로그래밍하는 법의 기초를 배워보겠다. int main(int argc, char* argv[]) // int argc; 파라미터의 수 // char* argv[]; 파라미터들로 이루어진 문자열 배열 argc와 argv의 구조는 아래처럼 나타낼 수 있다. 예를 들어 sample이라는 프로그램이 있다고 하고 뒤에 인자를 입력해줬다고 가정하자 sample aaa bbb ccc 우리가 리눅스 터미널에서 명령어 뒤에 파라미터 보내는 것과 완벽하게 동일하다. 이 경우 argc=4, argv는 ..
Virtual Device 실제 시스템과 마찬가지로 VM에서는 성능, 메모리, 스토리지, 네트워킹 또는 그래픽과 같은 기능을 시스템에 제공하는 특수 장치가 필요하다. 물리적 시스템은 일반적으로 이러한 목적으로 하드웨어 장치를 사용한다. 그러나 VM은 소프트웨어 구현으로 작동하기 때문에 가상 장치라고 하는 이러한 장치에 대한 소프트웨어 추상화를 한다. 리눅스에서 virtual device란, 실제로 연결된 하드웨어가 없는 디바이스 파일을 말한다. virtual device는 sw 형태로 존재하나 hw인 척(?)을 한다. 따라서 시스템으로 하여금 특정 hw가 존재하는 것으로 착각하게 한다. 그럼 이러한 virtual device는 왜 존재하냐? 보통 OS에서 에러를 고치기 위해 사용된다고 한다. 예를 들어 ..
Background - /etc/passwd 파일 이 파일에서는 사용자 이름, 암호, 그룹 등의 정보를 다룬다. tail -5 /etc/passwd 명령어로 해당 파일의 마지막 5행을 출력해 보았다. 파일 내용이 의미하는 것은 다음과 같다. 사용자이름 : 암호 : UID : GID : 그 외 정보 : 홈 디렉토리 : 셸 (UID, GID는 각각 사용자 아이디, 그룹 아이디의 약자) cf) adduser 명령어로 사용자를 추가할 때 따로 UID와 GID를 설정하지 않으면 이전 사용자의 아이디에 +1한 값으로 설정된다. 궁금증 저 파일을 보다가 궁금해진건데 root의 uid는 항상 0인것 같다. 흠.. 그렇다면 얘는 꼭 0일까? 아니면 바꿀 수 있을까? 그리고 그냥 uid=0인애로 접근하면 루트 따낸것과 동..
일단 환경변수가 무엇인지에 다해서 간단히만 짚고 넘어가자. 분명 환경변수라는 단어, 환경 변수 설정이라는 건 보통 개발환경을 구축할 때 많이 들어보긴 했을 것 같은데 그게 뭔지에 대해서 알려주는 곳은 별로 없었다. 그래서 이번 기회에 공부하는 김에 정리해보려고 한다. 환경변수란? 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 변수들의 모임이다. 즉 컴퓨터 환경 설정할 때 값으로 설정되어있는 애들이라고 생각하면 편하다. 리눅스나 윈도우나 환경변수는 다 있다. 예) $PARH, $HOME, $PWD, $TZ 등 참고로 환경변수는 일반 사용자가 임의로 변경할 수 없다. (루트는 가능한듯) 한편 리눅스에서 export 명령어를 치면 환경 변수 정보들을 출력할 수 있다. 우리가 명령어를 칠 때도 터미널에서는..
리눅스의 설정 디렉토리인 /etc에 대하여 가볍게 짚고 넘어가자. /etc는 루트 디렉토리인 '/'의 바로 하위에 있는 디렉토리 중 하나로, 리눅스의 시스템 환경 설정 파일, 사용자, 그룹 정보들을 담고 있는 디렉토리이다. 오늘 포스트에서는 기초 파일들 몇개만 다루고 나머지는 상황에 따라 다루도록 하겠다. ▷ /etc/passwd 파일 이 파일에서는 사용자 이름, 암호, 그룹 등의 정보를 다룬다. tail -5 /etc/passwd 명령어로 해당 파일의 마지막 5행을 출력해 보았다. 파일 내용이 의미하는 것은 다음과 같다. 사용자이름 : 암호 : UID : GID : 그 외 정보 : 홈 디렉토리 : 셸 (UID, GID는 각각 사용자 아이디, 그룹 아이디의 약자) cf) adduser 명령어로 사용자를 ..