Reference

    [C++] 6. C++ STL(Standard Template Library)

    본글은 최근에 Pwnable 문제중 C언어, Python뿐만 아니라 C++로 이루어진 문제를 접하는 경우가 많아져서 Python, Java와 다른 C++만의 문법이나 차이점등을 정리하기 위해 작성한 글입니다. 잘못된 부분이 있다면 댓글로 알려주시기 바랍니다. (예시 코드등은 TCP 스쿨의 자료를 참고했습니다.) https://www.tcpschool.com/cpp/intro 1. STL(Standard Template Library) C++ 언어는 일반화 프로그래밍이라는 특징을 가지고 있습니다. 이러한 특징은 Java처럼 데이터를 중시하는 객체 지향 프로그래밍 언어와 달리 프로그램의 알고리즘에 중점을 둡니다. STL은 이러한 C++의 일반화 프로그래밍의 한 축으로 자료 구조, 함수, 알고리즘등을 쓰기 쉽..

    [C++] 5. C++ 프렌드(friend), 스마트 포인터(smart pointer)

    본글은 최근에 Pwnable 문제중 C언어, Python뿐만 아니라 C++로 이루이진 문제를 접하는 경우가 많아져서 Python, Java와 다른 C++만의 문법이나 차이점등을 정리하기 위해 작성한 글입니다. 잘못된 부분이 있다면 댓글로 알려주시기 바랍니다. (예시 코드등은 TCP 스쿨의 자료를 참고했습니다.) https://www.tcpschool.com/cpp/intro 1. 프렌드(friend) 객체의 private 멤버는 해당 객체의 public 멤버 함수로만 접근이 가능합니다. 하지만 경우에 따라서는 해당 객체의 멤버 함수가 아닌 함수도 private멤버에 접근해야만 할 경우가 발생합니다. 이런 경우 private 멤버에 접근하기 위해 public 멤버를 새롭게 추가하는 것으로 해결할 수 있는데..

    [C++] 4. C++ 참조자(reference), 소멸자(destructor)

    본글은 최근에 Pwnable 문제중 C언어, Python뿐만 아니라 C++로 이루이진 문제를 접하는 경우가 많아져서 Python, Java와 다른 C++만의 문법이나 차이점등을 정리하기 위해 작성한 글입니다. 잘못된 부분이 있다면 댓글로 알려주시기 바랍니다. (예시 코드등은 TCP 스쿨의 자료를 참고했습니다.) https://www.tcpschool.com/cpp/intro 1. 참조자(Reference) C++에서는 특정 변수의 실제 이름 대신 사용할 수 있는 참조자라는 기능이 있습니다. 참조자는 크기가 같은 큰 구조체와 같은 데이터를 함수의 인수로 전달하거나 클래스 설계할때 자주 사용됩니다. 문법은 아래와 같습니다. int 변수이름; // 변수의 선언 int& 참조자이름 = 변수이름; // 참조자 선..

    [C++] 3. C++ new()와 delete()

    본글은 최근에 Pwnable 문제중 C언어, Python뿐만 아니라 C++로 이루이진 문제를 접하는 경우가 많아져서 Python, Java와 다른 C++만의 문법이나 차이점등을 정리하기 위해 작성한 글입니다. 잘못된 부분이 있다면 댓글로 알려주시기 바랍니다. (예시 코드등은 TCP 스쿨의 자료를 참고했습니다.) https://www.tcpschool.com/cpp/intro 1. C++ 메모리 동적 할당 C에서 메모리 동적할당에 사용되는 라이브러리 함수 malloc()등이 있다. C++에서도 마찬가지로 라이브러리 함수를 사용하기 때문에 malloc()으로 할당하거나 free()로 할당된 메모리의 해제하는 것이 가능하다. 그러나, C++은 라이브러리 함수 보다 효과적인 동적 할당 및 해제를 위해 new 연..

    [C++] 2. C++ typeid, endl 과 \n 차이

    본글은 최근에 Pwnable 문제중 C언어, Python뿐만 아니라 C++로 이루이진 문제를 접하는 경우가 많아져서 Python, Java와 다른 C++만의 문법이나 차이점등을 정리하기 위해 작성한 글입니다. 틀린부분이 있다면 댓글로 알려주시기 바랍니다. (예시 코드등은 TCP 스쿨의 자료를 참고했습니다.) https://www.tcpschool.com/cpp/intro C++ type 확인 C++ 에서도 Java나 Python 처럼 객체의 타입에 관한 정보를 확인 해야 할 때가 있다. 이때 C++에서 사용되는 문법이 typeid 이다. typeid(표현식) 이 typeid는 다른 문법에서 처럼 타입을 확인할 수 있게 해주는 기능만 있는 것이 아닌 name 이라는 멤버 함수를 추가로 확인이 가능한데 이는..

    [C++] 1. C++ nullptr, namespace

    본글은 최근에 Pwnable 문제중 C언어, Python뿐만 아니라 C++로 이루이진 문제를 접하는 경우가 많아져서 Python, Java와 다른 C++만의 문법이나 차이점등을 정리하기 위해 작성한 글입니다. 틀린부분이 있다면 댓글로 알려주시기 바랍니다. (예시 코드등은 TCP 스쿨의 자료를 참고했습니다.) https://www.tcpschool.com/cpp/intro C++ 11/14 추가 내용 기존 C++ 98/03과는 다르게 11/14에 변경된 사항이 많은데 다음과 같다. 1. 초기화 리스트 및 초기화 방법의 통합 2. 새로운 타입의 추가 : long long형 정수 3. 새로운 스마트 포인터 추가 : 4. 널 포인터 상수 추가 : nullptr 5. 열거체의 범위 지정 6. 자동 타입 변환 : ..

    [Pwn] Docker파일 주어진 경우 Heap 분석 환경셋팅

    최근 Pwnable 문제를 풀면서 부딪힌 Error에 관해 해결방법을 찾아 정리한 글로 잘못된 부분이 있다면 댓글로 알려주시기 바랍니다. Heap 분석을 위한 플러그인 포너블 문제를 하다보면 stack과 heap을 분석해야 할 경우가 많다. 작성자가 사용하는 pwndbg나 pwn-peda의 경우 아래의 Github및 명령어를 이용해 빌드하는 편이다. # pwndbg install git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh # gdb-peda install git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit #heapi..

    [Pwn] House of spirit

    House of Spirit House of 시리즈중 하나로 Free함수의 인자를 조작해 원하는 주소에 Overwrite가 가능하도록 만드는 공격기법으로 공격조건은 다음과 같습니다. 공격 조건 1. free 함수의 인자를 조작할 수 있어야 할 것 2. Overwrite 하고자 하는 타겟의 주소를 알아야 할 것 3. 해당 영역에 값을 쓸수 있어야 할 것(Overwrtie를 하기 위한 부분) 해당 공격기법을 이해하기 위해서는 배경지식이 필요한데 이전에 정리한 IO_File 정리에서 fastbin, tcache등을 정리한내용을 기반으로 정리하였습니다. https://skysquirrel.tistory.com/268 [Linux] Linux File System _IO_FILE 드림핵 로드맵을 진행하면서 이해하..