read() pwntools vs tty
C
read( 0 , buf , 0x100 )와 같은 코드가 있을때 우리는 pwntools 보낼때와 tty ( 터미널 ) 로 보낼때 차이를 어느정도 인지 하고 있을것이다.
이번에는 그에 대해 자세히 알아보자
read는 scanf와 달리 바이트를 저수준으로 그대로 읽기에 white-space가 없는 것을 알고 있을 것이다.
근데 이번에 생각이 든게 그럼 read함수는 언제까지 바이트를 읽는 것이지? 라는 생각이 들었다.
즉, tty에서 enter를 쳤을때 왜 read는 사이즈만큼 읽지도 않았는데 바로 끝나는 거지? 라는 생각이 들었다.
정리해보자면,
read 함수는 단순히 바이트를 한번 뭉탱이로 받기만 한다. ( 내부 버퍼에 한번만 받음 ) 당연히 read 함수에서 읽는 size 만큼에서 자르며, 그대로 buf에 옮긴다.
근데, tty로 할때는 tty 프로세스 자체가 line-buffer 형태임 (흔히, canonical mode 라고 함 ) , 따라서 엔터를 치는 순간 바이트를 보내보려서 read 함수에서 바로 buf에 넣어버린다.