Information Security
시스템 콜을 이용한 mkdir 프로그램 작성 실습 -시스템 콜만 가지고 리눅스의 mkdir 명령어와 비슷하게 프로그램을 구현해볼 것이다. -필요한 시스템 콜 함수는 다음과 같다. -> read: 경로 입력 -> write: 디렉터리 생성 성공, 실패 출력 -> mkdir: 디렉터리 생성, 성공시 0 반환 1. C언어로 작성 먼저 C로 작성하고 어셈블리어로 변환할 것이다. 일단 read 함수로 경로를 입력받는다. -> fd = 0 (표준 입력) read 함수는 입력받은 문자열에 자동으로 개행 문자가 들어가게 된다. 경로에는 개행 문자(\n)가 들어갈 수 없기 때문에 제거해야 한다. while 문을 이용해서 개행 문자를 찾으면 0으로 값을 변경하도록 한다. 다시 확인해보면 개행이 되지 않는 것을 확인할 수 ..
System Call -커널은 하드웨어 특성으로부터 프로그램들을 격리시키고, 하드웨어와 직접 상호 작동하며 프로그램에게 일관된 서비스를 제공한다. -Shell(user)은 정의된 System Call에 의해서 커널과 통신한다. 1. C 언어에서 시스템 콜 사용 -라이브러리에 이미 시스템 콜과 동일한 Wrapper 함수가 존재한다. printf 함수 대신에 write 시스템 콜 함수를 이용해서 문자열을 출력할 것이다. # man 2 write -> write 함수의 원형 확인 write(fd, 출력할 문자열, 문자열의 개수) -> fd = file descriptor -> fd : 1(표준 출력) -> 공백, 개행 문자 포함 문자열의 개수 : 13 2. 어셈블리어에서 시스템 콜 사용 -어셈블리어에서는 호출..
우리는 메인 함수를 정의할 때 int main()을 사용하지만 사실 메인 함수의 원형은 다음과 같다. int main(int argc, char *argv[]); saved ebp saved eip argc *argv 여기서 ebp는 main 함수의 기준점이다. argc, *argv는 main 함수가 호출되기 전에 항상 존재하고 있다. argc는 인자의 개수를 저장하고 있다. 값을 확인해보면 인자를 입력하지 않아도 무조건 `1이다. -> 실행 파일명(./a.out)도 인자로 간주하기 때문이다. 프로그램을 실행할 때 main 함수로 전달되는 인자를 space로 구분해서 지정할 수 있다. -> 실행 파일 + 3개의 인자 = 4 위의 C 코드를 어셈블리어로 변환한 것이다. -> argc는 main 함수의 기준..