사용언어 : C++ 심심해서 Vector을 그냥 만들어 봤습니다. 심심할때 마다 기능을 추가할 예정이니 간단하게만 봐주세요! #include template class Vector { public: Vector() { this->size = 0; capacity = 5; data = new T[capacity]; } Vector(int num) { this->size = 0; capacity = num; data = new T[num]; } void push_back(T n) { if (size == capacity) { resize(capacity*2); } data[size++] = n; } void resize(int n) { capacity = n; T* tmp = new T[capacity]; ..
사용언어) C++ Queue란 FIFO(First Info First Out)의 형태를 가지고 있는 자료구조이다. front와 rear포인트를 활용하여 입력과 출력을 구현한다. ㅁ front -> ✔ ✔ ✔ ✔ rear -> ㅁ ㅁ ㅁ 1차원 배열을 이용하여 만들었다. 물론 vector나 다른 방식을 이용하면 다른 방식으로도 만들 수 있지만 일단 기초를 다지기 위해서 1차원 배열로 만들었다. 선형큐인줄 알고 만들었지만, 알고보니 선형큐의 보안버전인 원형큐였다는 슬픈 사실이... #include using namespace std; template class Queue { private: T* datas; int front, rear; public: Queue() { datas = new T[n]; fro..
사용언어 : C++ 옛날에 만들었던 내용인데, 두개의 다항식을 입력하면 두 다항식의 합, 차, eval 등을 해주는 프로그램입니다. 다항식의 끝은 마지막 계수 입력이 0이면 하나의 다항식이 입력되는 걸로 취급합니다. #include #include #include typedef struct node { int data; // 계수 int exp; // 지수 struct node *next; // 링크 연결 부분. }node; typedef node* point; point avail; void retNode(point node) { node->next = avail; avail = node; } void cerase(point ptr) { avail = NULL; point temp; if (ptr) {..
사용언어 : C++ - 버블정렬 버블 정렬은 차례대로 첫 번째와 두 번째, 두 번째와 세 번째 .... 이렇게 해서 마지막까지 비교되면, 마지막을 빼고 다시 처음부터 비교하는 방식이다 즉, 1) 1 - 2 번째 비교하여 1이 크면 변경 2) 1을 반복하여 끝까지 진행 3) 끝까지 진행하면 마지막자리를 빼고 다시 1부터 진행. 1번에서 2번 과정 진행 5번 고정 후 다시 1번에서 2번 과정 진행 - 의사코드 array arr = { 1,6,4,2,3,4,6,8,9,2,4 }; void BubbleSort(array& arr) { for (int i = 0; i ..
사용언어 : C++ - 워셜 알고리즘은 관계의 전이 폐쇄를 구하는 효율적인 방법이다. 여기서 관계란 n * n 행렬을 말하고, 이 행렬의 전이 폐쇄를 구하는 알고리즘 중 하나가 워셜 알고리즘이다. - 여기서 폐쇄란, R이 행렬 A에 대한 관계이고, 만약 어떤 특성 P(대칭, 전이, 반사)를 가지지 않는다면 R을 포함하면서 특성 P를 만족시키는 A에 대한 가장 작은 관계 S를 말한다. 고로 전이 폐쇄는, 전이 특성을 포함하는 가장 작은 관계 S를 말한다. 워셜 알고리즘의 의사코드 W := M for k := 1 to n for i := 1 to n for j := 1to n W(i,j) := W(i,j) or ( W(i,k) and W(k,j) ) return W{ W = [w(i,j) is M(R*)] ..
범용 레지스터 x64 rax : 함수의 반환값 rdx : x64에서는 주된 용도 없음 rbx : x64에서는 주된 용도 없음 rcx : 반복문의 반복 횟수, 각종 연산의 시행 횟수 rsi : 데이터를 옮길 때 원본을 가르키는 포인터 rdi : 데이터를 옮길 때 목적지를 가르키는 포인터 rsp : 사용중인 스택의 위치를 가르키는 포인터 rbp : 스택의 바닥을 가르키는 포인터 rip : 명령어 포인터 레지스터 8bit 세그먼트 레지스터 cs, ds, ss : 코드영역과 데이터, 스택 메모리 영역 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작 플래그 레지스터 CF : 부호없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정됨 ZF : 연산의 결과가 0일 경우 설정됨. SF :..
먼저 Canary에 대해 설명하겠습니다. Canary란 일종의 스택가드입니다. 아래의 사진과 같이 Buf 영역 뒤에 Canary 라는 특정한 값이 들어가게 되고, 이 값은 main이 실행될 때 생성이 됩니다. 따라서 프로그램을 실행할때 마다 바뀌는 값입니다. 프로그램 익스플로잇을 위해서 통상 데이터를 입력할 때 Buf를 초과해서 값을 넣게 됩니다. 그러나 Buf를 뒤집어 쓰다가 Canary자리에 다른 값이 들어갈 경우, 프로그램은 Stack오류가 발생했다는 에러를 발생시키고 프로그램을 강제종료 시키게 됩니다. 이 방식이 Canary 방식입니다. ASLR이란 바이너리가 실행될 때마다 스택, 힙, 데이터, 코드 영역등의 주소를 할당할 때 임의의 주소에 할당하는 보호 기법입니다. 아래의 그림을 보시면 이해가 ..
- Total
- Today
- Yesterday
- queue
- 정보보안
- 컨퍼런스
- 인제대학교
- c++
- 학교
- Select모델
- 스레드풀
- 더블버퍼링
- 지뢰찾기
- 알고리즘
- 고양이
- 백준
- 레지스터
- 자료구조
- STL
- 개발
- 워셜알고리즘
- 보안
- Dreamhack
- 멀티쓰레드
- 링크드 리스트
- 시스템보안
- BFS
- 드림핵
- 야경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |