사용언어) 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이란 바이너리가 실행될 때마다 스택, 힙, 데이터, 코드 영역등의 주소를 할당할 때 임의의 주소에 할당하는 보호 기법입니다. 아래의 그림을 보시면 이해가 ..
DreamHack에 있는 SystemHakcing 트랙의 Stage 7의 문제인 ROP 실습의 설명을 보고 정리해보았습니다. ※ 로컬영역에서는 아래 전체코드가 실행이 되지 않을 수 있습니다. puts 다음, read함수가 실행이 될때, edx값이 0이 되면 안되는데 0이 되면서 read함수가 오류를 일으킬 수 있습니다. 이는 Ubuntu 버전에 따라 다릅니다. 물론 저도 로컬에서는 아직 실행하지 못해서 방법을 찾고 있습니다. 만약 찾아지게 되면 추가적으로 올리겠습니다. 먼저 간단하게 메모리 보호 기법에 대해 정리해보면, 프로그램이 실행될 때 왼쪽과 같이 프로그램이 실행되면서 메모리에 적제되는데, 이 메모리에 할당되지 않는 영역의 메모리에 접근하는 것을 막기 위해 사용된다. 먼저 코드를 살펴보면, puts..
- Total
- Today
- Yesterday
- 지뢰찾기
- 정보보안
- 더블버퍼링
- 링크드 리스트
- 워셜알고리즘
- queue
- STL
- 백준
- 레지스터
- BFS
- c++
- 개발
- 인제대학교
- 시스템보안
- Dreamhack
- 멀티쓰레드
- 고양이
- 야경
- 알고리즘
- 컨퍼런스
- Select모델
- 드림핵
- 학교
- 자료구조
- 보안
- 스레드풀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |