전체 글

전체 글

    [C/C++] 동적 메모리 할당 malloc(), calloc(), realloc(), free()

    메모리에서 스택영역, 데이터영역, 힙영역 이런 말을 한번쯤은 들어 보셨을겁니다. 이 메모리들은 각각 특성이 있습니다. 일단 메모리 그림을 한번 보고 가시죠. 메모리가 이렇게 생겼구나.. 정도만 알고 가시면됩니다 ㅇㅅㅇ 정적메모리는 보통 스택영역, 데이터영역을 의미합니다. 메모리 크기는 컴파일할 때 결정되며 실행 도중에 해제되지 않고, 프로그램이 종료할 때 알아서 운영 체제가 회수합니다. C 언어에서 정적 할당된 메모리는 스택에 위치하기 때문에 할당 받을 수 있는 메모리에 제약을 받습니다. 말그대로 컴파일 시 결정된 크기만큼 그 딱그만큼만 쓸 수 있다는거죠. 실행중에 변경이 불가능합니다. 그와 반대로 동적메모리는 프로그램 실행 시간(런타임) 중에 프로그래머가 동적으로 메모리를 할당 할 수 있습니다. 한마디..

    [BOF] strcpy 와 strncpy 함수의 취약점

    취약점을 공부하시는 분들 대다수는 Memory Corruption 취약점에대해 잘 알고 계실것입니다. 길이(메모리 경계) 를 검사하지 않는 함수는 buffer overflow에 취약하여 Exploit당하기 쉽죠.- BOF에 취약한 대표적인 함수 : strcpy , strcmp, gets, scanf, strcat, getwd, sprintf 등등 그래서 보통은 strncpy 같은 길이를 검사하는 함수를 쓰게되는데 .. 이함수도 bof에 안전한건 절대 아니였다. 나도 항상 길이를 검사하면 괜찮겠지 했는데 그게아니였다 ㅇㅅㅇ;; 먼저 strcpy , strncpy 함수부터 알아봅시다. strcpy : NULL문자를 만나기 전까지의 문자열을 복사합니다.strncpy : 문자열을 지정된 길이만큼 복사합니다. s..

    [C/C++]공유메모리 함수 shmget(),shmat(),shmdt(),shmctl()

    해커스쿨의 ftz 워게임을 풀던중 공유메모리에 관한 문제가있었다.. 처음봤을때는 이게뭐지... 하다가 키워드 중심으로 검색을 해봤더니 공유 메모리를 생성하고 관리하는 함수들이 있었다. 넘나 어려운것 ㅡ.ㅡ;; 공유메모리란 한마디로 여러 프로세서들이 함께 사용하는 메모리 이다. 프로세스들이 메모리 자체를 공유하게 됨으로써 데이터복사와 같은 오버헤드가 발생하지않아서 속도가 빠르다고한다. 이함수들을 쓰기위해서는 sys/ipc.h , sys/shm.h 두 헤더파일을 include 해준다. 동작방식은 간단하더라.. shmget() 으로 공유메모리를 구별하는 key값과 크기, 옵션을 부여하고 공유메모리를 생성한다. shmat() 으로 프로세스에 메모리 세그먼트를 붙이고 , shmctl() 함수로 공유메모리를 제어한..