본문 바로가기

FTZ level10 본문

wargame/FTZ-LEVEL

FTZ level10

Seongjun_You 2021. 10. 7. 09:41

공유 메모리에 대한 개념이 필요하다.

원래 보통 프로세스에서 메모리는 해당 프로세스만 사용함

이게 무슨 말이냐면 메모리에 여러 변수들 사용할 수 있는 건 다른 프로세스가 아닌

자기 프로세스만 접근 할 수 있음

근데 아주 예외로 다른 프로세스가 접근할 수 있게 만드는 것이 공유 메모리라고 함

이게 IPC기법임

 

hint에서 key_t값을 주었는데 저게 공유 메모리를 할당할 수 있는 고유 key값임

 

일단 IPC코드를 짜려면 함수에 대해서 알아야 함

IPC사용하려면

#include <sys/shm.h>

#include <sys/ipc.h>

 

그리고 연결하기 위한 최소한의 두 개 함수를 알아야 함

int  shmget(key_t  key, size_t  size, int  shmflg);

1) shmget : 인자로 전달된 key의 값으로 공유 메모리를 얻고 공유메모리 조각의 id를 돌려준다.

key : 공유메모리를 할당할 때 사용하는 고유 key

size : 메모리의 최소 size를 의미, 이미 존재하는 메모리면 0

shmflg : IPC_CREAT , IPC_EXCL

 

IPC_CREAT : 새로운 메모리 세크 먼트를 만듦,, 이 flag를 사용하지 않으면 shmget에 명시된 key에 연관된 것을 찾고 접근할 수 있는 권한이 있는지 확인

 

IPC_EXCL : IPC_CREAT와 함께 쓰는 플래그임, 메모리 세그먼트가 존재하면 shmget은 실패함

 

 

 

void *shmat(int shmid, const void *shmaddr, int shmflg);

2) shmat : 공유 메모리 얻었으면 메모리 위치에 이 프로세스를 묶는 시스템 콜

shmid : 공유메모리 id

shmaddr : null이면 커널에서 적절한 주소 반환함

null이 아니면 shmflagSHM_RND일 때, 그 주소와 가장 가까운 주소 반환

 

ipc 데이터 확인

 

함수 구조와 ipc 데이터 기반으로 코드를 작성했다.

perms666으로 했다가 안돼서 삽질했던 기억이 있는데 4자리를 맞추어 주도록 하자.

 

password : what!@#$?

'wargame > FTZ-LEVEL' 카테고리의 다른 글

FTZ level12  (0) 2021.10.07
FTZ level11  (0) 2021.10.07
FTZ level9  (0) 2021.10.07
FTZ level8  (0) 2021.10.07
FTZ level7  (0) 2021.10.07
Comments