[pwnable.kr] fd
먼저 fd를 그냥 실행시켜 보았다.
>> argc가 2개 이상이어야 함!
- atoi() 함수: 문자열을 정수로 변환해준다.
입력된 argv[1]을 정수로 바꾸어 0x1234를 뺀 값이 fd 변수가 된다.
- read() 함수
형태: ssize_t read(int fd, void *buf, size_t nbytes)
인수: int fd > 파일 디스크립터 / void *buf > 파일을 읽어들일 버퍼 / size_t nbytes > 버퍼의 크기
표준 출력함수 fgets()와는 달리(파일의 첫 번째 행만 반환), read()에서 사용할 버퍼의 크기가 피일보다 크다면, 파일의 모든 내용을 읽어들이게 된다.
man read로 read 함수에 대한 설명을 보았다.
>> fd로부터 count만큼의 byte를 읽어서 buf에 써주는 함수이다.
- fd (file descriptor)
파일을 관리하기 위해 OS에서 필요로 하는 정보를 가지고 있는 정수.
즉, OS가 만드는 소켓이나 파일들에게 부여되는 정수 번호이다.
중요한 것은 Linux에서 0: 표준 입력(STDIN), 1: 표준 출력(STDOUT), 2: 표준 에러(STDERR)라는 것!
그렇다면, fd 값을 0으로 만들면 read() 함수는 표준 입력을 기다리게 될 것이고, 이후 그 값을 buf에 쓸 것이다!
0x1234의 DEC(정수)값은 4660이다.
fd 변수에는 argv[1]에 0x1234를 뺀 정수값이 들어간다.
따라서 fd를 0으로 맞추기 위해 0x1234의 정수값인 4660을 argv[1]로 넣는다.
'write-up > pwnable' 카테고리의 다른 글
[pwnable.kr] bof (0) | 2019.09.28 |
---|---|
[pwnable.kr] collision (0) | 2019.09.26 |
[LOB] LOB TIP (0) | 2019.09.15 |
[LOB] level 1: gate (0) | 2019.09.14 |
[ftz] level 20: we are just regular guys (0) | 2019.08.27 |
댓글