리눅스 시스템 프로그래밍 [2] : 파일 입출력

이번 장에서는 리눅스 시스템 프로그래밍에 있어 가장 기초적이면서도 중요한 파일 입출력에 대해 정리하고자 한다. 모든 소스코드는 우분트 32비트 환경에서 컴파일 하였으며, 시큐리티 옵션을 따로 주지 않았다.   1. 파일 디스크립터 (File Descriptor) 리눅스에서 파일을 읽고 쓰기 위해서는 반드시 파일을 Open 해야만 한다. 파일이 오픈되고 나면 파일 디스크립터라는 일종의 Index 번호가 반환되며, 이 값은 파일을 오픈한 프로세스의  고유 번호라 생각하면 이해하기 쉬울 것이다. 파일 디스크립터는 C int 타입으로 표현되며, 최대값은 1,024이지만 1,048,576번까지 설정할 수 있다. 또한, 프로세스마다 관례적으로 0,1,2 번은 사전 배정되어 있는데 각각 번호별 의미는 다음과 같다. 0 : 표준 입력 (stdin) / 1 : 표준 출력 (stdout) / 2 : 표준 오류 (stderr) 따라서 실제 하나의 파일을 생성하게 되면 “3번” 부터 File Descriptor가 부여된다. [crayon-597267bc11243378267372/] 결과 : FD Success…!!! FD is : 3   2. 파일 열기 (File Open) 리눅스 시스템에서는 파일을 읽거나 쓰기 전에,  파일에 접근하기 위한 준비 과정을 거친다. 이 때 사용되는 함수가 바로 open() 또는 creat() 함수이다. open용 함수에서는 flags를 통해 파일의 쓰임새를 정의하게 되는데 O_RDONLY, O_WRONLY, O_RDWR 중 하나를 사용해야 한다. 파일 사용이 끝나면 close()함수를 통해 파일을 닫아주어야 한다. [crayon-597267bc11256405293350/] 지정한 파일명이 존재하지 않을때 생성하고 싶을 때는 O_CREAT flag를 사용한다. 새롭게 생성된 파일의 uid와 gid는 파일을 생성한 프로세스의 그것을 따라가게 된다. (매우 중요함) 파일을 생성하기 위한

Continue Reading

리눅스 시스템 프로그래밍 [1] : Prologue

  1. 학습의 목적 그동안 미뤄왔던 리눅스 시스템 프로그래밍 공부를 다시 한번 차근차근 정리 할 필요가 있을 것 같다. 지금까지 리눅스 시스템 프로그램은 워게임 또는  Exploit을 작성할 때만 간간히 사용했던게 대부분이라 체계적이고 깊이 있는 코드 작성을 하지 못했던게 사실이다. 또한, 현재 주 업무로 진행하고 있는 모바일 기기의 커널 보안 검증을 위해서는 리눅스 시스템 프로그래밍 학습이 필수적이라 할 수 있다. 따라서 높은 산을 한걸음씩 옮겨가는 마음으로, 기본에서 부터 리눅스 커널을 완벽하게 이해할 수 있는 수준까지 차근차근 나아가보도록 하자.   2. 학습 방법 아무런 방향성 없이 공부를 하는 것 만큼이나 비효율적인 것은 없다. 최소한의 시간에 최대한의 성과를 얻기 위해서는 정확한 키워드와 방향성을 갖고 접근하는 것이 맞겠다. 먼저 방향성을 제시해 줄 두 권의 책은 다음과 같다. – 리눅스 시스템 프로그래밍 – 로버트 러브 저, 한빛미디어 O’REILLY 책의 특징 (혹은 단점?) 중 하나가 바로 그림이 거의 없다는 점이다. 사실 외국 도서의 특징이기도 한데… 이 책 역시 그리 친절한 책은 아니다. 그럼에도 불구하고 이 책을 선정한 것은 시스템 프로그램을 하는데 있어 필수적인 함수들에 대해 간결하면서도 정확하게 설명하고 있기 때문이다. 다만, 개념을 익히는 데는 좋으나 활용 측면에서는 다른 리소스를 이용하는 것이 좋을 듯 하다.  – 리눅스 커널의 이해 – 다니엘 보에이, 한빛미디어 리눅스 커널을 다룬 책의 바이블(?) 과도 같은 책이다. 번역이 매우 마음에 들지 않지만 (개인적인 생각)

Continue Reading

다 읽었다 – 난 정말 C PROGRAMMING을 공부한 적이 없다구요

다시 C언어 공부하기 리버스 엔지니어링을 시작하기에 앞서 가장 기초가 되는 C언어 공부를 시작했다. 사실 C언어를 몰라도 악성코드 동적 분석 정도는 어느 정도 가능한 영역이라 생각되지만, 리버스 엔지니어링을 제대로 배우기 위해서는 초석을 잘 닦는게 중요하다 싶어 10년만에 다시 C언어 책을 집어들게 되었다.   [  선택한 교재 – 제목이 매우 직관적(?) 이라 할 수 있겠다 ] 사실 여러 커뮤니티에서 C언어에 관련된 책 추천글을 많이 보았는데, 개인적으로 어떤 책이 되었든간에 한번을 완독하는 것이 가장 중요하다고 생각한다. 특히 C언어의 경우 마의 “포인터 장벽”만 넘기고 나면 이해가 되지 않는 나머지 부분이 저절로 이해가 되는 경험을 할 수 있을 것이다. 제목이 직관적인 “난 정말 C Programming을 공부한 적이 없다구요” 를 선택했다. 저자인 윤성우 님은 워낙에 C, 자바 관련 교재에서 베스트 셀러인 까닭에 일단 믿고 따라가보기로 했다. “난 정말 C Programming을 공부한 적이 없다구요” 책 평가 책에 대한 총평을 내리자면 C언어 입문서로써는 정말 최고의 책이 아닐까 싶다. 특히 다년간의 강의에서 얻은 경험들 – 입문자들이 어려워 하거나 궁금해하는 부분 – 을 책에 잘 녹여냈고 공부하면서 독자가 느낄 수 있는 불안감들 – 무슨말인지 모르겠거나 나중에서야 이해할 수 있는 부분 – 을 해소시켜주는 저자의 배려가 돋보이는 책이다. [ 각 챕터별 폴더 정리 후 예제와 실습문제는 모두 풀어보았다 ] 책 활용 방법과 환경 구성 각 챕터별로 예제도 충분하고 실습문제 역시 생각의 범위를 넓혀주기에

Continue Reading

Site Footer

Sliding Sidebar

About Me

About Me

June Park