분류 전체보기(339)
-
실행파일이 만들어지는 과정 - Ubuntu Linux
- 리눅스란 무엇일까? 리눅스는 윈도우와 같은 OS의 한 종류입니다. 차이점이 있다면 윈도우는 사용자 친화적인 OS이고, 리눅스는 컴퓨터 친화적인 OS입니다. 윈도우는 굉장히 간편한 UI와 사용법이 특징이기에 사용자 친화적인 OS라 하는 것이고, 리눅스는 UI가 복잡하며, 거의 모든 것을 명령어로 해결해야한다고 봐도 무방합니다. 또한, 리눅스는 어셈블리 언어로 되어있기 때문에 윈도우보다 더욱 세부적인 내용을 다룰 수 있습니다. - 리눅스와 윈도우에서의 C 소스코드 컴파일 컴파일러나 환경, 앱 종류에 따라 달라지겠지만 윈도우의 Dev C++을 기준으로 설명하겠습니다. 우리가 소스코드를 작성하고 실행을 하려면 컴파일이라는 과정을 거쳐야 합니다. 그리고 컴파일을 하기 위해선 컴파일러가 필요합니다. 또한, 컴파..
2021.05.16 -
포인터(Pointer)에 대하여
- 포인터의 정의 포인터란 주소 값을 저장하는 변수를 뜻합니다. - 주소 값이란? 그럼 주소 값이란 무엇일까요? 주소 값의 정의는 데이터가 저장된 메모리의 시작하는 주소를 의미합니다. 이렇게만 말하면 감이 잘 오지 않을 겁니다. 아래에 나와있는 그림이랑 같이 설명을 덧붙혀보겠습니다. int형 변수 a를 선언하고, 여기에 11을 대입한다고 하면 비어있던 메모리의 구조는 그림과 같이 바뀔 것입니다. 그럼 여기서 주소 값은 무엇일까요? 바로 0x01입니다. int형 자료는 메모리에서 4byte만큼의 공간을 차지합니다. 현재 a가 차지하고 있는 메모리는 0x01~0x04까지인데, 여기서 시작 주소는 가장 처음에 나오는 주소를 뜻하는 것이니 0x01이 되는 것입니다. - 포인터에서 쓰이는 연산자 포인터에서 쓰이는..
2021.05.12 -
file-download-1 풀이
항상 하던대로 웹사이트 접속 + 문제 파일 다운로드 웹페이지 메인화면에는 파일이 아무것도 없는게 정상입니다. 문제를 풀고 나서 이 게시글을 작성하는거라 제가 만들었었던 게시글이 메인 화면에 보이는거죠. 우선 코드를 먼저 보겠습니다. 코드에는 index, upload_memo, read_memo 이렇게 세 가지 함수가 들어있습니다. index는 보니 별다른 내용이 없는 것 같습니다. 중요하게 봐야할 부분은 upload_memo와 read_memo입니다. upload_memo에서 if filename.find('..') != -1: 이라는 부분이 있습니다. 파일 이름, 그러니까 우리가 업로드 할 게시글의 제목에 ..이 포함 되어 있는지 확인하는 if문입니다. 여기서 궁금증이 하나 들 것입니다. "다른 것도 ..
2021.05.09 -
simple_sqli 풀이
우선 항상 하던대로 접속정보를 따라 웹페이지에 접속하고 문제 파일을 다운받았습니다. 이번 문제 역시 Python 파일입니다. 로그인을 하기 전에 우선 코드를 보겠습니다. 코드 하단 부분에 if userid=='admin': 라는 부분이 있습니다. 우리가 로그인 해야 할 관리자 계정의 id는 admin으로 고정되어 있다는겁니다. res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"') 라는 부분은 우리가 로그인 할 때 쓰여지는 쿼리문을 나타냅니다. 여기서 {userid}를 admin으로 바꿔 작성해보면 res = query_db(f'select * from users where userid=..
2021.05.08 -
오답노트-2
문제 10명의 사람들이 순서대로 줄을 서 있다. 앞에 있는 사람부터 차례대로 가지고 있는 구슬의 수가 10, 13, 26, 11, 15, 12, 18, 13, 25, 7개이다. 사람들이 가지는 구슬의 개수를 모두 같게 하기 위하여 분배작업을 수행하려 한다. 분배작업 1회는 다음과 같다. 어떤 한 명이 인접한 한 사람에게 자신이 가지고 있는 구슬 중 일부를 준다. 모든 사람이 같은 수의 구슬을 가지게 하는데 필요한 분배작업의 최소 횟수는 얼마인가? 풀이 [10, 13, 26, 11, 15, 12, 18, 13, 25, 7] 이 구슬들을 모두 더하면 150이고, 이를 사람의 수인 10으로 나누면 15가 된다. 위 과정을 통해 한 사람에게 주어져야할 구슬의 수는 15임을 알아낸 것이다. 이제 왼쪽에서 오른쪽의..
2021.05.06 -
오답노트-1
문제 이차원 평면의 원점 (0, 0)에서 시작해서 한 번에 왼쪽, 오른쪽, 위쪽, 아래쪽 중 한 방향을 마음대로 정해 그 방향으로 거리 1만큼 이동하려고 한다. (0, 0)에서 한 번의 이동으로 갈 수 있는 곳은 (0, 1), (1, 0), (0, -1), (-1, 0)으로 모두 네 점이다. 그렇다면 정확히 10번 이동해서 도달할 수 있는 서로 다른 점의 개수는 몇 개인가? 풀이 이런 식으로 그림을 그려 확인해보면 규칙이 두 가지 보인다. 1. 최대로 갈 수 있는 경우는 (10,0), (-10,0), (0,10), (0,-10)이다. 2. 좌표값의 합의 절댓값이 짝수인 경우에만 갈 수 있다. 2번 규칙에 주목을 해서 문제를 풀어보면 식은 아래와 같다. (10+8+6+4+2)*4+1 (10 이하의 모든 좌..
2021.05.02