FTZ level10

2022. 2. 25. 14:15Site/FTZ

이번시간에는 level10에 대하여 풀어보겠습니다

공부를 하는 입장이니 틀린게 있어도 양해부탁드리겠습니다


cat hint를 통해 확인해보니 위화면처럼 뜹니다

 

공유메모리 ?

*

- 공유 메모리 : 여러 프로그램 간에 통신을 제공하거나 중복 복사본을 피하기 위해 여러 프로그램에서 동시에 액세스할 수 있는 메모리[메모리에는 명령어, 지역 변수, 동적 변수, 전역 변수와 같이 데이터가 존재하는데 그 프로세스만 접근할 수 있고 변경이 가능] 

 

- 필요 헤더파일 : #include <sys/shm.h> #include <sys/ipc.h>

- 관련된함수 

shmget() : 공유메모리를 생성하거나 접근하기 위한 함수

shmget(ket_t key, size_t size, int shmflg)

-> key_t key : 공유메모리를 할당할때 쓰는 고유의 key값

    size_t key : 새로 할당 할 공유메모리의 최소크기, 이미 존재하는 메모리는 0으로 입력받음

    int shmflg : 함수동작관련플래그, IPC_CREATE, IPC_EXCL로 구성

                    IPC_CREATE : key를 이용하여 새로운 공유메모리 공간생성. 0666

                    IPC_EXCL : 공유메모리 공간이 이미 존재할경우 error가 발생하여 -1 을 리턴

shmat() : 공유메모리를 프로세스에서 사용할 수 있게하는 함수- 필요헤더파일 : #include <sys/types.h> #include <sys.shm.h>- 관련된함수 void *shmat(int shmid, const void *shmaddr, int shmflg)-> shmid : shmget을 통해 얻을수있는 공유메모리의 id값    shmaddr : 첨부되는 어드레스 주소. NULL -> 커널에서 적절한 주소값 반환    shmflg : SHM_RND[공유메모리주소를 프로세스에 맞게 할당], SHM_RDONLY[공유메모리를 읽기전용으로설정]

 

shmctl() : 공유메모리를 제어하기 위한 함수

-필요헤더파일 : #include <sys/ipc.h> #include <sys.shm.h>

int shmctl(int shmid, int cmd, struct shmid_ds *buf)

-> shmid : 공유메모리 식별주소

    cmd

    shmid_ds *buf : 공유메모리정보를 구하기 위한 버퍼포인터

 

shmdt() : 공유메모리를 프로세스에서 분리할 수 있게하는 함수

-필요헤더파일 : #include <sys/types> #include <sys.shm.h>

int shmdt(const void *shmaddr)

-> void *shmaddr : 분리할 공유메모리의 주소[성공 : 0, 실패 : -1]

*

 

공유메모리 상태를 확인하기 위해 ipcs -m을 명령하였습니다

 

*

ipcs : 현재 생성되어있는 IPC자원목록조회

-a : 모든 IPC자원목록조회

-m : 공유메모리자원조회

-s : 세마포어자원조회

-q : 메시지큐자원조회

*

여기서 봐야될 부분은

0x00001d6a(16) -> 7530(10) / 권한자 : root / perms : 666 / bytes : 1028

위에서 힌트로  key_t값이 7530이라 했습니다

/tmp에서 파일을 생성하겠습니다

 

shmget을 통하여 공유메모리에 접근하기위한 값을 n에 저장하고

포인터 변수pN을 통하여 반환값이 포인터인 shmat의 값을 가리켜서 공유메모리를 사용할수있게 한다음

출력하여 저장했습니다

 

다음시간에는 level11에 대하여 풀어보겠습니다...

'Site > FTZ' 카테고리의 다른 글

FTZ level12  (0) 2022.03.06
FTZ level11  (0) 2022.03.04
FTZ level9  (0) 2022.02.25
FTZ level8  (0) 2022.02.24
FTZ level7  (0) 2022.02.24