본문 바로가기

분류 전체보기

(62)
[시스템해킹] 드림핵 워게임 basic_exploitation_000 유형: Stack Overflow basic_exploitation_001.c #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_flag() { system("cat /flag"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return 0; } mai..
[운영체제] Memory Management (2) Hierarchical Paging Page table size 구하기 / 32bit address, 4KB page size 32bit CPU 혹은 OS; I/O단위가 32bit, 입출력이 32bit 단위로 => 32bit 주소체계 -> logical address space 최대 주소 2^32-1; 크기 = 2^32 -> page size 4KB(=2^12) -> 2^32 / 2^12 = 2^20(=1 million) 개의 logical pages -> 1 million 2^20 page table entries -> 각 page table entry당 physical 주소 저장, 주소 체계가 32 비트니까 32비트 즉 4 Bytes 필요 -> 2^20마다 4 Bytes가 필요, 프로세스 당 page..
[운영체제] Memory Management (1) 기본적으로 메모리 관리는 CPU가 프로그램을 수행할 수 있도록 만들어 주는 것 명령어 가져올 때 메모리에서 주소 가져옴 -> 효율적 관리 필요 메인 메모리는 느려, 캐시 사용 Binding 변수의 주소를 실제로 매핑시키는 것, 메모리 상 물리 주소를 변수의 주소를 매핑시키는 것 binding 시점에 따라 3가지로 나뉨 Compile time binding: 컴파일 할 때 매핑 -> 컴파일되면 프로그램 코드 안에 변수 주소가 하드코딩됨 프로그램이 무조건 커널 다음 번지에 올라간다고 해놓음 다른 컴퓨터에서 실행된다면 커널의 크기가 달라져 -> 프로그램 시작점이 달라져 -> 다시 컴파일해야함; flexibility 매우 떨어져 Load time binding: 프로그램 시작 프로세스 위치 0번지라고 가정, 상..
[그래프] 백준 1389 c++ 케빈 베이컨의 6단계 법칙 오 어려움 예전에 풀려고 했다가 못 풀었던 거 같음 브루트포스가 아닐까 하는 생각 ... for(int i=1; i> M; int min_dist[101][101] = {0, }; vector con; vector v; con.push_back(v); // 친구 배열 채워주기 for(int i=0; i> r >> c; arr[r][c] = 1; arr[c][r] = 1; } for(int i=1; i
[그래프] 백준 1260 c++ / Nested Functions, 정적배열과 동적배열, memset .. 그래프 탐색 결과를 출력해야 하는데 문득 main 함수 내에 dfs, bfs 함수를 정의할 수 있을지 궁금해졌음-> 걍 main 밖에 함수 정의하고 cout 하면 되긴 함 그래도 중첩 함수 선언에 대해 알아보자Nested Functions, 중첩 함수Nested functions이란 다른 함수의 내부에 정의된 함수이다.nested function 예시) foo (double a, double b){ double square (double z) { return z * z; } return square (a) + square (b);}GNU C 확장에선 지원되지만 GNU C++에서는 지원되지 않는다고. 참고: https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.h..
[브루트포스] 백준 1107 C++ #include #include #include using namespace std;int N, M;int *broken;int calMin(int num){ // 1. 100에서 +, -해서 움직이는 횟수 int fromHundred = abs(100-num); //2. 앞자릿수부터 고장난 숫자 있는지 검사 string cp = to_string(num); for(int i=0; i> N >> M; broken = new int[M]; for(int i=0; i> broken[i]; // N이 100이면 0 출력 if(N == 100) { cout - 100이면 0 출력,- 고장난 버튼 개수가 0이면 자릿수 구해서 출력- 그 외의 경우..
[분할정복] 백준 1074 c++ Divide and conquer algorithm, 분할 정복 알고리즘 : 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법 보통 재귀함수를 통해 구현 function F(x): if F(x)의 문제가 간단 then: return F(x)을 직접 계산한 값 else: x를 y1, y2로 분할 F(y1)과 F(y2)를 호출 return F(y1), F(y2)로부터 F(x)를 구한 값 어렵다.. 처음에는 2차원 배열의 모든 칸을 돌면서 숫자를 써넣은 다음 r, c에 맞는 칸의 값을 출력하는 방법을 생각했는데 어떻게 코드를 작성해야 할 지 감이 잘 안 옴 제출 코드 #include #include using namespace std; int **arr; int r, c; int n =..
[운영체제] Deadlocks 프로그램 코드에 필요한 모든 제반 조건들 - 리소스 리소스가 확보되어야 프로세스가 일을 할 수 있음 데드락 발생 조건 Mutual exclusion: 상호 배제 조건, 어떤 프로세스가 자원을 쓰고 있으면 다른 프로세스는 그 자원을 쓸 수 없다는 것 No preemption: 어떤 프로세스가 자원을 잡고 있으면 자발적으로 놓기 전까진 다른 프로세스가 사용할 수 없음, 강제로 뺏지 않음 Hold and wait: 모든 프로세스는 확보한 자원은 손에 꼭 쥐고 있고 나머지 자원을 확보하기 위해 기다린다는 것 Circular wait: P1이 P2의 자원을 기다리고, Pn-1이 Pn의 자원을 기다리고, Pn이 P0의 자원을 기다리는 것처럼 원형 대기 방식이 된다는 것 Resoure-Allocation Graph,..