본문 바로가기

공부정리4

복사 생성자 12345678910111213141516171819202122232425262728293031#include #include #include class position{private: char *name; int age;public: position(char *aname, int age) { position::name = aname; position::age = age; } ~position() { puts("파괴"); }}; int main(void){ position a("갓코더", 17); position b = a;} Colored by Color Scriptercs 설명은 거두절미하고, 위의 코드가 정상적으로 돌아갈 것 같은가? 분명 컴파일은 성공적일 것이다. 하지만, 종료되고 파괴자가 실행되.. 2016. 7. 27.
파괴자 저번 글에 생성자가 객체 자체의 초기화외에 외부 환경까지 초기화 하기 때문에 객체가 사라질 떄 반대의 처리를 할 함수도 필요하다. 예를들어 다른 컴퓨텨와 연결했다면, 사라질 때 연결을 끊고 할당된 메모리도 반환해야 한다. 이러한 뒷처리를 하는 함수를 파괴자 라고 한다. 이 역시 객체가 소멸될 때 컴파일러가 자동으로 호출한다. 파괴자의 이름은 클래스 이름 앞에 ~를 붙인 것으로 고정되어 있으며 인수와 리턴 값은 가지지 않는다. 1234567891011121314151617181920212223242526272829303132333435363738#include #include #include class position{private: int x; int y; int *ptr;public: position(.. 2016. 7. 27.
생성자 클래스의 객체를 선언하면 메모리에 이 객체가 즉시 생성된다. 다만 클래스도 하나의 자료형인 만큼, 여느 변수처럼 할당만 되지 값이 있진 않다. 때문에 모두 쓰레기 값일 것이다. 그래서 초기화를 해줘야 한다. 만약1234567891011121314class position{public: int x; int y;}; int main(void){ position a; a.x = 10; a.y = 10;} cs이러한 코드가 있으면, 생성할 때마다 위의 코드와 같은, 변수를 하나 하나 초기화 해야 하는 번거로움이 있을 것이다. 이래서 등장한 것이 생성자이다. 생성자는 객체를 초기화 하기 위해서 존재한다. 우리가 int a = 5를 하는 것 처럼 position a(10, 10);을 하면 a라는 position클래.. 2016. 7. 27.
BOF 정리 BOF란? Buffer Overflow 의 약자로 버퍼보다 큰 데이터를 입력했을때 발생하는 취약점이다. 원리를 설명하자면, 공격자가 버퍼를 넘어서는 크기로 입력하여 메모리 임의의 위치에 원하는 값을 써넣는 기법이다. 예를들면 버퍼에 쉘코드를 넣고 ret에 버퍼의 주소를 쓸 수도 있다. pwnable.kr 의 bof 문제를 풀어보겠다. pwnable.kr 에서 받아온 bof.c 의 내용이다. 메인함수에서 func를 호출하고 인자로 0xdeadbeef를 넘겨주고, 우리가 gets로 입력하여 인자로 넘긴 key의 값을 cafebabe로 변조하면 풀리는 문제인 것 같다. bof 를 gdb로 열어보겠다. main을 디스어셈블한 코드인데, 딱히 별 것 없고 func를 호출하는 것 같다. func를 디스어셈블 한 코.. 2016. 7. 17.