
범용 레지스터 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..

사용언어) C++ GitHub) https://github.com/Hong-Study/MineSweeper GitHub - Hong-Study/MineSweeper Contribute to Hong-Study/MineSweeper development by creating an account on GitHub. github.com 게임의 전체적인 과정은 다 만들었다. 그런데 친구에게 게임을 보여주니까, 빠른 속도로 이동할 때 화면이 끊기는 깜빡임이 발생해서 아쉽다는 얘기를 들었다. 그래서 친구가 깜빡임을 없애기 위해서 더블 버퍼링이라는 기술을 한번 추가해 보는게 어떻겠냐고 추천을 해서, 넣어보게 되었다. 깜빡임 발생 이유는? 보통 CMD 에서 우리가 std::cout 로 출력을 하게 되면 하나의 화면에 ..
사용언어) C++ 문제) 전화번호부에 적힌 전화번호를 담은 배열 phone_book이 solution함수의 매개 변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 풀이) 문제 내용 자체는 풀만 했었지만, 내가 sort의 원리를 잘못 이해하고 있어서 한 시간 정도 노가다를 하고 있었다.. 여기서 오해한 부분은 sort가 길이별로 정렬될 줄 알았는데, 크기 순으로 정렬이 되어서 문제가 풀리지 않았다. 풀이는 sort로 정렬해서 뒤의 크기를 앞 문자열 크기만큼 잘라서 비교해서 넘어가면 된다. 사용 코드) #include #include #include #include using namespace s..
개발 언어 ) C++ Github) https://github.com/Hong-Study/MineSweeper.git GitHub - Hong-Study/MineSweeper Contribute to Hong-Study/MineSweeper development by creating an account on GitHub. github.com 어언 2학년.. C++ 공부를 마치고 무얼 할까 생각을 하고 있었다. 그러다가 문득 게임을 만들어보고 싶어졌고, 한번 간단한 게임을 만들어보자는 취지에서 지뢰찾기 개발 프로젝트를 시작하였다. 게임을 만들기 앞서, 난 한가지 목표를 정했다. 그것은 최소한의 구글링을 통해서 게임을 직접 구현할 것. 그래야 내 실력이 어느정도 성장할 수 있을 것 같았다. 첫 번째로, 게임..
사용언어 ) C++ 백준 : https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제) 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. 풀이) 이 문제는 두가지 방식으로 풀 수 있는데, 단순하게 배열을 만들어서 정렬해서 푸는 방식이 있고, C++의 STL중 하..
- Total
- Today
- Yesterday
- BFS
- 보안
- queue
- Select모델
- 야경
- 자료구조
- 컨퍼런스
- 정보보안
- 더블버퍼링
- 백준
- 고양이
- 워셜알고리즘
- 스레드풀
- Dreamhack
- 지뢰찾기
- 드림핵
- 개발
- 레지스터
- STL
- 알고리즘
- 시스템보안
- c++
- 멀티쓰레드
- 학교
- 인제대학교
- 링크드 리스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |